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ı.
- Kaynak kod: github.com/GlobalTrustID/php
- Paket: packagist.org/packages/globaltrustid/php
- Lisans: MIT
composer require globaltrustid/phpGereken: PHP 5.6+, ext-curl, ext-json, ext-openssl. Başka bağımlılık yok.
Hızlı bakış#
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ır | Ne için | |
|---|---|---|
client_id + client_secret | Panel → Entegrasyonlar → OAuth Uygulamaları | Giriş |
api_key (sk_live_...) | Panel → API Keys | Kimlik 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)#
$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#
$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.
GTI_CLIENT_ID=gtid_...
GTI_REDIRECT_URI=https://siteniz.com/gti/callback
GTI_API_KEY=sk_live_...
GTI_WEBHOOK_SECRET=whsec_...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.
$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:
require_once 'src/Exception.php';
require_once 'src/Store/StoreInterface.php';
require_once 'src/Store/SessionStore.php';
require_once 'src/Client.php';