# ग्राहक के सर्वर और निजी नेटवर्क पर 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 पैकेज अपडेट करें। केवल localhost HTTP की अनुमति देने वाले पुराने SDK को अपग्रेड करना आवश्यक है; सर्वर की सेटिंग किसी स्थापित 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 सत्यापन चालू रखें। |
