# اختبار HTTP على خوادم العميل والشبكات الخاصة

[اختر اللغة](http-testing/README.md)

جميع عناوين الخوادم وعناوين IP وأسماء المضيفين في هذا الدليل تخص نشر Launch الخاص بالعميل نفسه. لا يحتاج العميل إلى الانضمام إلى شبكة Licentivo الخاصة أو شبكة المطور. يمكن استخدام خوادم اختبار عامة أو خوادم داخل الشبكة الخاصة بالعميل.

يستخدم SDK البروتوكول المحدد في `merchant_origin`: يستخدم `https://` بروتوكول HTTPS، ولا يُسمح بـ `http://` إلا وفق أذونات الاختبار الموضحة أدناه. لا تتحول طلبات HTTPS الفاشلة تلقائيًا إلى HTTP. لا يعيد أي مفتاح إعداد كتابة العناوين ولا يثبت شهادة TLS.

## مفتاحا إعداد مستقلان، كلاهما معطل افتراضيًا

| مفتاح الإعداد | مكان ضبطه من قبل العميل | التأثير |
| --- | --- | --- |
| **السماح بـ HTTP (للاختبار)** لمفتاح API واحد | Licentivo ← التطوير والتكامل ← API Key ← إنشاء مفتاح API أو إعدادات الوصول | يسمح لهذا المفتاح تحديدًا بإنشاء اتصالات حسابات Launch أو تحديثها لأصول مواقع التاجر التي تستخدم HTTP. لا تحصل مفاتيح القراءة فقط على صلاحية الكتابة. يحتفظ تدوير المفتاح بهذا الإعداد. |
| **السماح باستخدام SDK عبر HTTP (بيئة الاختبار فقط)** | Launch الخاص بالعميل ← إعدادات النظام ← الموقع والأمان ← شهادات SSL وبروتوكول الوصول | يسمح لتثبيت Launch هذا بقبول طلبات حسابات SDK عبر HTTP وإنشاء كود اختبار HTTP. يقتصر تبادل الهوية للحصول على تفويض وقت التشغيل عبر HTTP على `sandbox`؛ أما `live` فيتطلب HTTPS. |

يتحكم العميل بنفسه في مفتاحي الإعداد. لا يلزم تدخل مسؤول منصة Licentivo أو تفعيل وضع تطوير على مستوى المنصة. تؤثر هذه الإعدادات في عنوان Launch الخاص بالعميل فقط. يواصل Launch وSDK الترخيص الرسمي الاتصال بـ Licentivo عبر HTTPS.

## إعداد خادم اختبار لدى العميل

1. حدّث خادم Licentivo وخادم Launch وحزمة SDK. يجب ترقية إصدارات SDK القديمة التي لا تسمح بـ HTTP إلا على localhost؛ فلا يمكن لإعدادات الخادم تغيير التحقق من عناوين URL في SDK مثبت مسبقًا.
2. في مساحة عمل Licentivo الخاصة بالعميل، أنشئ مفتاح اختبار مخصصًا بصلاحية **القراءة والكتابة**، أو افتح **إعدادات الوصول** لمفتاح نشط، ثم اختر **السماح بـ HTTP (للاختبار)**.
3. في إعدادات **الموقع والأمان** في Launch الخاص بالعميل، أدخل عنوانًا يمكن لعملاء الاختبار الوصول إليه، مثل `http://192.168.1.20:18080` أو `http://test-server:18080` أو نطاق اختبار يملكه العميل. فعّل **السماح باستخدام SDK عبر HTTP (بيئة الاختبار فقط)** ثم احفظ. استخدم أصلًا دون مسار أو استعلام أو جزء مرجعي أو شرطة مائلة في النهاية.
4. أعد توصيل Launch بـ Licentivo باستخدام هذا المفتاح. قراءة المنتجات والسياسات وحدها لا تنشئ اتصال الحسابات؛ تأكد أيضًا من جاهزية اتصال تفويض الحسابات.
5. في **تكامل التطبيق ← فحوص التكامل والكود**، اختر **sandbox**، وشغّل الفحوص، ثم انسخ الكود المولّد حديثًا. بعد نجاح الفحوص يُضاف خيار اختبار HTTP تلقائيًا. استخدم حسابات ومشتريات اختبار.

لا يلزم عنوان IP عام أو سجل DNS عام. يجب أن يتمكن عملاء الاختبار من حل اسم عنوان Launch المضبوط والوصول إليه. يشير `localhost` إلى الجهاز الذي يشغّل SDK؛ وعلى جهاز آخر استخدام عنوان IP للخادم أو اسم مضيفه الداخلي. يسجل Licentivo الأصل ومفاتيح التوقيع المثبتة دون الاتصال العكسي بهذا الأصل أو جلب مفاتيح منه. يظل Launch وعميل الترخيص عبر الإنترنت بحاجة إلى وصول صادر إلى نقاط نهاية HTTPS لدى Licentivo. لا يمكن إجراء ترخيص الحسابات عبر الإنترنت في شبكة خاصة معزولة تمامًا.

## كيف يختار SDK بين HTTP وHTTPS

تعادل إعدادات Launch العامة المولّدة لاختبار مفعّل على خادم العميل ما يلي:

```json
{
  "schema_version": 1,
  "merchant_origin": "http://192.168.1.20:18080",
  "launch_product_id": "11111111-1111-4111-8111-111111111111",
  "licentivo_product_id": "22222222-2222-4222-8222-222222222222",
  "environment": "sandbox",
  "allow_http": true
}
```

