# صارف کے سرور اور نجی نیٹ ورک پر HTTP کی آزمائش

[زبان منتخب کریں](http-testing/README.md)

اس رہنما میں تمام سرور پتے، IP اور ہوسٹ نام صارف کی اپنی Launch تنصیب کے ہیں۔ صارف کو Licentivo یا ڈویلپر کے نجی نیٹ ورک میں شامل ہونے کی ضرورت نہیں ہے۔ عوامی ٹیسٹ سرور اور صارف کے اپنے نجی نیٹ ورک کے سرور، دونوں استعمال کیے جا سکتے ہیں۔

SDK، `merchant_origin` میں درج پروٹوکول استعمال کرتا ہے: `https://` سے HTTPS استعمال ہوتا ہے؛ `http://` کی اجازت صرف نیچے دی گئی ٹیسٹ اجازتوں کے تحت ہے۔ HTTPS درخواست ناکام ہونے پر کبھی خود بخود HTTP پر منتقل نہیں ہوتی۔ سوئچ پتہ تبدیل نہیں کرتا اور TLS سرٹیفکیٹ نصب نہیں کرتا۔

## دو آزاد سوئچ، دونوں ڈیفالٹ طور پر بند

| سوئچ | صارف کہاں ترتیب دے | اثر |
| --- | --- | --- |
| ایک API کلید کے لیے **HTTP کی اجازت دیں (ٹیسٹ)** | Licentivo ← ڈویلپمنٹ اور انضمام ← API Key ← API کلید بنائیں یا رسائی کی ترتیبات | صرف اس کلید کو HTTP مرچنٹ اوریجن کے لیے Launch اکاؤنٹ کنکشن بنانے یا اپ ڈیٹ کرنے دیتا ہے۔ صرف پڑھنے والی کلید کو لکھنے کی اجازت نہیں ملتی۔ کلید کی روٹیشن کے بعد بھی یہ ترتیب برقرار رہتی ہے۔ |
| **SDK کو HTTP استعمال کرنے دیں (صرف ٹیسٹ ماحول)** | صارف کی اپنی Launch تنصیب ← سسٹم کی ترتیبات ← ویب سائٹ اور سیکیورٹی ← SSL سرٹیفکیٹس اور رسائی کا پروٹوکول | اس Launch تنصیب کو SDK کی HTTP اکاؤنٹ درخواستیں قبول کرنے اور HTTP ٹیسٹ کوڈ بنانے دیتا ہے۔ چلتے پروگرام کی اجازت کے لیے HTTP پر شناخت کا تبادلہ صرف `sandbox` تک محدود ہے؛ `live` کے لیے HTTPS درکار ہے۔ |

صارف دونوں سوئچ خود کنٹرول کرتا ہے۔ Licentivo پلیٹ فارم کے ایڈمنسٹریٹر یا پورے پلیٹ فارم کے ڈویلپمنٹ موڈ کی ضرورت نہیں ہے۔ یہ ترتیبات صرف صارف کے Launch پتے پر اثر انداز ہوتی ہیں۔ Launch اور آفیشل لائسنسنگ SDK، Licentivo سے بدستور HTTPS کے ذریعے رابطہ کرتے ہیں۔

## صارف کا ٹیسٹ سرور تیار کریں

1. Licentivo سرور، Launch سرور اور SDK پیکیج اپ ڈیٹ کریں۔ پرانے SDK جو صرف localhost پر HTTP کی اجازت دیتے ہیں، انہیں اپ گریڈ کرنا ہوگا؛ سرور کی ترتیبات پہلے سے نصب SDK کی URL جانچ تبدیل نہیں کر سکتیں۔
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 اور آن لائن لائسنسنگ کلائنٹ کو پھر بھی Licentivo کے HTTPS اینڈپوائنٹس تک باہر جانے والی رسائی چاہیے۔ مکمل طور پر منقطع نجی نیٹ ورک پر آن لائن اکاؤنٹ لائسنسنگ نہیں چل سکتی۔

## 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` صرف `sandbox` میں HTTP مرچنٹ اوریجن کی اجازت دیتا ہے؛ یہ کبھی HTTPS URL کو 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 فعال نہیں ہوتا۔ پرانے کنسٹرکٹر مطابقت کے لیے sandbox میں localhost کا موجودہ استثنا برقرار رکھتے ہیں، مگر یہ سرور کے ڈیفالٹ طور پر بند سوئچ کو نظرانداز نہیں کرتا۔

## ٹیسٹ ختم کریں یا HTTPS پر منتقل ہوں

