رموز الأخطاء · المفاتيح والتواقيع
بيانات اعتماد غير صالحة
invalid_credentialsInvalidCredentialsExceptionربما تمّت نسخة سابقة من طلب الشراء هذا
هذا الاستدعاء لم يشترِ شيئًا، لكنه رُفض قبل أن تنظر أنيس في طلب الشراء، فهو لا يقول شيئًا عن محاولة سابقة بمعرّف العملية نفسه. عالج السبب أولًا (أعِد الوصول، أو أصلح طريقة توقيع الاستدعاء)، ثم استأنف بالمعرّف نفسه (أو اقرأه بالاستدعاء GET /orders/{operationId}). لا تقدّمه أبدًا بمعرّف جديد.
المعنى
تعذّر على أنيس التحقق من هوية الاستدعاء: معرّف المفتاح غير معروف؛ أو المفتاح غير فعّال (لم يُؤكَّد بعد، أو أُلغي، أو تجاوز تاريخ انتهائه)، أو هو مفتاح مستبدَل انتهت فترة التداخل الخاصة به؛ أو التوقيع لا يطابق الاستدعاء؛ أو التوقيع قديم جدًا أو موقَّع بساعة غير مضبوطة. كل هذه الحالات تتلقى الرد نفسه عمدًا، كي لا يكشف الرفض لأحد أيّها يلتفّ عليه. أما الاستدعاء الموقّع غير سليم البنية فيُجاب بـ malformed_signed_request.
ما عليك فعله
- تحقّق من أن معرّف المفتاح والمفتاح الخاص الذي توقّع به متطابقان.
- تحقّق من أن المفتاح فعّال: تعرض حالة التسجيل
activeبعد أن يؤكّده موظفو أنيس، وkeyExpiresAtهو تاريخ توقفه عن العمل. - تحقّق من ساعة الخادم، ووقّع كل محاولة من جديد — لا تُعِد استخدام توقيع قديم أبدًا.
- بعد استبدال المفتاح (يعمل المفتاحان معًا حتى 30 يومًا، تُحسب من وقت بدء عمل المفتاح الجديد): عند انتهاء فترة التداخل يُرفض المفتاح القديم تلقائيًا بالرمز
invalid_credentials— دون أن يحتاج أحد إلى فعل شيء. انقل التوقيع إلى معرّف المفتاح الجديد قبل ذلك. - شغّل الفحص الذاتي للتوقيع: يعرض بالضبط ما رأته أنيس. وإن رُفض هو أيضًا، فتحقّق من المفتاح وحالته، ومن ساعة الخادم، ومن العنوان الذي تستدعيه — يجب أن يكون العنوان الذي أعطتك إياه أنيس.
- في طلب شراء: رُفض الاستدعاء قبل أن تنظر أنيس في طلب الشراء، فهو لا يقول شيئًا عن محاولة سابقة بمعرّف العملية نفسه. أعِد الوصول أولًا، ثم استأنف بالمعرّف نفسه (أو اقرأه بالاستدعاء
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/invalid-credentials",
"title": "بيانات اعتماد غير صالحة",
"status": 401,
"code": "invalid_credentials",
"requestId": "01J9R2K8T4V6XQ0M3B7C5D9E1F"
}