ربط بوابة دفع مخصصة
يتيح لك مزوّد الدفع «أخرى» استقبال المدفوعات عبر بوابة الدفع الخاصة بك. تزوّد مول باسكت بأمرين في إعداد المتجر: رابط لنقطة إنشاء رابط الدفع (خادمك)، ومفتاح سري مشترك. يوقّع مول باسكت طلبًا إلى نقطتك للحصول على رابط دفع، وتوقّع بوابتك ويب هوك عائدًا إلى مول باسكت عند اكتمال الدفع. هذا تكامل موجّه للمطورين.
الإعداد داخل التطبيق
من إعداد المتجر ← المدفوعات الإلكترونية (مُفعّل) ← خيارات متقدمة ← مزوّد الدفع، اختر «أخرى»، ثم أدخل رابط نقطة إنشاء الدفع ومفتاحك السري المشترك (يُستخدم لتوقيع كل رسالة في الاتجاهين). حافظ على سرية المفتاح — أي شخص يمتلكه يمكنه اعتماد الطلبات.
١ — مول باسكت يطلب رابط دفع منك
عند شروع المشتري بالدفع، يرسل مول باسكت طلب POST موقّعًا إلى نقطتك. تحقّق من التوقيع، وأنشئ جلسة دفع لديك بنفس المبلغ والعملة تمامًا، وأعد رابطها.
{
"orderId": "6f2a…", // your MallBasket order id
"transactionId": "o_6f2a…", // echo this back in the webhook
"storeId": "store_abc",
"userId": "user_123",
"amount": "12.50", // decimal string, charge exactly this
"currency": "USD",
"email": "buyer@example.com",
"webhookUrl": "https://europe-west3-mallbasket.cloudfunctions.net/otherWebhook",
"successUrl": "https://www.mallbasket.com/en/payment/complete?orderId=6f2a…&status=success",
"cancelUrl": "https://www.mallbasket.com/en/payment/complete?orderId=6f2a…&status=cancelled",
"nonce": "b1d9…",
"metadata": { "itemId": "item_1" }
}x-mb-signature: <hex hmac-sha256 of the raw body with your secret>أعد رابط الدفع المُستضاف. يفتحه مول باسكت للمشتري. (كما يُقبل data.paymentURL و url.)
{
"paymentURL": "https://your-gateway.example.com/pay/abc123"
}٢ — بوابتك تُعلم مول باسكت (ويب هوك)
بعد أن يدفع المشتري، أرسل رسالة موقّعة عبر POST إلى webhookUrl الذي أرسلناه لك. يتحقق مول باسكت من التوقيع، ويؤكد تطابق المبلغ مع الطلب، ويعلّم الطلب مدفوعًا. أرسل الحالة «success» فقط بعد اكتمال الدفع فعليًا.
{
"orderId": "6f2a…", // same order id
"transactionId": "o_6f2a…", // the transactionId we sent you
"status": "success", // only send this once payment truly succeeded
"amount": "12.50", // must equal the amount we sent
"currency": "USD",
"reference": "your-gateway-txn-id" // optional, shown on the receipt
}x-mb-signature: <hex hmac-sha256 of the raw body with your secret>٣ — التوقيع (في الاتجاهين)
كل طلب يحمل ترويسة x-mb-signature: وهي HMAC-SHA256 (hex) لمحتوى الطلب الخام باستخدام مفتاحك السري. احسبها على البايتات المُرسَلة تمامًا، وتحقّق من الواردة على البايتات الخام المُستلَمة (وليس على كائن أُعيدت صياغته).
// Node.js — sign the EXACT raw body bytes you are about to send
const crypto = require("crypto");
const rawBody = JSON.stringify(payload); // the bytes you POST
const signature = crypto
.createHmac("sha256", MALLBASKET_SECRET) // your restricted key
.update(rawBody, "utf8")
.digest("hex");
// send header: x-mb-signature: <signature>// Node.js — verify a request MallBasket sent to your endpoint
const crypto = require("crypto");
function verify(rawBody, headerSig, secret) {
const expected = crypto
.createHmac("sha256", secret)
.update(rawBody, "utf8") // RAW bytes, not re-parsed JSON
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(expected), Buffer.from(headerSig || "")
);
}قواعد وضمانات
- يجب تطابق المبالغ: مبلغ الويب هوك يجب أن يساوي المبلغ الذي أرسله مول باسكت وبنفس العملة، وإلا رُفض.
- أعد transactionId كما هو تمامًا — به يربط مول باسكت الدفعة بالطلب.
- يوثّق مول باسكت الويب هوك بمفتاح متجرك فقط؛ لا يستطيع متجر آخر إكمال طلباتك.
- الإنهاء غير متكرر الأثر (idempotent): يمكن إعادة إرسال الويب هوك بأمان. يعيد مول باسكت 2xx بعد تسجيل الطلب؛ أعد المحاولة عند أي استجابة غير 2xx.
- لا ترسل الحالة «success» قبل تحصيل المبلغ فعليًا.