PayPal
Webhooks
Suche…
Parameter
| Parameter | Einzelheiten |
|---|---|
| App | Unsere Express-Anwendungsreferenz |
| BodyParser | Die Body-Parser-Paketreferenz für die Arbeit mit JSON-codierten Körpern |
| Kunden ID | Die Anwendungsclient-ID (OAuth 2-Berechtigungsnachweise) |
| http | Das http-Paket zum Ausführen des Servers |
| paypal | Das Referenzobjekt des PayPal-Node-SDK |
| Geheimnis | Das Anwendungsgeheimnis (OAuth 2-Berechtigungsnachweise) |
| webhookId | ID des zu ändernden Webhooks |
| webhookUpdate | JSON-Objekt, das die zu aktualisierenden Webhook-Details enthält |
Bemerkungen
In diesen Beispielen werden Arbeitsbeispiele für die Verwendung von PayPal-Webhooks für die Ereignisüberwachung für Ihre Anwendung und Zahlungen beschrieben.
Sandbox-Webhooks mit ngrok und Express (Node) testen
In diesem Beispiel werden Webhook-Benachrichtigungen in Sandbox getestet. Mit ngrok wird ein Tunnel für unseren Node-HTTP-Listener bereitgestellt , der auf localhost auf das Internet ausgeführt wird. In diesem Beispiel werden wir Node verwenden, um Benachrichtigungs-Webhooks für Zahlungsereignisse einzurichten (z. B. eine Zahlung). Dann wird der Server so eingerichtet, dass er auf eingehende HTTP-POST-Nachrichten von den Webhook-Ereignissen wartet.
Es gibt einige Schritte, die wir hier befolgen werden, um dies zu ermöglichen:
- Richten Sie einen einfachen Server ein, um den eingehenden POST-Verkehr von den Webhooks zu überwachen, der als Benachrichtigung von PayPal angezeigt wird, und beginnen Sie mit dem Abhören von localhost.
- Verwenden Sie dann ngrok, um einen Tunnel von localhost zum Internet bereitzustellen, damit PayPal eine Benachrichtigung übermitteln kann.
- Abonnieren Sie schließlich unsere Anwendung (basierend auf den bereitgestellten Anmeldeinformationen) für Webhook-Ereignisse, die wir verfolgen möchten, und stellen Sie die öffentliche ngrok-URI aus Schritt 2 bereit.
Erstellen eines Webhooks Listener
Als erstes müssen wir den Listener erstellen. Der Grund, warum wir mit dem Listener beginnen, ist, dass wir die Webhooks mit der Live-URL von ngrok versehen, wenn wir sie erstellen oder aktualisieren.
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');
});
Unser Zuhörer ist eine einfache Route mit Express. Wir überwachen den eingehenden POST-Verkehr und spucken den POST-Body auf die Konsole aus. Wir können dies nutzen, um mit dem Zuhörer alles zu tun, was wir möchten.
Wenn wir am Ende den HTTP-Server erstellen, richten wir ihn so ein, dass er den localhost-Port 3001 überwacht. Führen Sie dieses Skript jetzt aus, um den Datenverkehr zu überwachen.
Verwenden von ngrok, um den Listener dem Internet zugänglich zu machen
Wenn der Listener auf localhost: 3001 eingerichtet ist, besteht die nächste Aufgabe darin, dieses Skript dem Internet zugänglich zu machen, sodass der Verkehr an ihn gesendet werden kann. Dies ist die Aufgabe von ngrok.
Führen Sie den folgenden Befehl in einem Terminalfenster aus:
ngrok http 3001
Dadurch wird der Prozess des Bereitstellens eines Live-Tunnels für Localhost auf Port 3001 initiiert und nach dem Ausführen die folgenden Informationen bereitgestellt:
Wie wir sehen können, lautet die Live-Adresse, mit der wir den PayPal-Webhook auf unseren laufenden Listener auf localhost richten können, http(s)://055b3480.ngrok.io . Das ist alles, was wir wissen müssen, um den Hörer einzurichten.
Benachrichtigungen abonnieren
Unser letzter Schritt ist das Erstellen von Webhooks für unsere Anwendung, die Benachrichtigungen zu bestimmten Ereignissen wie Zahlungen, Rückerstattungen usw. in unserer App erstellt. Diese Webhooks müssen nur einmal erstellt werden, um sie an die Anwendung zu binden. Sie müssen also nicht jedes Mal ausgeführt werden, wenn Sie sie verwenden möchten.
Zuerst richten wir die PayPal-Umgebung ein, indem wir die Anforderung für das PayPal-Node-SDK hinzufügen, unsere Client-ID / das Geheimnis, eine Anwendung zu erstellen, und dann die Umgebung für Sandbox konfigurieren.
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
});
Als Nächstes richten wir die JSON-Struktur für unsere Webhooks ein. webhooks enthält zwei Informationen, die url , an die alle Webhook-Ereignisse gesendet werden sollen, und die event_types , die wir abonnieren möchten.
In diesem Beispiel wird die url auf unsere Ngrok-Live-URL gesetzt. Bei den Ereignissen, auf die wir hören, handelt es sich um Fälle, in denen Zahlungen abgeschlossen oder abgelehnt werden.
Eine vollständige Liste möglicher Ereignisse finden Sie unter https://developer.paypal.com/docs/integration/direct/rest-webhooks-overview/#event-type-support .
Als letztes übergeben wir das webhooks Objekt in den Aufruf zum Erstellen der Webhooks ( notification.webhook.create . Bei Erfolg sendet PayPal Benachrichtigungen an den angegebenen Endpunkt, der auf localhost ausgeführt wird.
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);
}
});
Sobald wir eine Zahlung mit diesen Anmeldeinformationen ausgestellt haben, werden Informationen zum Zahlungsstatus an den von uns eingerichteten Endpunkt gesendet.
Ein Beispiel für den POST-Body, den PayPal als Benachrichtigung sendet, könnte wie folgt aussehen, der nach einer erfolgreichen PayPal-Zahlung gesendet wurde:
{
"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"
}
]
}
Aktualisieren eines Webhooks mit einer neuen URL (Knotenbeispiel)
In diesem Beispiel erfahren Sie, wie Sie eine vorhandene URL für die Weiterleitung von Webhooks aktualisieren (an die die Benachrichtigungen gepostet werden sollen). Um dies auszuführen, sollten Sie die ID von PayPal bei der Erstellung Ihrer Webhooks zurückgegeben haben.
Fügen Sie zunächst das PayPal-SDK hinzu und konfigurieren Sie die Umgebung (Sandbox unten).
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
});
Richten Sie als Nächstes die JSON-Struktur und die Webhook-Details ein. Weisen Sie die ID für Ihren webhookId zuerst der WebhookId zu. Als Nächstes geben Sie im webhookUpdate eine Ersetzungsoperation an, legen Sie den path auf /url , um eine Aktualisierung dieser Ressource anzugeben, und geben Sie die neue URL an, um sie durch den value unter value zu ersetzen.
var webhookId = "YOUR WEBHOOK ID";
var webhookUpdate = [{
"op": "replace",
"path": "/url",
"value": "https://64fb54a2.ngrok.io"
}];
Rufen Sie zuletzt notification.webhook.replace(...) und übergeben Sie die webhookId und das webhookUpdate .
paypal.notification.webhook.replace (webhookId, webhookUpdate, function (err, res) {if (err) {console.log (err); werfen err;} else {console.log (JSON.stringify (res));} });
Wenn alles erfolgreich ist, sollte ein Objekt, das dem folgenden ähnelt, von PayPal zurückgegeben und im Fall dieses Beispiels mit den neu aktualisierten Informationen im Terminal angezeigt werden.
{
"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
}
