مرجع API · شحن العدادات

شحن عداد

POST/v1/wallets/{walletId}/meter-charges

اشحن العداد بمعرّف عملية تحفظه قبل الإرسال. يعني الردّ 202 أن الشحن قُبل أو أن التحقق من نتيجته ما زال جاريًا.

الصلاحيةmeter_charges:create
المصادقةشراء موقَّع
ردّ أنيسموقَّع
حدود الموظفين التي يُحتسب ضمنهاكل الاستدعاءات، المشتريات (حدّ الطلبات)
حزمة SDK لـ ‎.NETanis.MeterCharges.CreateAsync(walletId, operationId, request)
  • كل ردّ معالجة بالحالة 202 يحتوي فقط operationId وoperationType وstatus: "processing"؛ وتكون operationType هي meterCharge. تستخدم القراءة الكاملة الحالة 200.
  • عدم ظهور العملية في القراءة لا يثبت غيابها. أعد المحتوى المحفوظ نفسه بمعرّف العملية نفسه وتوقيع جديد. يبقى الردّ على العملية المكررة 202 أثناء تأخر ظهورها. لا تُغلق العملية بالرمز idempotency_conflict والحالة 409 إلا إذا كشفت هذه المحاولة تكرار العملية بعد مرور 60 ثانية أو أكثر منذ قبولها الأول، ثم لم تجدها قراءة لاحقة خاصة بتطبيقك. غياب القراءة أو انتهاء المهلة وحده لا يثبت التعارض. ولا يثبت هذا الرمز أن شيئًا لم يُخصم: فقد يكون الطلب الأول قُبل بالفعل، فاقرأ العملية قبل أي محاولة جديدة.
  • تُحتسب عملية الشراء ضمن حدّ orders الحالي وسقف الإنفاق اليومي نفسه للتطبيق مع طلبات البطاقات والمشتريات الأخرى.

المعاملات

الاسمالموضعالنوعملاحظات
walletIdإلزاميpathUUIDمعرّف UUID بأحرف صغيرة مع الشرطات.

الاستدعاء

موقَّع بمفتاحك، مع رقم استخدام لمرة واحدة (nonce) وبصمة للمحتوى ومعرّف العملية في Idempotency-Key.

الترويسات: Signature-Input، Signature، Content-Digest، Nonce، Idempotency-Key، X-Anis-Date، Accept-Language (اختياري). تضبطها حزم SDK كلها نيابةً عنك.

المحتوى: CreateMeterChargeRequest، بصيغة JSON.

الحقلالنوعملاحظات
packageIdإلزاميUUIDمعرّف الباقة المختارة من قائمة الباقات.
meterNumberإلزاميstringرقم العداد كنص؛ احتفظ بأصفاره الأولى.
expectedTotalإلزاميanyالإجمالي الذي أكّدته من الباقة أو عرض السعر، بصيغة Money وعملة LYD.
externalReferencestringمرجعك الخاص؛ يظهر إن أرسلته.

الردود

الحالةالمعنىالمحتوى
200نجاح.MeterCharge
202قُبل — لا نتيجة بعد.MeterChargeAccepted
400مرفوض: الاستدعاء الموقّع غير سليم البنية.مشكلة
401مرفوض: لم تتم المصادقة.مشكلة
403مرفوض: غير مسموح.مشكلة
404مرفوض: غير موجود، أو ليس لك.مشكلة
409مرفوض: يتعارض مع الحالة الحالية.مشكلة
422مرفوض: الاستدعاء يخالف قاعدة.مشكلة
429مرفوض: بلغتَ حدًا.مشكلة
503لا قرار: خدمة مطلوبة غير متاحة.مشكلة

كل ردّ على هذا الاستدعاء موقَّع من أنيس — النجاح وكل رفض. اشترط وجود التوقيع وتحقّق منه قبل أن تتصرف بناءً على الردّ؛ والردّ بلا توقيع فشل، لا يُعدّ ردًّا (كيف).

حالات الرفض

كل رفض لهذا الاستدعاء مشكلةٌ موقَّعة. ابنِ منطقك على رمزها code؛ وكلٌّ منها يرتبط بصفحة تشرح معناه وما عليك فعله.

الخطأالرمزالحالة
بيانات اعتماد غير صالحةinvalid_credentials401
استدعاء موقّع غير سليم البنيةmalformed_signed_request400
صلاحية غير كافيةinsufficient_scope403
عنوان المصدر غير مسموحsource_ip_not_allowed403
تجاوزت حدّ الاستدعاءاتrate_limited429
فشل التحققvalidation_failed422
الخدمة غير متاحةdependency_unavailable503
انتهت مهلة الاستدعاءrequest_timeout504
خطأ داخليinternal_error500
الحساب غير مخوَّلbinding_not_authorized403
الحساب غير فعّالaccount_inactive403
المحفظة غير ممنوحةwallet_not_granted404
غير موجودresource_not_found404
العملة غير مدعومةcurrency_not_supported422
المحفظة معطّلةwallet_disabled409
انتهت صلاحية المحفظةwallet_expired409
يلزم اشتراك أعمالbusiness_subscription_required409
اكتُشف تكرارreplay_detected409
معرّف العملية مستخدم من قبلidempotency_conflict409
تغيّر السعرprice_changed409
الرصيد غير كافٍinsufficient_balance409
بُلغ سقف الإنفاقspending_limit_exceeded429
العداد مرفوضmeter_rejected422
الباقة غير متاحةpackage_unavailable409

الأنواع

CreateMeterChargeRequest

