सभी लेख
PayPal सैंडबॉक्स भुगतान इवेंट एक सुरक्षित HTTPS टनल से होकर डेवलपर के लैपटॉप पर चल रहे वेबहुक लिसनर तक पहुँचता हुआ।
PayPalsandboxwebhookslocal testing

localhost पर PayPal सैंडबॉक्स वेबहुक का परीक्षण

लोकलहोस्ट पर PayPal सैंडबॉक्स वेबहुक का परीक्षण करने के लिए, अपने श्रोता को स्थानीय रूप से चलाएं, एक सार्वजनिक HTTPS सुरंग के माध्यम से इसके मार्ग को उजागर करें, उस URL को सैंडबॉक्स ऐप पर पंजीकृत करें, और PayPal के वेबहुक सिम्युलेटर में या तो एक वास्तविक सैंडबॉक्स लेनदेन या एक मॉक इवेंट को ट्रिगर करें। हस्ताक्षर सत्यापन सक्षम रखें: सिम्युलेटर इवेंट और ऐप से जुड़े सैंडबॉक्स इवेंट एक महत्वपूर्ण हैं सत्यापन अंतर नीचे बताया गया है।

PayPal सीधे लोकलहोस्ट को क्यों नहीं भेज सकता

PayPal अपने स्वयं के सर्वर से वेबहुक सूचनाएं वितरित करता है। http://localhost:3000/api/paypal जैसा पता PayPal के नजरिए से PayPal की मशीन की ओर इशारा करता है, आपके नहीं। एक लोकलहोस्ट टनल आपके कंप्यूटर पर एप्लिकेशन छोड़ते समय स्थानीय प्रक्रिया को एक सार्वजनिक HTTPS पता देता है।

आधिकारिक PayPal वेबहुक सिम्युलेटर दस्तावेज़ कहता है कि इसके श्रोता को पोर्ट 443 पर HTTPS पर पहुंच योग्य होना चाहिए। एक सुरंग उस सार्वजनिक TLS एंडपॉइंट को संभालती है और किसी भी स्थानीय पोर्ट, जैसे 3000 या 8080.

पर अनुरोध भेजती है।

सही PayPal परीक्षण पथ चुनें

श्रोता विकास के लिए मॉक सिम्युलेटर इवेंट

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

शुरू से अंत तक व्यवहार के लिए वास्तविक सैंडबॉक्स इवेंट

यथार्थवादी एकीकरण के लिए, PayPal डेवलपर डैशबोर्ड में एक REST ऐप बनाएं, टनल एंडपॉइंट को वेबहुक के रूप में जोड़ें, आवश्यक ईवेंट प्रकारों का चयन करें, और सैंडबॉक्स चेकआउट या एपीआई ऑपरेशन पूरा करें। वे ईवेंट सैंडबॉक्स ऐप से संबंधित हैं और उन्हीं ऐप क्रेडेंशियल्स, वेबहुक आईडी, ईवेंट व्यूअर और पुनः भेजने वाले वर्कफ़्लो का उपयोग करते हैं जिनका उपयोग आप उत्पादन से पहले करेंगे।

लोकलहोस्ट पर एक PayPal वेबहुक सेट करें

  1. अपना एप्लिकेशन प्रारंभ करें और पुष्टि करें कि रूट स्थानीय रूप से काम करता है: curl -i -X POST http://localhost:3000/api/webhooks/paypal -H 'content-type: application/json' -d '{"event_type":"LOCAL.PING"}'.
  2. npx portpreview 3000 चलाएँ और जेनरेट किए गए HTTPS URL को कॉपी करें।
  3. पूर्ण कॉलबैक बनाएं, उदाहरण के लिए https://your-subdomain.portpreview.dev/api/webhooks/paypal.
  4. मॉक टेस्टिंग के लिए, इसे वेबहुक सिम्युलेटर में पेस्ट करें और एक इवेंट चुनें। ऐप परीक्षण के लिए, इसे अपने सैंडबॉक्स REST ऐप की वेबहुक सेटिंग्स के अंतर्गत जोड़ें।
  5. एक ईवेंट भेजें और आने वाली विधि, PayPal हेडर, रॉ बॉडी, हैंडलर लॉग और HTTP प्रतिक्रिया का निरीक्षण करें।

केवल उन ईवेंट की सदस्यता लें जिन्हें आपका एप्लिकेशन संभालता है। एक व्यापक सदस्यता शोर पैदा करती है और किसी ऐसे इवेंट के लिए गलती से व्यावसायिक तर्क चलाना आसान बनाती है जिसे आपने कभी मॉडल नहीं किया है।

A practical Express listener

import express from 'express';

const app = express();
app.use(express.json({ verify: (req, _res, buf) => {
  req.rawBody = Buffer.from(buf);
}}));

