تسجيل webhook
يشترك برابط علني في حدث واحد أو أكثر. تتلقى كل نقطة نهاية سرّها الخاص بـ HMAC-SHA256 — يُستخدم لتوقيع كل عملية تسليم صادرة، مع حماية بنافذة مضادة للإعادة. يُعرض السر مرة واحدة عند الإنشاء؛ فإن فقدته، أعِد توليده بإزالة نقطة النهاية وإعادة إضافتها.
https://notpanel.com/api/v2action=webhook.addapplication/x-www-form-urlencodedالمعاملات
| الاسم | النوع | الوصف |
|---|---|---|
| keyمطلوب | string | مفتاح API الخاص بك. |
| actionمطلوب | string | يجب أن يكون السلسلة النصية الحرفية "webhook.add". |
| urlمطلوب | string (URL) | نقطة نهاية HTTPS علنية ستستقبل طلبات POST. يجب أن تكون قابلة للوصول من الإنترنت العام. |
| events | string (CSV) | قائمة أحداث مفصولة بفواصل للاشتراك بها. الافتراضي هو جميع الأحداث. انظر القائمة أدناه. |
مثال على الطلب
استبدل YOUR_API_KEY بالمفتاح المُولَّد ضمن صفحة API في لوحة تحكمك.
curl -X POST https://notpanel.com/api/v2 \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "key=YOUR_API_KEY&action=webhook.add&url=https://your-server.example.com/notpanel-webhook&events=order.completed,order.failed,balance.low"const res = await fetch("https://notpanel.com/api/v2", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
key: "YOUR_API_KEY",
action: "webhook.add",
url: "https://your-server.example.com/notpanel-webhook",
events: "order.completed,order.failed,balance.low",
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://notpanel.com/api/v2",
data={
"key": "YOUR_API_KEY",
"action": "webhook.add",
"url": "https://your-server.example.com/notpanel-webhook",
"events": "order.completed,order.failed,balance.low",
},
)
print(res.json())<?php
$body = http_build_query([
'key' => 'YOUR_API_KEY',
'action' => 'webhook.add',
'url' => 'https://your-server.example.com/notpanel-webhook',
'events' => 'order.completed,order.failed,balance.low',
]);
$response = file_get_contents('https://notpanel.com/api/v2', false, stream_context_create([
'http' => [
'method' => 'POST',
'header' => "Content-Type: application/x-www-form-urlencoded\r\n",
'content' => $body,
'ignore_errors' => true,
],
]));
print_r(json_decode($response, true));
مثال على الاستجابة
{
"webhook_id": "whk_01HG9X...",
"url": "https://your-server.example.com/notpanel-webhook",
"secret": "rotate-this-immediately-it-is-shown-once",
"events": [
"order.completed",
"order.partial",
"order.cancelled",
"order.expired",
"order.failed",
"order.processing",
"order.in_progress",
"order.refunded",
"order.refill_completed",
"balance.low"
]
}الأخطاء الشائعة
| الحالة | الجسم | السبب |
|---|---|---|
| 400 | {"error":"Maximum 5 webhook endpoints per API key"} | استنفدت نقاط النهاية القائمة الحد الأقصى. أزل نقطة نهاية غير مستخدمة عبر action=webhook.remove أولاً. |
| 400 | {"error":"Invalid URL"} | لم يكن الرابط http/https، أو تعذّر تحليله، أو حُلّ إلى عنوان IP خاص/محلي (loopback). |
| 400 | {"error":"Invalid event: foo"} | اسم الحدث ليس ضمن قائمة السماح. تحقّق من الإملاء — تأخذ الأسماء الشكل "order.<status>". |