HTTP پاس ورڈ، اکاؤنٹ ٹوکن یا دوسرے ڈیٹا کو خفیہ نہیں کرتا۔ صارف کا نجی نیٹ ورک بھی نگرانی یا حملے کا شکار ہو سکتا ہے۔ HTTP سے کھولی گئی Launch انتظامیہ میں API کلید درج کرنے سے براؤزر سے Launch تک کی درخواست بھی ظاہر ہوتی ہے، خواہ Launch سے Licentivo کی کالیں HTTPS پر ہوں۔ مخصوص ٹیسٹ اسناد استعمال کریں؛ پروڈکشن اور حساس انتظامی کاموں کے لیے HTTPS استعمال کریں۔

کام کرنے والا HTTPS لسنر یا TLS پراکسی ترتیب دینے کے بعد Launch کا مؤثر مرچنٹ اوریجن اپ ڈیٹ کریں، ضرورت ہو تو Licentivo سے دوبارہ رابطہ قائم کریں، پھر کلائنٹس کی انضمام ترتیب دوبارہ تیار اور اپ ڈیٹ کریں۔ کاپی کیا گیا یا پروگرام میں کمپائل کیا گیا HTTP URL خود بخود نہیں بدلتا۔ ٹیسٹ کے بعد دونوں HTTP سوئچ بند کریں۔ دونوں سوئچ کی حالت کچھ بھی ہو، `live` SDK شناخت کے تبادلے کے لیے HTTPS لازم ہے۔

Launch کا سوئچ بند کرنے پر بعد کی HTTP SDK درخواستیں `SDK_HTTP_DISABLED` کے ساتھ مسترد ہوتی ہیں؛ `live` کی HTTP شناختی درخواستیں `SDK_HTTPS_REQUIRED` واپس کرتی ہیں۔ پہلے سے دستخط شدہ آف لائن اجازتیں Licentivo کے معمول کے اختتامِ مدت اور منسوخی کے اصولوں کے مطابق رہتی ہیں۔ API کلید کی HTTP اجازت بند کرنے سے اس کلید کے ذریعے نئے HTTP کنکشن بنانا یا اپ ڈیٹ کرنا رک جاتا ہے؛ موجودہ کنکشن حذف نہیں ہوتے، خریداری منسوخ نہیں ہوتی اور جاری اجازتیں بے اثر نہیں ہوتیں۔ کسی کنکشن سے مزید اجازت دینا بند کرنا ہو تو اسے الگ سے غیر فعال کریں۔

## ناکام کنکشن کی تشخیص

Launch ناکام مرحلہ (مصنوعات یا پالیسیاں پڑھنا، کنکشن تلاش کرنا، یا sandbox/live کنکشن بنانا)، مخصوص وجہ اور دستیاب ہونے پر Licentivo کا ایرر کوڈ اور درخواست ID دکھاتا ہے۔ محفوظ شدہ ناکامیوں کی تفصیل صفحہ ریفریش کرنے کے بعد بھی نظر آتی ہے۔ ایرر پیغامات میں مینجمنٹ API کلید کبھی نہیں دکھائی جاتی۔

| خرابی | کارروائی |
| --- | --- |
| `LAUNCH_HTTPS_REQUIRED` | Launch میں واقعی استعمال ہونے والی اسی API کلید کے لیے HTTP فعال کریں، یا کام کرنے والا HTTPS مرچنٹ URL ترتیب دیں۔ |
| `LICENSE_KEY_INVALID` | پوری کلید، مدتِ اختتام، منسوخی اور اس کے مالک اور ورک اسپیس کی حالت جانچیں۔ |
| `LICENSE_KEY_FORBIDDEN` | فعال Owner کی پڑھنے اور لکھنے والی کلید استعمال کریں۔ HTTP اجازت لکھنے کی اجازت نہیں بڑھاتی۔ |
| `SDK_HTTP_DISABLED` | صارف کی اپنی Launch تنصیب میں SDK HTTP ٹیسٹ سوئچ فعال کریں، یا HTTPS استعمال کریں۔ |
| `SDK_HTTPS_REQUIRED` | `live` کے لیے HTTPS استعمال کریں؛ HTTP ٹیسٹ کے لیے `sandbox` لازم ہے۔ |
| `LICENTIVO_TIMEOUT` / `LICENTIVO_NETWORK_ERROR` | صارف کی ٹیسٹ مشین پر باہر جانے والا نیٹ ورک، DNS، فائر وال اور پراکسی کی ترتیبات جانچیں۔ |
| `LICENTIVO_TLS_ERROR` | سسٹم کا وقت، قابلِ اعتماد سرٹیفکیٹس اور HTTPS پراکسی جانچیں۔ TLS تصدیق فعال رکھیں۔ |
