# व्यापारी के अपने लाइसेंसिंग एडाप्टर का उदाहरण

यह Python 3.10+ उदाहरण Launch का बाहरी HTTP ब्रिज SQLite इवेंट/nonce स्थायित्व और पुनर्प्राप्ति वर्कर सहित लागू करता है। यह लाइसेंस **नहीं** बनाता, संरक्षित सुविधाएँ सत्यापित नहीं करता या आपके लाइसेंसिंग सिस्टम का विकल्प नहीं है।

इन हुक वाला Python मॉड्यूल लागू करें:

```python
def apply_snapshot(snapshot):
    # Call your licensing system with snapshot["event_id"] as its durable
    # idempotency key. Apply desired_state and the absolute purchased dates.
    # Return only after confirming the original operation was applied.
    # Raise ValueError for a result requiring manual review.
    ...

def delivery(snapshot):
    # Read an existing result owned by this purchase; do not issue here.
    return {"type": "instructions", "value": "Your own delivery instructions", "expires_at": None}
```

बैकएंड कॉन्फ़िगर करने से पहले `...` को वास्तविक एकीकरण से बदलें। बैकएंड मॉड्यूल कॉन्फ़िगर न होने पर बंडल हुक `NotImplementedError` उठाते हैं; इवेंट मैनुअल समीक्षा में जाते हैं और लाइसेंस जारी होने का दावा नहीं करते। उदाहरण वर्कर क्रैश या अनिश्चित त्रुटि के बाद हुक दोबारा आज़मा सकता है, इसलिए आपका लाइसेंसिंग बैकएंड उसी इवेंट ID से डुप्लिकेट नियंत्रण/पुनर्प्राप्ति करे।

वातावरण चर से एडाप्टर कॉन्फ़िगर करें, कुंजी स्रोत नियंत्रण और शेल इतिहास से बाहर रखें:

- `CUSTOM_LICENSING_KEY`: 32–128 यादृच्छिक बाइट की मानक Base64 एन्कोडिंग, Launch से मेल खाती।
- `CUSTOM_LICENSING_KEY_ID`: `key-1`, या आपकी कॉन्फ़िगर कुंजी पहचान।
- `CUSTOM_LICENSING_CONNECTION_REF`: मेल खाता कनेक्शन संदर्भ।
- `CUSTOM_LICENSING_ENVIRONMENT`: `sandbox` या `live`।
- `CUSTOM_LICENSING_DATABASE`: चेकआउट के बाहर निजी लिखने योग्य SQLite पथ; पुनरारंभ के पार सुरक्षित रखें।
- `CUSTOM_LICENSING_BACKEND`: ऊपर के हुक लागू करने वाला आयात योग्य मॉड्यूल।
- `CUSTOM_LICENSING_PORT`: स्थानीय सुनने का पोर्ट, डिफ़ॉल्ट `18883`।

`python server.py` चलाएँ। स्थानीय sandbox परीक्षण के लिए Launch में `http://127.0.0.1:18883` कॉन्फ़िगर करें और उसका loopback HTTP अपवाद स्पष्ट रूप से सक्षम करें। उत्पादन में HTTPS टर्मिनेशन, प्रक्रिया पर्यवेक्षण, सुरक्षित डेटाबेस बैकअप और अपने बैकएंड का SDK/रनटाइम सत्यापन उपयोग करें। केवल वास्तव में समर्थित खरीद/डिलीवरी प्रकार घोषित करें; `capabilities` उसी अनुसार बदलें।

बैकएंड समस्या ठीक करने के बाद `python server.py --retry-event ORIGINAL_EVENT_UUID` स्थानीय रूप से वही सहेजा पेलोड फिर कतार में डालता है। Launch के प्राधिकरण-कार्य पृष्ठ पर भी वही मूल इवेंट पुनः प्रयास करें। प्रतिक्रिया बहाल करने के लिए ID न बदलें या समय फिर न जोड़ें।

उदाहरण प्रारंभिक बिंदु है, उत्पादन योग्यता नहीं। वर्कर लीज़ 60 सेकंड है; हुक कॉल की समय सीमा इससे कम रखें या लीज़ नवीनीकृत करें। live खरीद स्वीकार करने से पहले निगरानी, रोटेशन प्रक्रियाएँ, कड़ी व्यावसायिक/स्कीमा जाँच और अपने डिप्लॉयमेंट के परिचालन नियंत्रण जोड़ें। [एकीकरण मार्गदर्शिका](/hi/launch-documents/external-licensing/) और [OpenAPI](/hi/assets/launch/external-licensing-openapi.json) प्रोटोकॉल परिभाषित करते हैं। Launch स्थिति प्रतिक्रिया को संरक्षित कोड चलाने की अनुमति कभी न मानें।
