PayPal
Webhooks
खोज…
पैरामीटर
| पैरामीटर | विवरण |
|---|---|
| एप्लिकेशन | हमारे एक्सप्रेस आवेदन संदर्भ |
| bodyParser | JSON एन्कोडेड निकायों के साथ काम करने के लिए बॉडी-पार्सर पैकेज संदर्भ |
| ग्राहक ID | एप्लिकेशन क्लाइंट आईडी (OAuth 2 क्रेडेंशियल्स) |
| एचटीटीपी | सर्वर को चलाने के लिए http पैकेज |
| paypal | पेपैल नोड एसडीके संदर्भ वस्तु |
| गुप्त | आवेदन रहस्य (OAuth 2 क्रेडेंशियल्स) |
| webhookId | संशोधित किए जाने वाले वेबहूक की आईडी |
| webhookUpdate | JSON ऑब्जेक्ट जिसमें वेबहूक विवरण अपडेट किया जाना है |
टिप्पणियों
ये नमूने आपके आवेदन और भुगतान के लिए घटना की निगरानी प्रदान करने के लिए PayPal webhooks का उपयोग करने के काम के उदाहरणों को कवर करते हैं।
सैंडबॉक्स वेबहूक का परीक्षण एनरोक और एक्सप्रेस (नोड) के साथ
इस उदाहरण में हम सैंडबॉक्स में वेबहूक नोटिफिकेशन का परीक्षण करने जा रहे हैं, जो कि हमारे नोड नोड श्रोता के लिए एक सुरंग उपलब्ध कराने के लिए एनड्रोक का उपयोग कर रहा है, जो इंटरनेट पर लोकलहोस्ट पर चल रहा है। इस उदाहरण के लिए, हम भुगतान इवेंट्स (जैसे भुगतान किया जा रहा है) के लिए नोटिफिकेशन वेबहूक सेट करने के लिए नोड का उपयोग करने जा रहे हैं, फिर वेबहुक इवेंट्स से आने वाले HTTP POST संदेशों को सुनने के लिए सर्वर सेट करें।
ऐसा करने के लिए हम यहां कुछ कदम उठा रहे हैं:
- Webhooks से आने वाले POST ट्रैफ़िक को सुनने के लिए एक सरल सर्वर सेट करें, जो कि पेपाल से नोटिफिकेशन होगा, और लोकलहोस्ट पर सुनना शुरू कर देगा।
- फिर इंटरनेट पर लोकलहोस्ट से सुरंग उपलब्ध कराने के लिए एनरोक का उपयोग करें ताकि पेपाल के माध्यम से अधिसूचना पोस्ट की जा सके।
- अंतिम रूप से, हमारे एप्लिकेशन को (उपलब्ध कराए गए क्रेडेंशियल के आधार पर) वेबहुक घटनाओं पर क्लिक करें, जिन्हें हम ट्रैक करना चाहते हैं, चरण 2 से सार्वजनिक एनजीआरआई को प्रदान करते हैं।
एक Webhooks श्रोता बनाना
पहली चीज जो हमें करने की जरूरत है वह है श्रोता बनाना। श्रोता के साथ शुरू करने का कारण यह है कि जब हम उन्हें बनाते हैं या अपडेट करते हैं, तो हमें webhooks को प्रदान करने के लिए ngrok लाइव URL की आवश्यकता होती है।
var bodyParser = require('body-parser'),
http = require('http'),
app = require('express')();
app.use(bodyParser.json());
app.post('/', function(req, res){
console.log(JSON.stringify(req.body));
});
//create server
http.createServer(app).listen(3001, function () {
console.log('Server started: Listening on port 3001');
});
हमारा श्रोता एक्सप्रेस का उपयोग करके एक सरल मार्ग है। हम आने वाले किसी भी POST ट्रैफ़िक के लिए सुनते हैं, फिर POST बॉडी को कंसोल पर थूकते हैं। हम इसका उपयोग श्रोता के साथ जो कुछ भी करना चाहते हैं, जब वह आता है, तो हम इसका उपयोग कर सकते हैं।
जब हम अंत में HTTP सर्वर बनाते हैं, तो हम इसे लोकलहोस्ट पोर्ट 3001 पर सुनने के लिए सेट करते हैं। ट्रैफ़िक सुनना शुरू करने के लिए अब उस स्क्रिप्ट को चलाएं।
श्रोता को इंटरनेट पर उजागर करने के लिए एनग्रोक का उपयोग करना
लोकलहोस्ट: 3001 पर सेट किए गए श्रोता के साथ, हमारा अगला काम उस स्क्रिप्ट को इंटरनेट पर उजागर करना है, ताकि ट्रैफ़िक को उस पर भेजा जा सके, जो कि ngrok का काम है।
टर्मिनल विंडो से निम्न कमांड चलाएँ:
ngrok http 3001
यह पोर्टहॉस्ट 3001 पर लोकलहोस्ट के लिए एक जीवित सुरंग प्रदान करने की प्रक्रिया शुरू करेगा, और एक बार चलाने के बाद निम्नलिखित जानकारी प्रदान करेगा:
जैसा कि हम देख सकते हैं, कि हम जिस लाइव एड्रेस का इस्तेमाल कर सकते हैं, वह पेपल वेबकॉक को हमारे चलने वाले श्रोता को लोकलहोस्ट पर इंगित करने के लिए उपयोग कर सकता है http(s)://055b3480.ngrok.io । श्रोता को स्थापित करने के लिए हमें बस इतना जानना चाहिए।
सूचनाओं की सदस्यता
हमारा अंतिम चरण हमारे एप्लिकेशन के लिए वेबहूक बनाना है, जो हमारे ऐप पर भुगतान, धनवापसी आदि के साथ कुछ घटनाओं के होने पर सूचनाएं बनाएगा। हमें केवल इन वेबहूक को एक बार उन्हें एप्लिकेशन से बांधने की आवश्यकता है, इसलिए जब भी आप उनका उपयोग करना चाहते हैं, तो उन्हें हर बार चलाने की आवश्यकता नहीं है।
सबसे पहले हम PayPal Node SDK, हमारी क्लाइंट आईडी / एक एप्लिकेशन बनाने से गुप्त के लिए आवश्यकता को जोड़कर PayPal वातावरण की स्थापना करते हैं, फिर सैंडबॉक्स के लिए पर्यावरण को कॉन्फ़िगर करते हैं।
var paypal = require('paypal-rest-sdk');
var clientId = 'YOUR APPLICATION CLIENT ID';
var secret = 'YOUR APPLICATION SECRET';
paypal.configure({
'mode': 'sandbox', //sandbox or live
'client_id': clientId,
'client_secret': secret
});
इसके बाद, हम अपने webhooks के लिए JSON संरचना सेट करते हैं। webhooks में जानकारी के दो टुकड़े होते हैं, वह url जिसे सभी webhook घटनाओं को भेजा जाना चाहिए, और जिस event_types को हम सदस्यता लेना चाहते हैं।
इस नमूने के मामले में, url हमारे ngrok लाइव URL पर सेट है, और जिन घटनाओं के लिए हम सुन रहे हैं वे ऐसे मामले हैं जहां भुगतान पूर्ण या अस्वीकृत हैं।
संभावित घटनाओं की पूरी सूची के लिए, https://developer.paypal.com/docs/integration/direct/rest-webhooks-overview/#event-type-support देखें ।
अंत में, हम webhooks को webhooks, notification.webhook.create बनाने के लिए कॉल में पास करते हैं। यदि सफल हुआ, तो पेपाल हमारे द्वारा बताए गए समापन बिंदु पर सूचनाएं भेजेगा, जो कि लोकलहोस्ट पर चल रहा है।
var webhooks = {
"url": "https://436e4d13.ngrok.io",
"event_types": [{
"name": "PAYMENT.SALE.COMPLETED"
},{
"name": "PAYMENT.SALE.DENIED"
}
]};
paypal.notification.webhook.create(webhooks, function (err, webhook) {
if (err) {
console.log(err.response);
throw error;
} else {
console.log("Create webhook Response");
console.log(webhook);
}
});
एक बार जब हम उन एप्लिकेशन क्रेडेंशियल्स का उपयोग करके भुगतान जारी कर देते हैं, तो भुगतान स्थिति के बारे में जानकारी हमारे द्वारा सेट किए गए अंतिम बिंदु पर भेज दी जाएगी।
POST निकाय का एक उदाहरण जो पेपल नोटिफिकेशन के रूप में भेजता है, वह निम्न की तरह लग सकता है, जो एक सफल पेपल भुगतान के बाद भेजा गया था:
{
"id": "WH-9FE9644311463722U-6TR22899JY792883B",
"create_time": "2016-04-20T16:51:12Z",
"resource_type": "sale",
"event_type": "PAYMENT.SALE.COMPLETED",
"summary": "Payment completed for $ 7.47 USD",
"resource": {
"id": "18169707V5310210W",
"state": "completed",
"amount": {
"total": "7.47",
"currency": "USD",
"details": {
"subtotal": "7.47"
}
},
"payment_mode": "INSTANT_TRANSFER",
"protection_eligibility": "ELIGIBLE",
"protection_eligibility_type": "ITEM_NOT_RECEIVED_ELIGIBLE,UNAUTHORIZED_PAYMENT_ELIGIBLE",
"transaction_fee": {
"value": "0.52",
"currency": "USD"
},
"invoice_number": "",
"custom": "",
"parent_payment": "PAY-809936371M327284GK4L3FHA",
"create_time": "2016-04-20T16:47:36Z",
"update_time": "2016-04-20T16:50:07Z",
"links": [
{
"href": "https:\/\/api.sandbox.paypal.com\/v1\/payments\/sale\/18169707V5310210W",
"rel": "self",
"method": "GET"
},
{
"href": "https:\/\/api.sandbox.paypal.com\/v1\/payments\/sale\/18169707V5310210W\/refund",
"rel": "refund",
"method": "POST"
},
{
"href": "https:\/\/api.sandbox.paypal.com\/v1\/payments\/payment\/PAY-809936371M327284GK4L3FHA",
"rel": "parent_payment",
"method": "GET"
}
]
},
"links": [
{
"href": "https:\/\/api.sandbox.paypal.com\/v1\/notifications\/webhooks-events\/WH-9FE9644311463722U-6TR22899JY792883B",
"rel": "self",
"method": "GET"
},
{
"href": "https:\/\/api.sandbox.paypal.com\/v1\/notifications\/webhooks-events\/WH-9FE9644311463722U-6TR22899JY792883B\/resend",
"rel": "resend",
"method": "POST"
}
]
}
एक नए URL (नोड नमूना) के साथ एक Webhook अद्यतन करना
यह नमूना आपको दिखाएगा कि मौजूदा webhook अग्रेषण URL (जहां सूचनाएं पोस्ट की जानी चाहिए) को कैसे अपडेट किया जाए। इसे चलाने के लिए, आपके पास पहली बार अपना वेबबुक बनाने के लिए पेपल द्वारा प्रदान की गई आईडी होनी चाहिए।
सबसे पहले, पेपैल एसडीके जोड़ें और पर्यावरण (नीचे सैंडबॉक्स) को कॉन्फ़िगर करें।
var paypal = require('paypal-rest-sdk');
var clientId = 'YOUR APPLICATION CLIENT ID';
var secret = 'YOUR APPLICATION SECRET';
paypal.configure({
'mode': 'sandbox', //sandbox or live
'client_id': clientId,
'client_secret': secret
});
इसके बाद, JSON संरचना और वेबहूक विवरण सेट करें। पहले अपने webhook के लिए ID को webhookId असाइन करें। इसके बाद, webhookUpdate , प्रतिस्थापन का एक ऑपरेशन निर्दिष्ट करें, उस संसाधन का एक अद्यतन निर्दिष्ट करने के लिए /url लिए path सेट करें, और नए URL को इसे value साथ बदलने के लिए प्रदान करें।
var webhookId = "YOUR WEBHOOK ID";
var webhookUpdate = [{
"op": "replace",
"path": "/url",
"value": "https://64fb54a2.ngrok.io"
}];
अंत में, webhookId और webhookUpdate में पास होने के लिए webhookId notification.webhook.replace(...) कॉल करें।
paypal.notification.webhook.replace (webhookId, webhookUpdate, function (ग़लती, Res) {if (इरेट) {कंसोल.लॉग (इरेज़); फेंक फ़्री;} बाकी {कंसोल.लॉग (JSON.stringify (रेस));}; });
यदि सभी सफल हो जाते हैं, तो पेपाल से निम्नलिखित के समान एक वस्तु वापस प्रदान की जानी चाहिए और इस नमूने के मामले में, टर्मिनल में नई अद्यतन जानकारी के साथ प्रदर्शित किया जाएगा।
{
"id":"4U496984902512511",
"url":"https://64fb54a2.ngrok.io",
"event_types":[{
"name":"PAYMENT.SALE.DENIED",
"description":"A sale payment was denied"
}],
"links":[{
"href":"https://api.sandbox.paypal.com/v1/notifications/webhooks/4U496984902512511",
"rel":"self",
"method":"GET"
},{
"href":"https://api.sandbox.paypal.com/v1/notifications/webhooks/4U496984902512511",
"rel":"update",
"method":"PATCH"
},{
"href":"https://api.sandbox.paypal.com/v1/notifications/webhooks/4U496984902512511",
"rel":"delete",
"method":"DELETE"
}],
"httpStatusCode":200
}
