Giriş isteği
Kullanıcı giriş yapmak istediğinde backend'inizden çağırın. Touchque push bildirim gönderir.
POST/login/request
Gövde parametreleri
| Parametre | Tip | Varsayılan | Açıklama |
|---|---|---|---|
externalUsername | string | — | Kullanıcı ID Zorunlu |
type | string | "LOGIN" | Örn: "LOGIN", "TRANSFER", "PAYMENT": çalışma alanınızda tanımlı bir işlem türü (bkz. İşlem türleri), yoksa yanıt 400 unknown_action olur. AI Risk Motoru string isminden anlamsal risk analizi yapar. Opsiyonel |
referenceId | string | null | Sizin takip no Opsiyonel |
browserProof | string | null | Sessiz giriş: tarayıcının X-Touchque-Browser kanıtı, olduğu gibi iletilir. Bu istek telefonda onaylanınca Touchque tarayıcıyı tanır. Opsiyonel |
Giriş isteği 30 saniye geçerlidir. Süre dolunca
EXPIRED olur."Neden?" vaka kodu. Her yanıt
caseCode taşır (örn. K7P-2QX): 200 ve her ret (403 blocked ve device_keys_lost, 423 frozen, 429 rate_limited). Bir istek reddedildiğinde ya da sayı eşleştirme istediğinde kodu kullanıcıya gösterin ("Destek ekibinize söyleyin: K7P-2QX"). Ekibiniz kararı bu panelde Logs → Look up a case altında açar: nedenler, her kontrol ve neyin geçireceği. Sayı eşleştirme ya da passkey yanıtı ayrıca sade reasons [{ code, text }] taşır.İstek
const { Touchque } = require('@touchque/node');
const tq = new Touchque({
apiKey: 'tq_abc123',
apiSecret: 'YOUR_API_SECRET'
});
async function loginUser() {
// Sadece istek atmak isterseniz (Callback kullanıyorsanız):
const request = await tq.login.request({
externalUsername: 'user@yourcompany.com',
type: 'LOGIN'
});
console.log('Request ID:', request.requestId);
// ALTERNATİF: Tek satırda hem istek atıp hem onayı beklemek için (Polling):
/*
try {
const result = await tq.login.verify({
externalUsername: 'user@yourcompany.com',
type: 'LOGIN',
timeout: 30000,
// Numara eşleştirme: numarayı şimdi gösterin, telefon onu soruyor
onChallenge: ({ challengeCode }) => { if (challengeCode) console.log('Pick', challengeCode, 'on your phone'); }
});
console.log('User approved!');
} catch (err) {
console.log('User rejected or timeout:', err.message);
}
*/
}
loginUser();<?php
require_once 'vendor/autoload.php';
use Touchque\Touchque;
use Touchque\Config;
$tq = new Touchque(new Config('tq_abc123', 'YOUR_API_SECRET'));
// Sadece istek atmak isterseniz (Callback kullanıyorsanız):
$request = $tq->login->request('user@yourcompany.com', 'LOGIN');
echo "Request ID: " . $request['requestId'] . "\n";
// ALTERNATİF: Tek satırda hem istek atıp hem onayı beklemek için (Polling):
/*
try {
// Numara eşleştirme: numarayı şimdi gösterin, telefon onu soruyor
$result = $tq->login->verify('user@yourcompany.com', 'LOGIN', null, 30000, null, null, false, false, null, null,
function (array $c) { if (isset($c['challengeCode'])) echo "Pick {$c['challengeCode']} on your phone\n"; });
echo "User approved!";
} catch (\Exception $e) {
echo "User rejected or timeout: " . $e->getMessage();
}
*/package main
import (
"fmt"
"log"
"github.com/Touchque/touchque-go/v5/touchque"
)
func main() {
tq, err := touchque.New(touchque.DefaultConfig("tq_abc123", "YOUR_API_SECRET"))
if err != nil {
log.Fatal(err)
}
// Sadece istek atmak isterseniz (Callback kullanıyorsanız):
request, err := tq.Login.RequestWithOptions(touchque.LoginRequestOptions{
ExternalUsername: "user@yourcompany.com",
Type: "LOGIN",
})
if err != nil {
log.Fatal(err)
}
fmt.Println("Request ID:", request.RequestID)
// ALTERNATİF: Tek satırda hem istek atıp hem onayı beklemek için (Polling):
/*
// Numara eşleştirme: numarayı şimdi gösterin, telefon onu soruyor
result, err := tq.Login.VerifyWithOptions(touchque.LoginRequestOptions{
ExternalUsername: "user@yourcompany.com", Type: "LOGIN",
OnChallenge: func(c touchque.VerifyChallenge) {
if c.ChallengeCode != "" { fmt.Println("Pick", c.ChallengeCode, "on your phone") }
},
}, 30000)
if err != nil {
log.Println("User rejected or timeout:", err)
} else {
fmt.Println("User approved!")
}
*/
}from touchque import Touchque, Config
tq = Touchque(Config(api_key="tq_abc123", api_secret="YOUR_API_SECRET"))
# Sadece istek atmak isterseniz (Callback kullanıyorsanız):
request = tq.login.request("user@yourcompany.com", "LOGIN")
print("Request ID:", request["requestId"])
# ALTERNATİF: Tek satırda hem istek atıp hem onayı beklemek için (Polling):
# try:
# # Numara eşleştirme: numarayı şimdi gösterin, telefon onu soruyor
# result = tq.login.verify("user@yourcompany.com", "LOGIN",
# on_challenge=lambda c: c.get("challengeCode") and print("Pick", c["challengeCode"], "on your phone"))
# print("User approved!")
# except Exception as e:
# print(f"User rejected or timeout: {e}")using Touchque;
var tq = new TouchqueClient(new TouchqueOptions { ApiKey = "tq_abc123", ApiSecret = "YOUR_API_SECRET" });
// Sadece istek atmak isterseniz (Callback kullanıyorsanız):
var request = await tq.Login.RequestAsync("user@yourcompany.com", "LOGIN");
Console.WriteLine($"Request ID: {request.RequestId}");var tq = new TouchqueClient(new TouchqueOptions().apiKey("tq_abc123").apiSecret("YOUR_API_SECRET"));
// Sadece istek atmak isterseniz (Callback kullanıyorsanız):
Login.RequestResult request = tq.login().request("user@yourcompany.com");
System.out.println("Request ID: " + request.requestId());tq = Touchque::Client.new(api_key: "tq_abc123", api_secret: "YOUR_API_SECRET")
# Sadece istek atmak isterseniz (Callback kullanıyorsanız):
request = tq.login.request("user@yourcompany.com", type: "LOGIN")
puts "Request ID: #{request["requestId"]}"# 1) İmza oluştur
BODY='{"externalUsername": "user@yourcompany.com", "type": "LOGIN"}'
BODY_HASH=$(echo -n "$BODY" | openssl dgst -sha256 | awk '{print $2}')
TS=$(date +%s000)
NONCE=$(openssl rand -hex 16)
MSG="POST:/login/request:$TS:$NONCE:$BODY_HASH"
SIG=$(echo -n "$MSG" | openssl dgst -sha256 -hmac "YOUR_API_SECRET" | awk '{print $2}')
# 2) İstek gönder
curl -X POST https://api.touchque.com/login/request \
-H "x-api-key: tq_abc123" \
-H "x-signature: $SIG" \
-H "x-timestamp: $TS" \
-H "x-nonce: $NONCE" \
-H "Content-Type: application/json" \
-d "$BODY"Cevap 200
{
"message": "Request sent",
"requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"caseCode": "K7P-2QX"
}