نظرة عامة على الـ webhooks
تتيح لك الـ webhooks تلقي إشعارات لحظية بالأحداث التي تقع في حسابك على OrcaRail، مثل نجاح دفعة أو فشلها.
ما هي الـ webhooks؟
الـ webhooks استدعاءات HTTP راجعة ترسلها OrcaRail إلى خادمك عند وقوع أحداث معينة. بدلًا من استطلاع API بحثًا عن تحديثات، تدفع الـ webhooks بيانات الحدث إلى تطبيقك لحظيًا.
كيف تعمل الـ webhooks
- يقع حدث في OrcaRail (مثل نجاح دفعة)
- ترسل OrcaRail طلب HTTP POST إلى نقطة نهاية الـ webhook لديك
- يرد خادمك بـ
200 OKلتأكيد الاستلام - يعالج تطبيقك الحدث
إعداد الـ webhooks
1. أنشئ نقطة نهاية للـ webhook
أنشئ في تطبيقك نقطة نهاية HTTP يمكنها استقبال طلبات POST:
// Express.js example
app.post('/webhooks/orcarail', express.json(), (req, res) => {
const event = req.body
// Process the event
handleWebhookEvent(event)
// Always return 200 OK immediately
res.status(200).json({ received: true })
})
2. اضبط رابط الـ webhook
اضبط رابط نقطة نهاية الـ webhook عند إنشاء مفتاح API أو تحديثه. يجب أن يكون رابط الـ webhook:
- متاحًا للعموم — يجب أن تصل إليه OrcaRail من الإنترنت
- HTTPS — للأمان (إلزامي في الإنتاج)
- سريعًا — يرد بـ
200 OKخلال 10 ثوانٍ (مهلة الانتظار 10 ثوانٍ)
راجع إعداد الـ webhooks للتعليمات التفصيلية.
3. تحقق من توقيعات الـ webhooks
تحقق دائمًا من توقيعات الـ webhooks للتأكد من أن الطلبات صادرة فعلًا من OrcaRail. راجع توقيعات الـ webhooks للتفاصيل.
أحداث الـ webhook
ترسل OrcaRail أحداث webhook لأنشطة مختلفة متعلقة بالمدفوعات:
| الحدث | الوصف |
|---|---|
payment_intent.completed | نجح Payment Intent وعولجت الدفعة |
payment_intent.processing | Payment Intent قيد المعالجة على البلوكتشين |
payment_intent.canceled | أُلغي Payment Intent |
payment_intent.requires_payment_method | يحتاج Payment Intent إلى طريقة دفع |
راجع أحداث الـ webhook لمعلومات تفصيلية عن كل نوع حدث.
حمولة الـ webhook
تتبع كل أحداث الـ webhook هذه البنية:
{
"type": "payment_intent.completed",
"data": {
"object": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"amount": "100.00",
"currency": "usd",
"status": "completed",
"metadata": {
"order_id": "12345"
}
}
}
}
معالجة الـ webhooks
عدم التكرار (Idempotency)
قد تُرسل الـ webhooks أكثر من مرة للحدث نفسه. اجعل معالجات الـ webhooks دائمًا idempotent:
const processedEvents = new Set()
app.post('/webhooks/orcarail', express.json(), async (req, res) => {
const event = req.body
const eventId = `${event.type}_${event.data.object.id}`
// Check if we've already processed this event
if (processedEvents.has(eventId)) {
return res.status(200).json({ received: true })
}
// Process the event
await handleWebhookEvent(event)
// Mark as processed
processedEvents.add(eventId)
res.status(200).json({ received: true })
})
استجب بسرعة
استجب دائمًا بـ 200 OK خلال 10 ثوانٍ (مهلة الـ webhook)، ثم عالج الحدث بشكل غير متزامن:
app.post('/webhooks/orcarail', express.json(), (req, res) => {
const event = req.body
// Respond immediately
res.status(200).json({ received: true })
// Process asynchronously
processEventAsync(event).catch((error) => {
console.error('Error processing webhook:', error)
})
})
معالجة الأخطاء
إذا أعادت نقطة النهاية رمز حالة غير 200، فستعيد OrcaRail إرسال الـ webhook. نفّذ معالجة أخطاء سليمة:
app.post('/webhooks/orcarail', express.json(), async (req, res) => {
try {
const event = req.body
// Verify signature
verifyWebhookSignature(req)
// Process event
await handleWebhookEvent(event)
res.status(200).json({ received: true })
} catch (error) {
console.error('Webhook error:', error)
// Return 500 to trigger retry, or 200 if you don't want retries
res.status(500).json({ error: 'Internal server error' })
}
})
اختبار الـ webhooks
باستخدام ngrok
للتطوير المحلي، استخدم ngrok لإتاحة خادمك المحلي:
ngrok http 3000
ثم اضبط رابط الـ webhook على https://your-ngrok-url.ngrok.io/webhooks/orcarail.
الاختبار باستخدام cURL
يمكنك اختبار نقطة نهاية الـ webhook يدويًا:
curl -X POST https://your-webhook-url.com/webhooks/orcarail \
-H "Content-Type: application/json" \
-H "x-webhook-signature: your-signature" \
-d '{
"type": "payment_intent.completed",
"data": {
"object": {
"id": "550e8400-e29b-41d4-a716-446655440001",
"amount": "100.00",
"currency": "usd",
"status": "succeeded"
}
}
}'
الخطوات التالية
- إعداد الـ webhooks — اضبط الـ webhooks لمفاتيح API
- أحداث الـ webhook — تعرّف على كل الأحداث المتاحة
- توقيعات الـ webhooks — أمّن نقطة نهاية الـ webhook