सभी लेख
सुरक्षित टनल से स्थानीय Paddle webhook handler तक पहुँचते simulated billing lifecycle events का क्रम।
Paddlewebhook simulatorbillinglocal testing

localhost पर Paddle webhook simulator का उपयोग कैसे करें

स्थानीय होस्ट के साथ Paddle वेबहुक सिम्युलेटर का उपयोग करने के लिए, अपने स्थानीय हैंडलर को HTTPS सुरंग के माध्यम से उजागर करें, एक सैंडबॉक्स अधिसूचना गंतव्य बनाएं जो सार्वजनिक यूआरएल को इंगित करता है, फिर उस गंतव्य के खिलाफ एक एकल-ईवेंट या लाइफसाइकल सिमुलेशन चलाएं। Paddle एक यथार्थवादी अनुरोध के साथ भेजता है Paddle-Signature हेडर, इसलिए वही कच्चे शरीर सत्यापन पथ स्थानीय रूप से और उत्पादन में चल सकता है।

क्यों Paddle का सिम्युलेटर एक नमूना पेलोड से अधिक है

JSON जुड़नार अपने स्विच स्टेटमेंट का परीक्षण करता है। Paddle का सिम्युलेटर नेटवर्क गंतव्य, प्रदाता हेडर, गुप्त, प्रतिक्रिया स्थिति और घटना स्कीमा को एक साथ परीक्षण करता है। आधिकारिक वेबहुक सिम्युलेटर अवलोकन पुन: प्रयोज्य एकल घटनाओं और परिदृश्यों का समर्थन करता है। एकल घटनाएं एक घटना के प्रकार को लक्षित करती हैं और इसे चलाने के बाद अनुकूलित किया जा सकता है। परिदृश्य एक जीवन चक्र जैसे सदस्यता निर्माण या नवीकरण के लिए एक पूर्वनिर्धारित अनुक्रम भेजते हैं।

परिदृश्य विन्यास मौजूदा Paddle संस्थाओं के साथ पेलोड को पॉप्युलेट कर सकता है और प्रवाह को भिन्न कर सकता है। प्रत्येक रन सिमुलेशन रन इवेंट रिकॉर्ड का उत्पादन करता है जहां आप पेलोड, आउटबाउंड अनुरोध और समापन बिंदु प्रतिक्रिया का निरीक्षण कर सकते हैं। यह सिमुलेटर को राज्य के संक्रमण को रोकने के लिए उपयोगी बनाता है, न केवल यह साबित करता है कि एक मार्ग ऑनलाइन है।

Paddle सैंडबॉक्स में स्थानीय समापन बिंदु कनेक्ट करें

  1. उदाहरण के लिए, अपने आवेदन शुरू करें http://localhost:3000
  2. POST मार्ग जैसे जोड़ें /api/webhooks/paddle
  3. रन npx portpreview 3000 और HTTPS पते की प्रतिलिपि बनाएँ।
  4. Paddle सैंडबॉक्स में, एक सूचना गंतव्य का उपयोग करके https://your-subdomain.portpreview.dev/api/webhooks/paddle
  5. उस गंतव्य के समापन बिंदु रहस्य को प्रकट करने और कॉपी करने के लिए PADDLE_WEBHOOK_SECRETयह आपकी API कुंजी नहीं है।
  6. ओपन डेवलपर टूल → सिमुलेशन, एक एकल घटना या परिदृश्य का चयन करें, गंतव्य का चयन करें, इसे कॉन्फ़िगर करें और इसे चलाएं।
  7. अपने स्थानीय लॉग के साथ Paddle की सिमुलेशन-रन प्रतिक्रिया की तुलना करें और वेबहुक रसीद जारी रखें।

पूरे में सैंडबॉक्स संसाधनों और क्रेडेंशियल का उपयोग करें। सैंडबॉक्स सिम्युलेटर अनुरोध के साथ एक लाइव गंतव्य रहस्य को मिलाकर एक हस्ताक्षर विफलता की गारंटी देता है, भले ही दोनों तार plausible लगते हैं।

