واجهة API

اربط نظامك مع المتجر من سيرفرك. كل الأسعار في الردود هي ما سيُخصم من رصيدك بعد نسبة مجموعتك، ولا تحتاج إلى إعادة حسابها. يمكن إرسال رابط هذه الصفحة للمبرمج، والتوكن لا يظهر إلا لصاحب الحساب.

توكن الحساب

أرسِله في ترويسة الطلب باسم token. لا تضعه في رابط، ولا في تطبيق أو صفحة يراها زبائنك. من يملك التوكن يستطيع رؤية الرصيد وإنشاء طلبات.

التوكن لا يظهر في هذا الرابط. صاحب الحساب ينسخه من هنا بعد تسجيل الدخول ويرسله لك بشكل منفصل.

أساس الربط

العنوانhttps://di-p.com/api
الترويسةtoken: توكن الحساب
الصيغةAccept: application/json
الطريقةprofile وproducts بطلب GET. new_order وstatus يقبلان GET وPOST، وفضّل POST عند الإنشاء حتى لا تُحفظ الحقول في سجل الروابط. التوكن في الترويسة فقط، ووضعه في الرابط لا يسجّل الدخول.
curl -s "https://di-p.com/api/profile" \
  -H "token: YOUR_TOKEN" \
  -H "Accept: application/json"

الطلبات المتاحة

GET /profileالاسم والبريد والرصيد الحالي.
GET /productsالمنتجات وأسعار حسابك وحدود الكمية وحقول الشراء.
POST /new_orderإنشاء طلب وخصم سعره من الرصيد. GET مقبول أيضاً، وPOST أنسب.
GET /statusحالة طلب يخص حسابك. أرسل order_id عدداً صحيحاً. POST مقبول أيضاً.

الملف الشخصي

إذا كان التوكن فارغاً أو غير صحيح فالاستجابة 401 والنص User not found. لا يُعاد حساب آخر.

{
  "name": "اسم الحساب",
  "balance": "12.500000000000",
  "email": "user@example.com"
}

قائمة المنتجات

price سعر وحدتك بعد نسبة المجموعة. في منتج الكمية المحددة يكون سعر أول شريحة، والسعر الواجب دفعه لكل شريحة موجود داخل quantity_options. available تعني أن قسم المنتج مفتوح، وهي إشارة لنظامك ولا تمنع الطلب وحدها. إذا كان مخزون المنتج نفسه صفراً يعود Product not found.

typetransfer تحويل، code كود، fixed_quantity كمية محددة.
min_quantityأقل كمية مقبولة. أرسل عدداً صحيحاً من غير كسور. لمنتج التحويل والكود الإجمالي = price × quantity.
max_quantityأعلى كمية. إذا كانت null فلا يوجد سقف عددي.
fieldsحقول مطلوبة. الاسم الأول دائماً player_id، والذي يليه extra_2 ثم extra_3 ثم extra_4.
quantity_optionsتظهر فقط مع fixed_quantity. quantity نص الشريحة، وprice سعرها الكامل بعد النسبة.
{
  "id": 120,
  "name": "منتج تحويل",
  "category_id": 4,
  "type": "transfer",
  "available": true,
  "price": 1.04,
  "min_quantity": 1,
  "max_quantity": 10000,
  "fields": [
    {"name": "player_id", "label": "معرف الحساب ID", "type": "text", "required": true},
    {"name": "extra_2", "label": "ملاحظة", "type": "text", "required": false}
  ]
}
{
  "id": 900,
  "type": "fixed_quantity",
  "price": "0.08000000",
  "quantity_options": [
    {"quantity": "10", "price": "0.08000000"},
    {"quantity": "12", "price": "0.09600000"}
  ]
}

إنشاء طلب

أرسل product_id كما هو في القائمة، وquantity عدداً صحيحاً. أرسل uuid فريداً حتى 222 حرفاً لكل عملية. إعادته لنفس الحساب تُرجع الطلب القديم داخل order_exists من غير خصم ثانٍ، والقيمة المستخدمة في حساب آخر تُرفض بـ 409. لا ترسل 0: الطلبات القديمة بلا رقم عملية مخزنة بهذه القيمة، والنظام يتجاهلها ويولّد رقماً جديداً. إذا تركت الحقل فارغاً يولّد النظام قيمة ويعيدها في الرد.

تحويل

الكمية عدد صحيح بين الحد الأدنى والأعلى. الإجمالي المخصوم = price × quantity. عبّئ كل حقل required باسمه. الهاتف أرقام مع + أو - فقط، والحقل الرقمي أرقام فقط. الحقل الأول حتى 55 حرفاً، والحقول التالية حتى 120.

curl -s -X POST "https://di-p.com/api/new_order" \
  -H "token: YOUR_TOKEN" \
  -H "Accept: application/json" \
  -d "product_id=PRODUCT_ID" \
  -d "quantity=1000" \
  -d "player_id=PLAYER_ID" \
  -d "uuid=PUT-A-NEW-UUID"

كود

