رموز الأخطاء · المفاتيح والتواقيع
استدعاء موقّع غير سليم البنية
الرمز
malformed_signed_requestالحالة400
إن كان طلب شراءلم يشترِ شيئًا — ربما اشترت نسخة سابقة: استأنف بالمعرّف نفسه
هل تعيد إرساله كما هو؟لا — غيّر شيئًا أولًا
حزمة SDK لـ .NET
AnisApiExceptionربما تمّت نسخة سابقة من طلب الشراء هذا
هذا الاستدعاء لم يشترِ شيئًا، لكنه رُفض قبل أن تنظر أنيس في طلب الشراء، فهو لا يقول شيئًا عن محاولة سابقة بمعرّف العملية نفسه. عالج السبب أولًا (أعِد الوصول، أو أصلح طريقة توقيع الاستدعاء)، ثم استأنف بالمعرّف نفسه (أو اقرأه بالاستدعاء GET /orders/{operationId}). لا تقدّمه أبدًا بمعرّف جديد.
المعنى
الاستدعاء الموقّع غير سليم البنية: ترويسة توقيع مفقودة أو لا يمكن قراءتها، أو الأجزاء الموقّعة ليست ما يحتاجه هذا المسار أو ليست بترتيبه، أو بصمة المحتوى (Content-Digest) لا يمكن قراءتها أو لا تصف المحتوى المُرسَل. تقرّر أنيس ذلك قبل أن تنظر في أي مفتاح، فهو لا يقول شيئًا عن مفتاحك.
ما عليك فعله
- شغّل الفحص الذاتي للتوقيع (التحقق من توقيعك) بشيفرة التوقيع نفسها. إن رُفض بالطريقة نفسها فالخلل في طريقة بناء شيفرتك للاستدعاء الموقّع؛ وإن نجح فقارن ما يعرضه بالاستدعاء الذي فشل.
- أعِد بناء الاستدعاء على البايتات التي ترسلها بالضبط: الترويستان
SignatureوSignature-Inputكلتاهما (بالوسمsig1)، والأجزاء التي يوقّعها هذا المسار بالضبط وبترتيبها (انظر توقيع الاستدعاءات)، وContent-Digestللمحتوى كما أُرسل — وتأكّد أن لا شيء بينك وبين أنيس يغيّر المحتوى. - لا تغيّر مفتاحك: هذا الرفض لا يقول شيئًا عنه. وإرسال الاستدعاء نفسه دون تغيير يتلقى الرد نفسه.
- في طلب شراء: رُفض الاستدعاء قبل أن تنظر أنيس في طلب الشراء، فهو لا يقول شيئًا عن محاولة سابقة بمعرّف العملية نفسه. أصلح طريقة توقيع الاستدعاء أولًا، ثم استأنف بالمعرّف نفسه (أو اقرأه بالاستدعاء
GET /orders/{operationId}). لا تقدّمه أبدًا بمعرّف جديد.
أين قد تصادفه
- GETقراءة ملفّك
/v1/profile - GETقائمة المحافظ
/v1/wallets - GETقراءة محفظة
/v1/wallets/{walletId} - GETقائمة فئات الكتالوج
/v1/wallets/{walletId}/catalog/categories - GETقائمة الفئات الفرعية لفئة
/v1/wallets/{walletId}/catalog/categories/{categoryId}/subcategories - GETقراءة فئة فرعية
/v1/wallets/{walletId}/catalog/subcategories/{subcategoryId} - GETقائمة البطاقات المعروضة للبيع
/v1/wallets/{walletId}/catalog/subcategories/{subcategoryId}/cards - GETقراءة بطاقة من الكتالوج
/v1/wallets/{walletId}/catalog/cards/{cardId} - POSTتقديم طلب شراء
/v1/wallets/{walletId}/orders - GETقراءة طلب شراء
/v1/orders/{operationId} - GETقائمة البطاقات المملوكة
/v1/wallets/{walletId}/owned-cards - GETقراءة بطاقة مملوكة
/v1/wallets/{walletId}/owned-cards/{soldCardId} - POSTكشف بطاقة
/v1/wallets/{walletId}/owned-cards/{soldCardId}/reveal - POSTكشف فاتورة
/v1/wallets/{walletId}/invoices/{invoiceId}/owned-cards/reveal - POSTتعليق تطبيقك
/v1/application/suspend - POSTإلغاء مفتاح للتطبيق
/v1/keys/{keyId}/revoke - POSTفحص توقيعك
/v1/diagnostics/signature - GETقائمة العناوين المسموح بها
/v1/application/networks - POSTالسماح بعنوان إضافي
/v1/application/networks - POSTإزالة عنوان أضفته
/v1/application/networks/remove - GETعرض باقات شحن العداد
/v1/wallets/{walletId}/meter-packages - GETعرض عمليات شحن العدادات الخاصة بي
/v1/wallets/{walletId}/meter-charges - POSTشحن عداد
/v1/wallets/{walletId}/meter-charges - GETقراءة عملية شحن
/v1/meter-charges/{operationId} - GETعرض الشحن المباشر
/v1/wallets/{walletId}/direct-recharge-products - GETقراءة منتج الشحن المباشر
/v1/wallets/{walletId}/direct-recharge-products/{productId} - GETالبحث عن مواقع المستلم
/v1/wallets/{walletId}/direct-recharge-products/{productId}/locations - GETحساب تكلفة الشحن المباشر
/v1/wallets/{walletId}/direct-recharge-products/{productId}/quote - GETعرض عمليات الشحن المباشر الخاصة بي
/v1/wallets/{walletId}/direct-recharges - POSTطلب الشحن المباشر
/v1/wallets/{walletId}/direct-recharges - GETمتابعة عملية شحن مباشر مطلوبة
/v1/direct-recharges/{operationId} - PATCHتصحيح بيانات المستلم
/v1/direct-recharges/{operationId}/recipient - GETقراءة عنوان الإشعارات
/v1/webhook-endpoint - PUTتسجيل عنوان الإشعارات
/v1/webhook-endpoint - POSTاختبار استقبال الإشعارات
/v1/webhook-endpoint/test - GETعرض تسليم الإشعارات
/v1/webhook-events - POSTإعادة إرسال إشعار
/v1/webhook-events/{eventId}/redeliver
مثال
محتوى الرفض. قيمة type هي عنوان الصفحة الإنجليزية؛ وهذه الصفحة نسختها العربية.
{
"type": "https://developers.anis.ly/errors/malformed-signed-request",
"title": "استدعاء موقّع غير سليم البنية",
"status": 400,
"code": "malformed_signed_request",
"requestId": "01J9R2K8T4V6XQ0M3B7C5D9E1F"
}