सत्यापित करें Paddle-Signature हेडर

Paddle प्रत्येक वेबहुक को नोटिफिकेशन गंतव्य से संबंधित रहस्य के साथ संकेत देता है। हेडर में यूनिक्स टाइमस्टैम्प सहित घटक होते हैं जो द्वारा पहचाने गए हैं ts द्वारा पहचाने गए एक या अधिक हस्ताक्षर h1Paddle हस्ताक्षर संस्करणों को जोड़ सकता है, इसलिए यह सुनिश्चित करने के बजाय शीर्षलेख को पार करता है, इसमें एक नंगे हैश होता है।

हस्ताक्षरित पेलोड टाइमस्टैम्प, एक कॉलोन और अनटचर्ड अनुरोध निकाय है। Paddle HMAC-SHA256 को समापन बिंदु रहस्य के साथ लागू करता है। इसका हस्ताक्षर सत्यापन प्रलेखन एक आधिकारिक SDK की सिफारिश करता है जहां मैनुअल एल्गोरिथ्म को उपलब्ध कराया जाता है। हमेशा SDK की टाइमस्टैम्प सहनशीलता को लागू करते हैं या फिर फिर से खेलने वाले हमलों को सीमित करने के लिए अपने verifier में एक स्पष्ट सहिष्णुता है।

नोड में आधिकारिक SDK को प्राथमिकता दें

import express from 'express';
import { Environment, Paddle } from '@paddle/paddle-node-sdk';

const app = express();
const paddle = new Paddle(process.env.PADDLE_API_KEY, {
  environment: Environment.sandbox,
});

app.post(
  '/api/webhooks/paddle',
  express.raw({ type: 'application/json' }),
  async (req, res) => {
    const signature = req.header('paddle-signature') ?? '';
    const rawBody = req.body.toString('utf8');

    try {
      const event = await paddle.webhooks.unmarshal(
        rawBody,
        process.env.PADDLE_WEBHOOK_SECRET,
        signature,
      );

      await acceptOnce(event.eventId, event);
      return res.status(200).send('accepted');
    } catch (error) {
      return res.status(400).send('invalid webhook');
    }
  },
);

app.listen(3000);

माउंट express.raw() वैश्विक express.json() इस मार्ग के लिए मिडलवेयर। Next.js App Router जैसे Fetch-style फ्रेमवर्क में, उपयोग await request.text() एक बार और उस सटीक स्ट्रिंग को SDK में पास करें। आधिकारिक वेबहुक जल्दी शुरू इस कच्चे शरीर की आवश्यकता को दर्शाता है।

मैनुअल सत्यापन क्या करना चाहिए

  1. JSON सामान्यीकरण के बिना कच्चे शरीर को पढ़ें।
  2. पार्स हर semicolon-separated हेडर घटक और इकट्ठा समर्थित h1 मान।
  3. एक लापता, विकृत या अनुचित रूप से पुराना अस्वीकार करें ts
  4. समझौता HMAC_SHA256(secret, ts + ':' + rawBody)
  5. एक समय से सुरक्षित तुलना का उपयोग करके उम्मीदवार हस्ताक्षर के साथ अपेक्षित पाचन की तुलना करें।
  6. केवल एक मैच के बाद, पर्स JSON और डिस्पैच ऑन event_type

गुप्त घूर्णन के दौरान किसी भी वैध समर्थित हस्ताक्षर मामलों को स्वीकार करना, जब एक से अधिक हस्ताक्षर उपस्थित हो सकते हैं। हेडर को विभाजित न करें और दूसरे आइटम को अंधा कर दें। गलती का निदान करते समय एंडपॉइंट गुप्त या पूर्ण ग्राहक पेलोड लॉग इन न करें।

बिलिंग आविष्कारक के आसपास डिजाइन सिमुलेशन

सदस्यता निर्माण

