PayPal
webhooks
Zoeken…
parameters
| Parameter | Details |
|---|---|
| app | Onze Express applicatie referentie |
| bodyParser | De body-parser pakketreferentie voor het werken met JSON-gecodeerde lichamen |
| klant identificatie | De applicatie-client-ID (OAuth 2-inloggegevens) |
| http | Het http-pakket voor het uitvoeren van de server |
| paypal | Het PayPal Node SDK-referentieobject |
| geheim | Het toepassingsgeheim (OAuth 2-inloggegevens) |
| webhookId | ID van de te wijzigen webhook |
| webhookUpdate | JSON-object met de webhookdetails die moeten worden bijgewerkt |
Opmerkingen
Deze voorbeelden bevatten werkvoorbeelden van het gebruik van PayPal-webhooks voor het bewaken van gebeurtenissen voor uw toepassing en betalingen.
Sandbox-webhaken testen met ngrok en Express (knooppunt)
In dit voorbeeld gaan we kijken naar het testen van webhookmeldingen in sandbox, met behulp van ngrok om een tunnel te bieden voor onze Node HTTP-luisteraar, die op localhost draait, naar het internet. Voor dit voorbeeld gaan we Node gebruiken om meldingswebhooks in te stellen voor betalingsgebeurtenissen (zoals een betaling die wordt uitgevoerd) en vervolgens de server in te stellen om te luisteren naar inkomende HTTP POST-berichten van de webhookgebeurtenissen.
Er zijn een paar stappen die we hier gaan volgen om dit mogelijk te maken:
- Stel een eenvoudige server in om te luisteren naar inkomend POST-verkeer van de webhooks, wat de melding van PayPal zal zijn, en begin met luisteren op localhost.
- Gebruik vervolgens ngrok om een tunnel van localhost naar het internet aan te bieden, zodat PayPal via kan notificeren.
- Abonneer ten slotte onze applicatie (op basis van de verstrekte referenties) op webhook-evenementen die we willen volgen, en biedt de publieke ngrok URI vanaf stap 2.
Een Webhooks-luisteraar maken
Het eerste dat we moeten doen, is de luisteraar maken. De reden waarom we met de luisteraar beginnen, is omdat we de ngrok live URL nodig hebben om de webhooks te verstrekken wanneer we ze maken of bijwerken.
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');
});
Onze luisteraar is een eenvoudige route met behulp van Express. We luisteren naar inkomend POST-verkeer en spugen vervolgens de POST-body naar de console. We kunnen dit gebruiken om te doen wat we willen met de luisteraar als het binnenkomt.
Wanneer we aan het einde de HTTP-server maken, stellen we deze in om te luisteren op localhost-poort 3001. Voer dat script nu uit om te luisteren naar verkeer.
Ngrok gebruiken om de luisteraar bloot te stellen aan internet
Met de luisteraar ingesteld op localhost: 3001, is onze volgende taak om dat script op internet te publiceren, zodat er verkeer naartoe kan worden gestuurd, wat de taak van ngrok is.
Voer de volgende opdracht uit vanuit een terminalvenster:
ngrok http 3001
Dat zal het proces van het leveren van een live-tunnel voor localhost op poort 3001 initiëren en zal de volgende informatie bieden zodra deze wordt uitgevoerd:
Zoals we kunnen zien, is het live-adres dat we kunnen gebruiken om de PayPal-webhook naar onze actieve luisteraar op localhost te verwijzen, http(s)://055b3480.ngrok.io . Dat is alles wat we moeten weten om de luisteraar in te stellen.
Abonneren op meldingen
Onze laatste stap is het maken van webhooks voor onze applicatie, die meldingen maakt wanneer bepaalde evenementen plaatsvinden met betalingen, terugbetalingen, enz. In onze app. We hoeven deze webhooks slechts eenmaal te maken om ze aan de toepassing te binden, zodat ze niet elke keer moeten worden uitgevoerd als u ze wilt gebruiken.
Eerst hebben we de PayPal-omgeving ingesteld door de vereiste voor de PayPal Node SDK toe te voegen, onze klant-ID / geheim van het maken van een applicatie, en vervolgens de omgeving voor sandbox te configureren.
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
});
Vervolgens hebben we de JSON-structuur opgezet voor onze webhooks. webhooks bevat twee stukjes informatie, de url waarnaar alle webhook-evenementen moeten worden verzonden en de event_types waarop we ons willen abonneren.
In het geval van dit voorbeeld is de url ingesteld op onze ngrok live-URL en zijn de gebeurtenissen waarnaar we luisteren gevallen waarin betalingen zijn voltooid of geweigerd.
Zie https://developer.paypal.com/docs/integration/direct/rest-webhooks-overview/#event-type-support voor een volledige lijst met mogelijke gebeurtenissen.
Tot slot, passeren we de webhooks voorwerp in de oproep aan de webhooks creëren, notification.webhook.create . Als dit lukt, stuurt PayPal meldingen naar het door ons opgegeven eindpunt, dat wordt uitgevoerd op localhost.
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);
}
});
Nadat we een betaling hebben uitgevoerd met behulp van die aanmeldingsgegevens, wordt informatie over de betalingsstatus verzonden naar het eindpunt dat we hebben ingesteld.
Een voorbeeld van de POST-instantie die PayPal verzendt omdat de melding er als volgt uitziet, die is verzonden na een succesvolle PayPal-betaling:
{
"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"
}
]
}
Een webhook bijwerken met een nieuwe URL (voorbeeld van knooppunt)
In dit voorbeeld wordt getoond hoe u een bestaande doorstuur-URL voor een webhook kunt bijwerken (waarnaar de meldingen moeten worden gepost). Om dit uit te voeren, moet u de ID hebben die door PayPal is verstrekt bij het maken van uw webhooks.
Voeg eerst de PayPal-SDK toe en configureer de omgeving (onderstaande sandbox).
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
});
Stel vervolgens de JSON-structuur en webhookdetails in. Wijs eerst de ID voor uw webhook toe aan webhookId . Geef vervolgens in webhookUpdate een bewerking voor vervangen op, stel het path naar /url om een update van die bron op te geven en geef de nieuwe URL op om deze te vervangen door value .
var webhookId = "YOUR WEBHOOK ID";
var webhookUpdate = [{
"op": "replace",
"path": "/url",
"value": "https://64fb54a2.ngrok.io"
}];
Bel ten slotte notification.webhook.replace(...) via webhookId en webhookUpdate .
paypal.notification.webhook.replace (webhookId, webhookUpdate, function (err, res) {if (err) {console.log (err); throw err;} else {console.log (JSON.stringify (res));}} });
Als alles slaagt, moet een object zoals het volgende worden teruggegeven door PayPal en, in dit geval, worden weergegeven in de terminal met de nieuw bijgewerkte informatie.
{
"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
}
