هذه الصفحة شرح مرئي + خطوات + محاكاة لطلب POST إلى api/send.php.
افتحها من المتصفح عبر Apache (مثل http://localhost/sm/api-demo.html) حتى تعمل المحاكاة بنفس النطاق.
١) المخطط التنظيمي (من يرتبط بمن؟)
التدفق من اليمين لليسار منطقياً (سيرفرك الخارجي يبدأ الطلب):
سيرفر نظامك الآخر (PHP / Node / Python …) — ينفّذ طلب HTTP برمجياً، ويحفظ api.key سرياً على السيرفر فقط.
↓ POST + JSON + X-API-Key
سيرفر مشروع sm — api/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
٢) المتطلبات قبل أن «يعمل الاتصال»
سيرفر sm يعمل (Apache + MySQL) وقاعدة البيانات جاهزة.
api.key في config.php غير فارغ؛ ونفس القيمة عندك على السيرفر الآخر (كمتغير بيئة أو ملف إعدادات سري).
وصول شبكي: السيرفر الآخر يصل إلى عنوان api/send.php (IP أو دومين؛ نفس LAN أو VPN أو إنترنت مع إعدادات أمنية).
وضع السحابة: من index.php تُدخل عنوان API وبيانات Cloud يدوياً في كل مرة. من الـ API يمكن إما تمرير cloud_api_url و cloud_username و cloud_password في JSON، أو تركها فارغة والاعتماد على config.php → cloud فقط للطلبات البرمجية.
وضع محلي: إما transport = local أو أرسل حقول gateway_* في JSON لتجاوز السحابة لذلك الطلب.
الهاتف (سحابة): التطبيق متصل بالإنترنت وحالة Connected وفق تطبيق SMS Gate.
CORS (إن أرسلت من متصفح): إذا استدعيت الـ API من JavaScript في دومين مختلف، عيّن api.cors_origin في config.php. من نفس المجلد /sm/ لا تحتاج CORS.
٣) ماذا ترسل بالضبط؟
POSTapplication/json
ترويسة إلزامية (واحدة تكفي):
X-API-Key: YOUR_SECRET_KEY
# أو
Authorization: Bearer YOUR_SECRET_KEY
جسم JSON — وضع سحابي (موصى به)
بدون gateway_*. إمّا أسرار السحابة في config.php فقط، أو تمريرها في الطلب كما يلي.
املأ الحقول ثم «إرسال تجريبي» لاستدعاء 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 حسب مسار الطلب.