غالباً الكمية 1، ولا يُطلب معرف لاعب إلا إذا أعادت القائمة حقولاً. الكود نفسه يصل لاحقاً في status.code عندما تصبح الحالة 1.

curl -s -X POST "https://di-p.com/api/new_order" \
  -H "token: YOUR_TOKEN" \
  -H "Accept: application/json" \
  -d "product_id=PRODUCT_ID" \
  -d "quantity=1" \
  -d "uuid=PUT-A-NEW-UUID"

كمية محددة

أرسل quantity=1 ونص الشريحة كما هو في quantity_options.quantity داخل fixed_quantity. في المثال ضع رقم المنتج مكان PRODUCT_ID ونص الشريحة مكان SLICE. السعر المخصوم هو price الخاص بتلك الشريحة مرة واحدة. لا تضرب سعر الشريحة في رقمها، ولا ترسل رقم الشريحة مكان quantity. أكثر من شريحة في الطلب الواحد مرفوض.

curl -s -X POST "https://di-p.com/api/new_order" \
  -H "token: YOUR_TOKEN" \
  -H "Accept: application/json" \
  -d "product_id=PRODUCT_ID" \
  -d "quantity=1" \
  -d "fixed_quantity=SLICE" \
  -d "player_id=PLAYER_ID" \
  -d "uuid=PUT-A-NEW-UUID"

رد النجاح

{
  "id": 719400,
  "uuid": "8c1a0d3e-2f4b-4a6e-9c11-0b7e5d2a1001",
  "name": "اسم المنتج",
  "price": "1.040000000000",
  "state": 0,
  "replay_api": null,
  "replay_images": [],
  "fixed_quantity": null,
  "shown_quantity": "1000"
}

احفظ id ثم اسأل عن الحالة. shown_quantity هي الكمية المعروضة: رقم الطلب العادي، أو نص الشريحة في الكمية المحددة.

حالة الطلب

curl -s "https://di-p.com/api/status?order_id=ORDER_ID" \
  -H "token: YOUR_TOKEN" \
  -H "Accept: application/json"
0قيد المعالجة. انتظر ثم أعد السؤال.
3أُرسل للتنفيذ الآلي وما زال قيد المتابعة.
1مكتمل. اقرأ code للكود، وreplay_api وreplay_images للرد والصورة.
2ملغى. يُعاد المبلغ إلى الرصيد، ولا تعِد إرسال نفس العملية إلا بـ uuid جديد إذا أراد الزبون ذلك.

أرسل order_id عدداً صحيحاً. اسأل كل بضع ثوان حتى تصل الحالة إلى 1 أو 2. لا تنشئ طلباً جديداً لمجرد معرفة النتيجة. طلب لا يخص توكنك، أو رقم ناقص، يُرجع Order not found.

{
  "id": 719400,
  "name": "اسم المنتج",
  "price": "1.040000000000",
  "state": 1,
  "quantity": "1000",
  "player_id": "123456",
  "code": "ABCD-1234",
  "message": null,
  "replay_api": "تم التنفيذ",
  "replay_images": ["https://example.com/reply.png"],
  "fixed_quantity": null,
  "shown_quantity": "1000"
}

الأخطاء التي يجب أن يتعامل معها نظامك

401User not found. التوكن ناقص أو خطأ أو موضوع في الرابط بدل الترويسة.
404المنتج غير موجود أو متوقف، أو الكمية ليست عدداً صحيحاً أو أصغر من الحد (Quantity must be biggest) أو أكبر منه (Quantity must be smaller)، أو الرصيد غير كافٍ (you dont have balance)، أو رقم الطلب ليس لحسابك.
409uuid مستخدم من قبل في حساب آخر. ولّد قيمة جديدة.
422حقل ناقص أو غير صالح، أو uuid أطول من 222 حرفاً، أو الشريحة غير موجودة، أو أُرسلت كمية غير 1 لمنتج الشرائح. الرسالة عربية.
429نفس المنتج ونفس player_id خلال 60 ثانية. انتظر wait_seconds ثم أعد المحاولة بنفس uuid حتى لا يُخصم مرتين إذا كان الطلب الأول قد نجح.

إذا نجح الطلب الأول ثم انقطع الاتصال قبل أن تقرأ الرد، أعد الإرسال بنفس uuid. ستصلك بيانات الطلب الموجود بدل خصم جديد.

ترتيب الربط الصحيح

  1. اسأل /profile وتأكد أن الرصيد رقم مفهوم لنظامك.
  2. اسأل /products وخزّن id والنوع والسعر والحقول والشرائح.
  3. قبل الدفع للزبون تحقق أن available صحيحة وأن الكمية داخل الحد أو أن الشريحة موجودة حرفياً.
  4. أنشئ uuid جديداً لكل عملية شراء.
  5. أرسل /new_order واحفظ id وprice.
  6. كرر /status حتى state = 1 أو state = 2.
  7. عند الإكمال سلّم code أو نص replay_api وروابط replay_images. عند الإلغاء اعتبر الرصيد قد عاد.