الحقلالنوعملاحظات
packageIdإلزاميUUIDمعرّف الباقة المختارة من قائمة الباقات.
meterNumberإلزاميstringرقم العداد كنص؛ احتفظ بأصفاره الأولى.
expectedTotalإلزاميanyالإجمالي الذي أكّدته من الباقة أو عرض السعر، بصيغة Money وعملة LYD.
externalReferencestringمرجعك الخاص؛ يظهر إن أرسلته.

MeterCharge

الحقلالنوعملاحظات
operationIdموجود دائمًاUUIDقيمة UUID نفسها المرسلة في Idempotency-Key لهذا الشراء.
statusموجود دائمًاMeterChargeStatusتكون processing أو succeeded أو failed. وتحتاج قراءة الفشل إلى refund.status لتوضيح مصير المال.
walletIdموجود دائمًاstringالمحفظة المستخدمة في هذا الشراء.
meterNumberموجود دائمًاstringرقم العداد كنص؛ احتفظ بأصفاره الأولى.
packageموجود دائمًاMeterChargePackageالباقة المسجّلة لهذا الشحن.
totalموجود دائمًاMoneyإجمالي تكلفة المحفظة المثبّت في كل حالة بصيغة Money وعملة LYD.
personalPriceموجود دائمًاMoneyسعر التجزئة المثبّت في كل حالة؛ لا تستبدل به إجمالي الدفع.
externalReferencestringمرجعك الخاص؛ يظهر إن أرسلته.
createdAtموجود دائمًاstring (date-time)وقت تسجيل الشحن بتوقيت UTC.
completedAtstring (date-time)وقت نجاح الشحن؛ ويُحذف في حالتي المعالجة والفشل.
receiptMeterReceiptيظهر بعد نجاح الشحن؛ ويضم جميع الرموز.
failureMeterFailureسبب فشل الشحن ورسالته باللغتين؛ يظهر عند الفشل.
refundMeterRefundيوضح عند فشل الشحن هل عاد المال أو لم يُخصم أو ما زال قيد الإعادة.

MeterChargeStatus

MeterChargePackage

الحقلالنوعملاحظات
idموجود دائمًاUUIDمعرّف باقة شحن العداد.
nameموجود دائمًاstringاسم واحد محفوظ للباقة، وليس كائن نص بلغتين.
gecolPackageNameموجود دائمًاstringاسم الباقة لدى شركة الكهرباء.

Money

الحقلالنوعملاحظات
amountموجود دائمًاstringنص عشري، وليس عدد JSON. قد يكون رصيد المحفظة سالبًا عند استخدام الدين المسموح. تتبع الأسعار والإجماليات قواعد المبلغ لكل مسار.
currencyموجود دائمًاstringرمز عملة من ثلاثة أحرف كبيرة، مثل LYD. اقرأ عملة المحفظة من balance.currency.
asOfstring (date-time)وقت قراءة هذا السعر أو الرصيد.

MeterReceipt

الحقلالنوعملاحظات
receiptNumberstringرقم الإيصال الوارد من شركة الكهرباء.
creditedAmountstringنص المبلغ المضاف كما ورد من شركة الكهرباء دون تغيير؛ وليس إجمالي المحفظة.
tokensموجود دائمًاlist of MeterTokenكل رموز الشركة بترتيبها، بما فيها تغيير المفتاح قبل إضافة الرصيد.
taxesموجود دائمًاlist of MeterTaxبنود الضرائب في إيصال الشركة.

MeterToken

الحقلالنوعملاحظات
sequenceموجود دائمًاintegerترتيب الرمز لدى الشركة؛ احتفظ بالفجوات دون إعادة الترقيم.
labelموجود دائمًاstringتسمية الرمز الواردة من الشركة.
codeموجود دائمًاstringنص الرمز كاملًا، بما فيه المسافات والأصفار الأولى.
descriptionstringوصف الرمز للعرض إن ورد.

MeterTax

الحقلالنوعملاحظات
descriptionموجود دائمًاstringوصف الضريبة الأصلي من شركة الكهرباء بالعربية، دون تغيير.
amountموجود دائمًاstringنص مبلغ الشركة الأصلي؛ دون تحويل إلى مقياس Money.

MeterFailure

الحقلالنوعملاحظات
codeموجود دائمًاstringقيمة لفشل قراءة الشحن، وليست رمز مشكلة HTTP. القيم: meter_number_invalid, meter_not_whitelisted, meter_not_linked, meter_removed, meter_inactive, meter_account_blocked, meter_data_incomplete, meter_debt_exceeds_package, package_unavailable, package_limit_reached, token_not_written, insufficient_balance, gecol_unavailable, charge_failed
messageLocalizedTextرسالتان بالعربية والإنجليزية تصفان نتيجة الشحن.

LocalizedText

الحقلالنوعملاحظات
arstringالنص العربي؛ يُحذف حين يكون فارغًا.
enstringالنص الإنجليزي؛ يُحذف حين يكون فارغًا.

MeterRefund

الحقلالنوعملاحظات
statusموجود دائمًاMeterRefundStatusتعني refunded عودة المال، وnotCharged عدم خصمه، وpending أنه لم يعد بعد.
amountanyمبلغ الإعادة بصيغة Money إن ورد؛ لا تستنتج التسوية من المبلغ وحده.

MeterRefundStatus

MeterChargeAccepted

الحقلالنوعملاحظات
operationIdموجود دائمًاUUIDقيمة UUID نفسها المرسلة في Idempotency-Key لهذا الشراء.
operationTypeموجود دائمًاstringتكون دائمًا meterCharge. القيم: meterCharge
statusموجود دائمًاstringتكون دائمًا processing؛ النتيجة لم تصبح نهائية. القيم: processing