تستخدم واجهات برمجة التطبيقات (الإنشاء والاستعلام وإعادة الإرسال) هذه توقيعات HMAC-SHA256. GET يتطلب /api/v1/ping مفتاح API فقط. تتضمن عمليات رد الاتصال الخاصة بالدفع أيضًا التوقيع. يستخدم HMAC سر التاجر Webhook، وليس مفتاح API الخاص بك.
01. مواصفات الرأس
01. إرسال طلبات API للطلب
Client to Serverيتطلب إنشاء الطلبات والاستعلام عنها وإعادة إرسالها أيضًا X-Bolt-Key. يجب أن يكون timestamp خلال 5 دقائق من ساعة الخادم. قم بإنشاء timestamp جديد وتوقيع عند إعادة المحاولة.
02. تلقي عمليات رد الاتصال الخاصة بالدفع
Server to Merchantيُنشئ BoltUtil طوابع زمنية وتوقيعات رد الاتصال. يجب على المستلمين التحقق من النص الخام، والتحقق من نافذة timestamp والتعامل مع الأحداث وأوامر العمل بشكل مستقل.
02. حساب التوقيع
إنشاء المحتوى الموقع
اربط الطابع الزمني من الرأس بنقطة ثم نص الطلب الأصلي: timestamp + "." + raw_body. استخدم UTF-8 واحتفظ بالنقطة حتى إذا كان النص فارغًا.
// 1. Construct payload: timestamp + "." + body
String payload = timestamp + "." + body;احسب HMAC-SHA256
استخدم السر من إعدادات التاجر Webhook. يجب أن يتطابق النص المستخدم للتوقيع تمامًا مع النص المرسل في طلب API.
// JDK standard library: javax.crypto.Mac and SecretKeySpec
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
byte[] hash = mac.doFinal(payload.getBytes(StandardCharsets.UTF_8));الترميز بأحرف ست عشرية صغيرة
حوّل ناتج التجزئة المكون من 32 بايت إلى 64 حرفًا سداسيًا عشريًا صغيرًا. أرسله في X-Bolt-Signature لطلبات API. تحقق من الإشعارات باستخدام X-Bolt-Webhook-Signature ومقارنة ثابتة الزمن.
// JDK 17+: java.util.HexFormat
String signature = HexFormat.of().formatHex(hash);03. ملاحظات التحقق
- لا تقم بتحليل JSON وإعادة تسلسله قبل التحقق. تؤثر المسافة البيضاء وفواصل الأسطر وترتيب المفاتيح والتشفير على التوقيع.
- يتحقق HMAC من سلامة المحتوى ولكنه لا يمنع إعادة التشغيل من تلقاء نفسه. تحقق من حداثة timestamp وإلغاء تكرار الأحداث.
- التوقيع الصحيح لا يعني اكتمال التنفيذ. تحقق من ارتباط الطلب وحالة الدفع والمبالغ والعملة ونوع التسوية.