एक सदस्यता-निर्माण परिदृश्य को चलाएं और सत्यापित करें कि आपका डेटाबेस एक नेटवर्क आगमन आदेश के बिना संबंधित लेनदेन और सदस्यता की घटनाओं को प्राप्त कर सकता है। Paddle इकाई ID स्टोर और अद्यतन रिकॉर्ड idempotent रूप से। यदि कोई अनुरोध किया जाता है तो भी आवेदन बिल्कुल एक पात्रता देना चाहिए।

नवीकरण और भुगतान विफलता

अपने परिदृश्य विन्यास में उपलब्ध सफल नवीनीकरण, अतीत और वसूली पथ व्यायाम करें। उत्पाद पहुंच नीति से अलग बिलिंग स्थिति: आपकी अनुग्रह अवधि जानबूझकर पहुंच को सक्रिय रख सकती है जबकि Paddle एक संग्रह समस्या की रिपोर्ट करता है।

रद्दीकरण और अनुसूचित परिवर्तन

एक सदस्यता को अस्वीकार करने के लिए निर्धारित किया गया है जो इसके प्रभावी रद्दीकरण तक पहुंच गया है। संरक्षण next_billed_at, अनुसूचित-परिवर्तन डेटा, और प्रदाता की स्थिति के बजाय जीवन चक्र को जोड़ने के बजाय is_active

एंटिटी अपडेट

उत्पाद, मूल्य, ग्राहक और सदस्यता अद्यतन को अनुकरण करें कि आपका कैश उपभोग करता है। एक हैंडलर को अज्ञात घटना प्रकारों को सुरक्षित रूप से अनदेखा करना चाहिए और उन्हें स्वीकार करना चाहिए कि हस्ताक्षर मान्य है; भविष्य में Paddle परिवर्धन को एक अंतहीन विफलता लूप में नहीं बदलना चाहिए।

प्रत्येक रन पर निष्क्रियता और ऑर्डर करना

एक रसीद तालिका में एक अद्वितीय कुंजी के रूप में वेबहुक घटना की स्थिर आईडी का उपयोग करें। एक लेन-देन में, रसीद डालें, राज्य परिवर्तन लागू करें, और साइड इफेक्ट्स को enqueue करें। यदि सम्मिलन संघर्ष, कार्य को दोहराए बिना सफलता वापस आती है। केवल इकाई आईडी द्वारा deduplicate नहीं है क्योंकि कई वैध अद्यतन एक सदस्यता लक्ष्य कर सकते हैं।

कार्यक्रम आदेश से बाहर आ सकते हैं। घटना की घटना के समय की तुलना करें या विनाशकारी संक्रमण लागू करने से पहले नवीनतम Paddle इकाई को पुनर्प्राप्त करें। प्रदाता के राज्य और टाइमस्टैम्प को स्टोर करें, और एक पुराने अद्यतन को खारिज करें जो एक नया लिखने वाला होगा। सिमुलेशन परिदृश्य इन धारणाओं के परीक्षण के लिए आदर्श हैं क्योंकि वे पृथक जुड़नार के बजाय जुड़े अनुक्रमों का उत्पादन करते हैं।

समस्या निवारण simulator-to-localhost विफलताओं

गंतव्य रिटर्न 404 या 405

चेक करें कि सार्वजनिक यूआरएल में पूर्ण मार्ग शामिल है और यह मार्ग POST निर्यात करता है। एक ब्राउज़र GET एक POST केवल webhook का वैध परीक्षण नहीं है। उपयोग curl -X POST Paddle विन्यास से सुरंग रूटिंग को अलग करने के लिए सार्वजनिक URL के खिलाफ।

डेस्टिनेशन रिटर्न 400

निरीक्षण करना Paddle-Signature अंत बिंदु रहस्य का आगमन और पुष्टि चयनित अधिसूचना गंतव्य के अंतर्गत आता है। सुनिश्चित करें कि कोई शरीर पार्सर, अनुरोध लकड़हारा, या मिडलवेयर का सेवन या शरीर को सुधारा गया। सिम्युलेटर सत्यापन योग्य हस्ताक्षर भेजता है, जैसा कि दस्तावेज़ में लिखा गया है Paddle के सिमुलेशन रन गाइड

