# গ্রাহকের সার্ভার ও ব্যক্তিগত নেটওয়ার্কে 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 আগের মতোই HTTPS দিয়ে Licentivo-তে কল করে।

## গ্রাহকের পরীক্ষার সার্ভার প্রস্তুত করুন

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 যাচাই চালু রাখুন। |
