İçeriğe geç
GlobalTrustIDdocs

PHP

Composer paketi — OAuth ile giriş, QR ile kimlik doğrulama ve webhook imzası. Laravel ve CodeIgniter hazır.

globaltrustid/php, GlobalTrustID'nin resmî PHP istemcisi. Üç işi yapar: OAuth ile giriş, QR ile kimlik doğrulama, webhook imzasının doğrulanması.

Terminal
composer require globaltrustid/php

Gereken: PHP 5.6+, ext-curl, ext-json, ext-openssl. Başka bağımlılık yok.

Hızlı bakış#

PHP
use GlobalTrustID\Client;

$gti = new Client([
    'client_id'    => 'gtid_...',
    'redirect_uri' => 'https://siteniz.com/gti-callback.php',
]);

// Yönlendirme sayfası
header('Location: ' . $gti->loginUrl());

// Callback sayfası
$user = $gti->handleCallback();
echo $user['sub'];

handleCallback() PKCE verifier'ını ve state'i depodan okur, state'i sabit zamanlı karşılaştırır, kodu token'a çevirir ve profili döner.

İki ayrı kimlik bilgisi#

Çalışmayan entegrasyonların en sık sebebi bu. api_key ile client_secret aynı şey değildir:

Nereden alınırNe için
client_id + client_secretPanel → Entegrasyonlar → OAuth UygulamalarıGiriş
api_key (sk_live_...)Panel → API KeysKimlik doğrulama oturumları

Public istemci kullanıyorsanız client_secret alanını hiç yazmayın — tarayıcı ya da mobil uygulama sır saklayamaz, akışı PKCE korur.

Kimlik doğrulama (QR)#

PHP
$gti = new Client(['api_key' => 'sk_live_...']);

$session = $gti->verify(['identity.first_name', 'identity.national_id']);
echo '<img src="' . htmlspecialchars($gti->qrUrl($session['session_id'])) . '">';

$result = $gti->result($session['session_id']);
if ($gti->isIdentityVerified($result)) {
    // Kimlik BELGESİ NFC ile okundu.
}

isIdentityVerified() yalnızca çipten okunabilen alanlara bakar: ad ve e-posta kullanıcının kendi yazdığı profilden de gelebilir, kimlik numarası ve belge numarası gelemez.

Webhook#

PHP
$raw = file_get_contents('php://input');   // HAM gövdeyi önce okuyun

if (!$gti->verifyWebhook($raw)) {
    http_response_code(401);
    exit;
}

Gövdeyi JSON'a çevirip yeniden kodlarsanız boşluk ve anahtar sırası değişir, imza tutmaz. verifyWebhook() ayrıca zaman damgasına bakar: imza geçerli olsa bile 5 dakikadan eski bir istek reddedilir.

Laravel#

Paket auto-discovery ile bulunur; config/app.php'ye bir şey eklemeniz gerekmez.

ENV
GTI_CLIENT_ID=gtid_...
GTI_REDIRECT_URI=https://siteniz.com/gti/callback
GTI_API_KEY=sk_live_...
GTI_WEBHOOK_SECRET=whsec_...
PHP
class GtiController extends Controller
{
    public function __construct(private \GlobalTrustID\Client $gti) {}

    public function redirect()
    {
        return redirect()->away($this->gti->loginUrl());
    }
}

İstemciyi kapsayıcıdan alın, elle new Client(...) yazmayın: sağlayıcı onu Laravel oturumuyla kuruyor. Elle kurarsanız PKCE verifier'ı $_SESSION'a yazılır ve Laravel oturumu Redis/veritabanı sürücüsündeyse callback'te geri okunamaz — akış "oturum bulunamadı" ile ölür, sebebi de hiçbir logda görünmez.

Tam örnek: examples/laravel.

CodeIgniter 4#

CI4'te kendini bağlayan bir sağlayıcı yok; istemciyi bir Services girdisiyle kurarsınız. Kopyalanmaya hazır dört dosya examples/codeigniter altında.

PHP
$gti = service('gti');
return $this->response->redirect($gti->loginUrl());

Dikkat: iki scope henüz istenmemeli#

address ve identity.passport_number keşif belgesinde görünüyor ama mobil uygulama bugün ikisini de dolduramıyor — kimlik cüzdanı özelliğiyle gelecekler. Onay için istenen alanların tamamının dolu olması gerektiğinden bunları istemek oturumu onaylanamaz hâle getirir.

Composer olmadan#

Eski bir kurulumda Composer yoksa dosyalar doğrudan dahil edilebilir:

PHP
require_once 'src/Exception.php';
require_once 'src/Store/StoreInterface.php';
require_once 'src/Store/SessionStore.php';
require_once 'src/Client.php';