أنشئ جلسة الدفع، وأرفق مرجع المشتري، وتحقق من الـ Webhooks الموقّعة من PHP مباشرة أو Laravel أو Symfony. PHP 8.1+، عبر curl أو streams، بلا أي تبعيّات.
composer require esaalat/esaalat-phpuse Esaalat\Client;
// Reads ESAALAT_CLIENT_ID, ESAALAT_CLIENT_SECRET and ESAALAT_WEBHOOK_SECRET.
$esaalat = Client::fromEnv();
$session = $esaalat->createSession([
'orderId' => 'order-12345',
'amount' => 5000, // whole riyals
]);
// $session['session_token'] → open the checkout from your page
// $session['portal_url'] → or redirect the buyer straight to ittry {
$event = $esaalat->verifyWebhook(
file_get_contents('php://input'), // the RAW body
$_SERVER['HTTP_X_ESAALAT_SIGNATURE'] ?? ''
);
} catch (\Esaalat\EsaalatException $error) {
http_response_code(400); // anything but 2xx retries
exit;
}
if ($event['event'] === 'payment.verified') {
releaseOrder($event['order_id']); // idempotent on intent_id
}
http_response_code(200);exp داخل الـ JWT، فلا تبدأ طلباتك بالفشل عند انتهاء الساعة.429 أو انتهاء المهلة أن ينشئ الطلب مرتين.429 و5xx وفشل الشبكة، مع احترام Retry-After.| المعامل | متغير البيئة | القيمة الافتراضية |
|---|---|---|
$clientId | ESAALAT_CLIENT_ID | مطلوب |
$clientSecret | ESAALAT_CLIENT_SECRET | مطلوب |
$webhookSecret | ESAALAT_WEBHOOK_SECRET | يحتاجه verifyWebhook |
$baseUrl | ESAALAT_BASE_URL | https://api.esaalat.com/api/v1 |
$timeout | — | 20 ثانية |
$maxRetries | — | 2 |
Client::fromEnv() يقرأ بيئة العملية و$_ENV/$_SERVER، فيُلتقط ملف .env الذي يحمّله Laravel أو Symfony.ext-curl مُقترح لا مطلوب: من دونه تستخدم الحزمة streams في PHP.Client::formatAmount(5000.5) يرفض قبل إرسال الطلب.