awaisjameel / didit-laravel-client
A Laravel client library for integrating with the DiDiT verification API. This client handles authentication, session management, PDF report generation, and webhook processing.
Fund package maintenance!
Awais Jameel
Requires
- php: ^7.2||^8.0
- illuminate/contracts: ^10.0||^11.0||^12.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- larastan/larastan: ^2.9||^3.0
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^10.0.0||^9.0.0||^8.22.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-arch: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
- phpstan/extension-installer: ^1.3||^2.0
- phpstan/phpstan-deprecation-rules: ^1.1||^2.0
- phpstan/phpstan-phpunit: ^1.3||^2.0
This package is auto-updated.
Last update: 2025-06-16 13:28:54 UTC
README
A Laravel client library for integrating with the DiDiT verification API. This client handles authentication, session management, PDF report generation, and webhook processing.
Features
- 🔐 OAuth2 Authentication with automatic token management
- 🔄 Session management (create, retrieve, update)
- 📄 PDF report generation
- 🔗 Webhook processing with signature verification
- ⚡ Request caching and optimization
- 🛡️ Secure webhook signature verification
- 📝 Comprehensive logging options
Installation
You can install the package via composer:
composer require awaisjameel/didit-laravel-client
Configuration
Publish the configuration file:
php artisan vendor:publish --tag="didit-laravel-client-config"
Add the following environment variables to your .env
file:
DIDIT_CLIENT_ID=your-client-id DIDIT_CLIENT_SECRET=your-client-secret DIDIT_BASE_URL=https://verification.didit.me DIDIT_AUTH_URL=https://apx.didit.me DIDIT_WEBHOOK_SECRET=your-webhook-secret DIDIT_TIMEOUT=10 DIDIT_TOKEN_EXPIRY_BUFFER=300 DIDIT_DEBUG=false
Usage
Basic Setup
use AwaisJameel\DiditLaravelClient\Facades\DiditLaravelClient; // or use AwaisJameel\DiditLaravelClient\DiditLaravelClient; // Using the facade $client = DiditLaravelClient::getInstance(); // Or create a new instance with custom configuration $client = new DiditLaravelClient([ 'client_id' => 'your-client-id', 'client_secret' => 'your-client-secret', // ... other config options ]);
Creating a Verification Session
$session = $client->createSession( callbackUrl: 'https://your-app.com/verification/callback', vendorData: 101, options: [ 'features'=> 'OCR + NFC + FACE' ] ); // The session response contains: [ 'session_id' => 'xxx-xxx-xxx', 'verification_url' => 'https://verify.didit.me/xxx' ]
Retrieving Session Details
$sessionDetails = $client->getSession('session-id'); // Response contains verification details: [ 'session_id' => 'xxx-xxx-xxx', 'status' => 'completed', 'decision' => 'approved', // ... other session data ]
Updating Session Status
$result = $client->updateSessionStatus( sessionId: 'session-id', newStatus: 'Approved', // or 'Declined' comment: 'Verification approved by admin' );
Generating PDF Reports
$pdfContent = $client->generateSessionPDF('session-id'); // Save to file file_put_contents('verification-report.pdf', $pdfContent); // Or return as download response return response($pdfContent) ->header('Content-Type', 'application/pdf') ->header('Content-Disposition', 'attachment; filename="report.pdf"');
Handling Webhooks
Set up your webhook route in routes/web.php
:
Route::post('didit/webhook', function (Request $request) { $payload = DiditLaravelClient::processWebhook($request); // Handle different webhook events match($payload['event']) { 'verification.completed' => handleVerificationCompleted($payload), 'verification.expired' => handleVerificationExpired($payload), default => handleUnknownEvent($payload) }; return response()->json(['status' => 'processed']); });
Manual webhook signature verification:
$headers = [ 'x-signature' => $request->header('x-signature'), 'x-timestamp' => $request->header('x-timestamp') ]; try { $payload = $client->verifyWebhookSignature($headers, $request->getContent()); // Process verified webhook payload } catch (Exception $e) { // Handle invalid signature return response()->json(['error' => $e->getMessage()], 400); }
Error Handling
The client throws exceptions for various error conditions. It's recommended to wrap API calls in try-catch blocks:
try { $session = $client->createSession(...); } catch (Exception $e) { // Handle error Log::error('DiDiT API Error: ' . $e->getMessage()); }
Common exceptions:
- Configuration errors (missing credentials)
- Authentication failures
- Invalid session IDs
- Network/API errors
- Invalid webhook signatures
Debugging
Enable debug mode in your configuration to get detailed logging:
// In your .env file DIDIT_DEBUG=true // Or in configuration $client = new DiditLaravelClient([ // ... other config 'debug' => true ]);
Debug logs will include:
- API requests and responses
- Token management events
- Webhook processing details
- Error details
Testing
The package includes comprehensive tests. Run them with:
composer test
Security
- All API requests use HTTPS
- Webhook signatures are verified using HMAC SHA-256
- Timing attack safe signature comparison
- Automatic token expiry management
- Request timestamp validation
Contributing
Please see CONTRIBUTING for details.
Credits
License
The MIT License (MIT). Please see License File for more information.