كيف يطلب سيرفر آخر إرسال رسالة من سيرفرك؟

هذه الصفحة شرح مرئي + خطوات + محاكاة لطلب POST إلى api/send.php. افتحها من المتصفح عبر Apache (مثل http://localhost/sm/api-demo.html) حتى تعمل المحاكاة بنفس النطاق.

١) المخطط التنظيمي (من يرتبط بمن؟)

التدفق من اليمين لليسار منطقياً (سيرفرك الخارجي يبدأ الطلب):

سيرفر نظامك الآخر (PHP / Node / Python …) — ينفّذ طلب HTTP برمجياً، ويحفظ api.key سرياً على السيرفر فقط.
↓ POST + JSON + X-API-Key
سيرفر مشروع smapi/send.php يتحقق من المفتاح ثم يوجّه الطلب: إما سحابة (api.sms-gate.app من config.php) أو محلي إذا أرسلت gateway_* في JSON.
↓ HTTPS (سحابة) أو HTTP محلي
Android SMS Gate — الهاتف متصل أونلاين (سحابة) أو على شبكتك (محلي).
شبكة الجوال — تصل SMS إلى رقم المستلم.

يُسجَّل كل طلب API (بعد المفتاح + JSON صالح) في طلبات السيرفرات مع الرسالة وعنوان IP ونسخة JSON منزوعة كلمات المرور — server_inbox.php.

شجرة مبسّطة

Your Backend └── HTTP POST (Content-Type: application/json) └── X-API-Key: <من config.php> └── Body (سحابة): { phone_number, message } أو (محلي): { gateway_url, gateway_username, gateway_password, phone_number, message } └── sm server (api/send.php) └── api.sms-gate.app أو Gateway LAN └── الهاتف → SMS

٢) المتطلبات قبل أن «يعمل الاتصال»

٣) ماذا ترسل بالضبط؟

POST application/json

ترويسة إلزامية (واحدة تكفي):

X-API-Key: YOUR_SECRET_KEY # أو Authorization: Bearer YOUR_SECRET_KEY

جسم JSON — وضع سحابي (موصى به)

بدون gateway_*. إمّا أسرار السحابة في config.php فقط، أو تمريرها في الطلب كما يلي.

{ "phone_number": "+9665xxxxxxxx", "message": "نص الرسالة" }

أو سحابة مع بيانات داخل الطلب (بدون الاعتماد على config)

{ "cloud_api_url": "https://api.sms-gate.app/3rdparty/v1/message", "cloud_username": "من_التطبيق", "cloud_password": "من_التطبيق", "phone_number": "+9665xxxxxxxx", "message": "نص الرسالة" }

أو عدة أرقام دفعة واحدة (مع السحابة من config)

{ "message": "نص موحّد" }

جسم JSON — Gateway محلي (تجاوز للسحابة)

{ "gateway_url": "http://192.168.1.10:8080/messages", "gateway_username": "sms", "gateway_password": "كلمة_مرور_التطبيق", "phone_number": "+9665xxxxxxxx", "message": "نص الرسالة" }

يمكن استخدام المفتاح phone بدلاً من phone_number. للمحلي: رقم واحد فقط لكل طلب.

٤) خطوات تنفيذية على «السيرفر الآخر» (فكرة عامة)

  1. خزّن عنوان الـ API الكامل، مثل https://your-domain/sm/api/send.php.
  2. خزّن api.key بشكل سري (لا تضعه في كود الواجهة الأمامية للزوار).
  3. ابنِ كائناً JSON بالحقول أعلاه من منطق نظامك (طلبية، تنبيه، إلخ).
  4. أرسل POST مع Content-Type: application/json والترويسة للمفتاح.
  5. اقرأ الرد JSON: success، log_id، inbox_id (سجل طلب السيرفر)، delivered، http_code، إلخ.

٥) محاكاة شاملة (من هذه الصفحة)

املأ الحقول ثم «إرسال تجريبي» لاستدعاء api/send.php الحقيقي. المفتاح لا يُحفظ في الصفحة بعد التحديث.

إذا فتحت هذه الصفحة كملف file:// قد يمنع المتصفح الطلب. استخدم http://localhost/sm/api-demo.html. لا تشارك api.key علناً؛ المحاكاة للتعلم أو الشبكة الموثوقة فقط.

نتيجة الطلب

لم يُرسل طلب بعد.

٦) مفتاح المعنى في الرد

success الطلب وُسِّع ووُسِج في قاعدة البيانات (حتى لو فشل الـ Gateway).
delivered تقريباً: هل رد الـ Gateway بكود HTTP ضمن النجاح (2xx).
log_id رقم السجل في جدول sms_logs.
inbox_id رقم سجل الطلب الوارد من السيرفر الآخر (جدول api_server_inbox؛ يُعرض في server_inbox.php).
401 / 400 مفتاح خاطئ أو JSON/حقول غير صالحة.
transport في الرد (نجاح): cloud أو local حسب مسار الطلب.

للعودة: إرسال · العمليات