app.post('/api/webhooks/paypal', async (req, res) => {
  const event = req.body;

  // Verify first; do not fulfill an order from untrusted JSON.
  const verified = await verifyPayPal(req.headers, event);
  if (!verified) return res.status(401).send('invalid signature');

  // Claim the event ID atomically so retries cannot duplicate work.
  const firstDelivery = await claimEvent(event.id);
  if (!firstDelivery) return res.sendStatus(200);

  if (event.event_type === 'PAYMENT.CAPTURE.COMPLETED') {
    await markOrderPaid(event.resource.id);
  }

  return res.sendStatus(200);
});

app.listen(3000);

पावती कार्य को छोटा रखें। ईवेंट को संग्रहीत करें, 2xx प्रतिक्रिया लौटाएँ, और एक कतार में धीमी ईमेल या पूर्ति कार्य करें। इवेंट आईडी प्राकृतिक निष्क्रियता कुंजी है; इन-मेमोरी सेट पर निर्भर रहने के बजाय एक अद्वितीय डेटाबेस बाधा लागू करें।

PayPal हस्ताक्षरों को सही ढंग से सत्यापित करें

PayPal हेडर सहित ट्रांसमिशन मेटाडेटा भेजता है PAYPAL-AUTH-ALGO, PAYPAL-CERT-URL, PAYPAL-TRANSMISSION-ID, PAYPAL-TRANSMISSION-SIG, और PAYPAL-TRANSMISSION-TIME. ऐप से जुड़े इवेंट के लिए, आप उन मानों, वेबहुक आईडी और इवेंट को सैंडबॉक्स में सबमिट कर सकते हैं /v1/notifications/verify-webhook-signature एपीआई. एक सफल HTTP प्रतिक्रिया पर्याप्त नहीं है; ज़रूरत होना verification_status बराबर करने के लिए SUCCESS. PayPal अपने यहां स्थानीय क्रिप्टोग्राफ़िक सत्यापन का भी दस्तावेजीकरण करता है वेबहुक एकीकरण मार्गदर्शिका.

सिम्युलेटर चेतावनी: PayPal का पोस्टबैक सत्यापन समापन बिंदु नकली सिम्युलेटर घटनाओं का समर्थन नहीं करता है। PayPal शाब्दिक वेबहुक आईडी का दस्तावेजीकरण करता है WEBHOOK_ID सिम्युलेटर हस्ताक्षर को स्व-सत्यापित करने के लिए। सैंडबॉक्स ऐप को निर्दिष्ट वास्तविक वेबहुक आईडी के साथ उस विशेष मान को भ्रमित न करें। यदि आपका तात्कालिक लक्ष्य पोस्टबैक एपीआई का परीक्षण करना है, तो मॉक सिम्युलेटर इवेंट के बजाय वास्तविक सैंडबॉक्स लेनदेन उत्पन्न करें।

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

पैसे या पहुंच को बदलने वाली घटनाओं का परीक्षण करें

  • PAYMENT.CAPTURE.COMPLETED: अपेक्षित ऑर्डर पहचानकर्ताओं, राशि, मुद्रा और कैप्चर स्थिति की जांच करने के बाद ही पूर्ति प्रदान करें।
  • PAYMENT.CAPTURE.REFUNDED: अधिकारों को सुरक्षित रूप से उलटें और आंशिक रिफंड का समर्थन करें।
  • चेकआउट ऑर्डर ईवेंट: पूर्ण कैप्चर से अनुमोदन को अलग करें; केवल अनुमोदन ही इस बात का प्रमाण नहीं है कि धनराशि हड़प ली गई है।
  • सदस्यता घटनाएँ: आपकी बिलिंग स्थिति मशीन के विरुद्ध सक्रियण, निलंबन, रद्दीकरण, विफल भुगतान और आउट-ऑफ़-ऑर्डर डिलीवरी का परीक्षण करें।

प्रदाता ईवेंट सूचनाएं हैं, निर्विवाद डेटाबेस कमांड नहीं। संवेदनशील बदलावों के लिए, प्रमाणित एपीआई क्रेडेंशियल के साथ संदर्भित PayPal संसाधन पुनः प्राप्त करें और इसकी तुलना अपने ऑर्डर रिकॉर्ड से करें।

असफल स्थानीय डिलीवरी का समस्या निवारण

सिम्युलेटर कनेक्ट नहीं हो सकता

पुष्टि करें कि URL https:// से शुरू होता है, इसमें सटीक वेबहुक पथ शामिल है, और फिर भी एक चालू सुरंग की ओर इशारा करता है। curl के साथ स्वयं सार्वजनिक URL का परीक्षण करें। 404 का आमतौर पर मतलब होता है कि पथ या रूपरेखा मार्ग गलत है; 502 का आम तौर पर मतलब है कि सुरंग स्थानीय प्रक्रिया तक नहीं पहुंच सकती।

हैंडलर 401

लौटाता है