يحدد العنوان البروتوكول. يسمح `allow_http: true` بأصل التاجر الذي يستخدم HTTP في `sandbox` فقط، ولا يخفض عنوان HTTPS إلى HTTP مطلقًا. تظل إعدادات منتج الترخيص الرسمي تستخدم HTTPS. فيما يلي خيارات الاستدعاء المباشر المكافئة للغات التسع:

| SDK | خيار صريح لاختبار HTTP |
| --- | --- |
| Go | `launchclient.Config{Environment: "sandbox", AllowHTTP: true}` |
| Python | `Application.connect(..., environment="sandbox", allow_http=True)` |
| JavaScript / TypeScript | `Application.connect(..., {environment: "sandbox", allowHTTP: true})` |
| C# | `Application.Connect(..., "sandbox", allowHttp: true)` |
| Java | `Launch.connect(..., "sandbox", true)` |
| Rust | `Application::connect_with_http(..., "sandbox", true)` |
| Ruby | `Application.connect(..., environment: 'sandbox', allow_http: true)` |
| C | `launch_application_connect_http(..., "sandbox", 1, 0, NULL)` |
| C++ | `Application::ConnectHTTP(..., "sandbox")` |

تتطلب هذه الخيارات إصدارًا محدثًا من SDK. لا يتلقى SDK مفتاح API الإداري للتاجر ولا يستعلم عنه مطلقًا. يصدّر Launch إعدادات عامة ويتحقق من مفتاح إعداد HTTP على الخادم أيضًا؛ لذلك لا يكفي تعديل خيار العميل للسماح بـ HTTP إذا كان مفتاح الخادم معطلًا. تحتفظ المُنشئات القديمة باستثناء localhost في sandbox للتوافق، لكنه لا يتجاوز مفتاح الخادم المعطل افتراضيًا.

## إنهاء الاختبار أو الانتقال إلى HTTPS

لا يشفّر HTTP كلمات المرور أو رموز الحسابات أو غيرها من البيانات. وقد تتعرض شبكة العميل الخاصة للمراقبة أو الاختراق أيضًا. يؤدي إدخال مفتاح API في إدارة Launch عبر HTTP إلى كشف الطلب من المتصفح إلى Launch، حتى لو كانت اتصالات Launch بـ Licentivo تستخدم HTTPS. استخدم بيانات اعتماد اختبار مخصصة، واستخدم HTTPS للإنتاج والعمليات الإدارية الحساسة.

بعد إعداد مستمع HTTPS أو وكيل TLS يعمل بشكل صحيح، حدّث أصل التاجر الفعلي في Launch، وأعد الاتصال بـ Licentivo عند الحاجة، ثم أعد توليد إعدادات التكامل وحدّثها لدى العملاء. لا يتغير عنوان HTTP المنسوخ أو المضمّن في برنامج مجمّع تلقائيًا. عطّل مفتاحي HTTP عند انتهاء الاختبار. يتطلب تبادل هوية SDK في `live` استخدام HTTPS مهما كانت حالة المفتاحين.

تعطيل مفتاح Launch يرفض طلبات SDK اللاحقة عبر HTTP بالخطأ `SDK_HTTP_DISABLED`؛ وتعيد طلبات الهوية عبر HTTP في `live` الخطأ `SDK_HTTPS_REQUIRED`. تظل الأذونات غير المتصلة والموقعة سابقًا خاضعة لقواعد انتهاء الصلاحية والإلغاء المعتادة في Licentivo. يمنع تعطيل إذن HTTP لمفتاح API إنشاء اتصالات HTTP جديدة أو تحديثها بذلك المفتاح؛ لكنه لا يحذف الاتصالات القائمة ولا يلغي المشتريات أو الأذونات الصادرة. عطّل الاتصال بشكل منفصل إن كان يجب إيقاف منح التفويضات منه.

## تشخيص فشل الاتصال

يعرض Launch المرحلة التي فشلت (قراءة المنتجات أو السياسات، أو الاستعلام عن الاتصالات، أو إنشاء اتصال sandbox/live)، والسبب المحدد، ورمز خطأ Licentivo ومعرّف الطلب إذا توفرا. تظل الأخطاء المحفوظة ظاهرة بعد تحديث الصفحة. لا تعرض رسائل الخطأ مفتاح API الإداري مطلقًا.

| الخطأ | الإجراء |
| --- | --- |
| `LAUNCH_HTTPS_REQUIRED` | فعّل HTTP لمفتاح API نفسه الذي يستخدمه Launch، أو اضبط عنوان تاجر HTTPS يعمل بشكل صحيح. |
| `LICENSE_KEY_INVALID` | تحقق من اكتمال المفتاح وانتهاء صلاحيته وإلغائه وحالة مالكه ومساحة العمل. |
| `LICENSE_KEY_FORBIDDEN` | استخدم مفتاح قراءة وكتابة تابعًا لـ Owner صالح. إذن HTTP لا يضيف صلاحية الكتابة. |
| `SDK_HTTP_DISABLED` | فعّل مفتاح اختبار SDK عبر HTTP في Launch الخاص بالعميل نفسه، أو استخدم HTTPS. |
| `SDK_HTTPS_REQUIRED` | استخدم HTTPS في `live`؛ ويجب أن تستخدم اختبارات HTTP بيئة `sandbox`. |
| `LICENTIVO_TIMEOUT` / `LICENTIVO_NETWORK_ERROR` | تحقق من الشبكة الصادرة وDNS والجدار الناري وإعدادات الوكيل على جهاز الاختبار لدى العميل. |
| `LICENTIVO_TLS_ERROR` | تحقق من ساعة النظام والشهادات الموثوقة ووكيل HTTPS، وأبقِ التحقق من TLS مفعّلًا. |