डेस्टिनेशन रिटर्न 500 या बार आउट

Persist जल्दी और ईमेल, प्रावधान और आउटबाउंड API एक कतार को बुलाता है। टिकाऊ स्वीकृति के बाद 2xx वापस लौटें। एक अपरिचित घटना प्रकार पर फेंकना अनावश्यक विफलताओं का एक सामान्य कारण है; एक डिफ़ॉल्ट शाखा का उपयोग करें जो रिकॉर्ड करता है और उसे स्वीकार करता है।

परिदृश्य अप्रत्याशित डेटा का उपयोग करता है

समीक्षा करें कि क्या सिमुलेशन स्वचालित रूप से उत्पन्न मानों का उपयोग करता है या वास्तविक सैंडबॉक्स संस्थाओं के साथ आबादी है। कॉन्फ़िगर किए गए परिदृश्य विकल्पों और रन इवेंट पेलोड का निरीक्षण करने के बजाय इसे पूर्व रन बनाने के बजाय।

उत्पादन से पहले सुरक्षा चेकलिस्ट

  • API कुंजी और अधिसूचना गंतव्य रहस्यों को अलग और सर्वर-केवल रखें।
  • प्रसंस्करण से पहले कच्चे शरीर, हेडर हस्ताक्षर और टाइमस्टैम्प को सत्यापित करें।
  • एक समय से सुरक्षित तुलना या आधिकारिक SDK verifier का उपयोग करें।
  • डिडुप्लिकेट इवेंट आईडी और आउट-ऑफ-ऑर्डर अपडेट संभालती है।
  • शरीर की सीमा लागू करें, POST-केवल रूटिंग, लॉगिंग, और दर नियंत्रण.
  • विशिष्ट सैंडबॉक्स और लाइव गंतव्यों का उपयोग करें, फिर प्रोडक्शन यूआरएल को स्विच करने से पहले सिमुलेशन और वास्तविक सैंडबॉक्स प्रवाह को दोहराएं।

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

अक्सर पूछे जाने वाले प्रश्न

क्या Paddle का वेबहुक सिम्युलेटर स्थानीयहोस्ट को कार्यक्रम भेज सकता है?
हाँ, एक सार्वजनिक HTTPS सुरंग के माध्यम से। सुरंग यूआरएल और मार्ग के साथ एक सैंडबॉक्स अधिसूचना गंतव्य को कॉन्फ़िगर करें, फिर सिमुलेशन चलाने पर उस गंतव्य का चयन करें।
क्या Paddle सिम्युलेटर वेबहुक हस्ताक्षर वास्तविक हैं?
हाँ। Paddle कहते हैं कि सिम्युलेटर Paddle-Signature सहित एक प्रतिकृति वेबहुक अनुरोध भेजता है। इसे चयनित अधिसूचना गंतव्य के लिए रहस्य के साथ सत्यापित करें, सिर्फ एक सामान्य वेबहुक की तरह।
Paddle सिंगल-ईवेंट सिमुलेशन और एक परिदृश्य के बीच क्या अंतर है?
एक एकल घटना अनुकरण एक अनुकूलन घटना भेजता है। एक परिदृश्य एक पूर्वनिर्धारित अनुक्रम भेजता है जो एक जीवन चक्र जैसे सदस्यता निर्माण या नवीकरण का प्रतिनिधित्व करता है और मौजूदा सैंडबॉक्स संस्थाओं का उपयोग कर सकता है।
Paddle हस्ताक्षर सत्यापन स्थानीय रूप से विफल क्यों करता है?
सामान्य कारण गलत गंतव्य रहस्य का उपयोग कर रहे हैं, सत्यापन से पहले शरीर को पार कर रहे हैं, Paddle-Signature को छोड़ रहे हैं, सैंडबॉक्स और लाइव कॉन्फ़िगरेशन को मिलाते हुए, या रिप्ले सहिष्णुता के साथ एक verifier के लिए एक कहानी टाइमस्टैम्प पारित करते हैं।