पहले यह निर्धारित करें कि ईवेंट सिम्युलेटर से आया है या पंजीकृत सैंडबॉक्स ऐप से। तदनुसार वेबहुक आईडी और सत्यापन विधि की जाँच करें। फिर सत्यापित करें कि प्रॉक्सी ने सभी PAYPAL-* हेडर को सुरक्षित रखा है और आप api-m.sandbox.paypal.com.

के साथ लाइव क्रेडेंशियल्स को मिश्रित नहीं कर रहे हैं।

PayPal पुनः प्रयास करता है या डिलीवरी विफल चिह्नित करता है

घटना को स्थायी रूप से स्वीकार किए जाने के बाद ही 2xx लौटाएँ। रीडायरेक्ट, HTML त्रुटि पेज, प्रमाणीकरण मिडलवेयर और रूट पर लंबी सिंक्रोनस नौकरियों से बचें। वास्तविक ऐप इवेंट के लिए इवेंट व्यूअर और मॉक डिलीवरी डायग्नोस्टिक्स के लिए सिम्युलेटर परिणाम का उपयोग करें। टिकाऊ प्रसंस्करण पैटर्न के लिए पुनः प्रयास और निष्क्रियता मार्गदर्शिका देखें।

लाइव होने से पहले सुरक्षा जांच सूची

  • अलग सैंडबॉक्स और लाइव क्लाइंट क्रेडेंशियल, वेबहुक आईडी और एंडपॉइंट रहस्यों का उपयोग करें।
  • व्यावसायिक फ़ील्ड को पार्स करने या स्थिति बदलने से पहले प्रत्येक हस्ताक्षर को सत्यापित करें।
  • PayPal ईवेंट आईडी द्वारा डुप्लिकेट करें और पूर्ति लेनदेन को परमाणु बनाएं।
  • केवल POST की अनुमति दें, अधिकतम अनुरोध आकार, दर सीमा लागू करें, और जब संभव हो तो टनल URL को निजी रखें।
  • लॉग से क्रेता डेटा और क्रेडेंशियल संपादित करें; डिबगिंग के दौरान सामने आई किसी भी चीज़ को घुमाएँ.
  • अस्थायी सुरंग URL को एक स्थिर उत्पादन समापन बिंदु से बदलें और हस्ताक्षर दोहराएं और परीक्षण पुनः प्रयास करें।

संपूर्ण ईवेंट और सत्यापन स्कीमा के लिए, PayPal के प्राथमिक Webhooks API संदर्भ का उपयोग करें। कच्चे निकायों और सुरक्षित तुलनाओं पर फ़्रेमवर्क-स्वतंत्र विवरण के लिए, वेबहुक हस्ताक्षर सत्यापन मार्गदर्शिका____

पढ़ें।

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

क्या PayPal वेबहुक सिम्युलेटर लोकलहोस्ट को भेज सकता है?
प्रत्यक्ष नहीं। सार्वजनिक HTTPS सुरंग के साथ अपने स्थानीय वेबहुक मार्ग को उजागर करें, फिर सिम्युलेटर में उस HTTPS URL को दर्ज करें। PayPal को एक श्रोता की आवश्यकता है जो इंटरनेट के माध्यम से पहुंच सके।
सिम्युलेटर इवेंट के लिए PayPal हस्ताक्षर सत्यापन विफल क्यों हो जाता है?
मॉक सिम्युलेटर इवेंट को PayPal के वेरिफाई-वेबहुक-सिग्नेचर एंडपॉइंट पर पोस्ट नहीं किया जा सकता। स्व-सत्यापन सिम्युलेटर हस्ताक्षरों के लिए PayPal दस्तावेज़ WEBHOOK_ID; पोस्टबैक सत्यापन का परीक्षण करने के लिए वास्तविक सैंडबॉक्स ऐप ईवेंट का उपयोग करें।
PayPal सैंडबॉक्स और सिम्युलेटर वेबहुक के बीच क्या अंतर है?
सिम्युलेटर वेबहुक श्रोता परीक्षण के लिए नकली, ऐप-स्वतंत्र पेलोड हैं। सैंडबॉक्स ऐप वेबहुक सैंडबॉक्स गतिविधि का परिणाम है, ऐप की वास्तविक वेबहुक आईडी का उपयोग करें, इसके इवेंट टूलिंग में दिखाई दें, और सामान्य सत्यापन वर्कफ़्लो का समर्थन करें।
PayPal वेबहुक को कौन सी HTTP स्थिति लौटानी चाहिए?
घटना के सत्यापित और स्थायी रूप से स्वीकार किए जाने के बाद 2xx प्रतिक्रिया लौटाएँ। अमान्य हस्ताक्षरों को अस्वीकार करें, और धीमी पूर्ति या अधिसूचना कार्य को एक कतार में ले जाएं ताकि डिलीवरी का समय समाप्त न हो।