PayPal
Webhooks
Ricerca…
Parametri
| Parametro | Dettagli |
|---|---|
| App | Il nostro riferimento per le applicazioni Express |
| bodyParser | Il riferimento del pacchetto body-parser per lavorare con i corpi codificati JSON |
| Identificativo cliente | L'ID del client dell'applicazione (credenziali OAuth 2) |
| http | Il pacchetto http per l'esecuzione del server |
| paypal | L'oggetto di riferimento SDK del nodo PayPal |
| segreto | Il segreto dell'applicazione (credenziali OAuth 2) |
| webhookId | ID del webhook da modificare |
| webhookUpdate | Oggetto JSON contenente i dettagli del webhook da aggiornare |
Osservazioni
Questi esempi illustrano esempi di come utilizzare i webhook di PayPal per fornire il monitoraggio degli eventi per l'applicazione e i pagamenti.
Test di Sandbox Webhooks con ngrok ed Express (Node)
In questo esempio esamineremo le notifiche di webhook in sandbox, utilizzando ngrok per fornire un tunnel per il listener HTTP Node, in esecuzione su localhost, a Internet. Per questo esempio, useremo il Nodo per configurare i webhook di notifica per gli eventi di pagamento (come ad esempio un pagamento effettuato), quindi configurare il server per ascoltare i messaggi POST HTTP in arrivo dagli eventi webhook.
Ci sono alcuni passi che seguiremo qui per far sì che ciò accada:
- Imposta un semplice server per ascoltare il traffico POST in entrata dai webhooks, che sarà la notifica da PayPal, e iniziare ad ascoltare su localhost.
- Quindi utilizzare ngrok per fornire un tunnel da localhost a Internet in modo che PayPal possa inviare notifiche tramite.
- Infine, iscriviti alla nostra applicazione (in base alle credenziali fornite) agli eventi webhook che vogliamo monitorare, fornendo l'URI ngrok pubblico dal passaggio 2.
Creare un listener Webhooks
La prima cosa che dobbiamo fare è creare l'ascoltatore. Il motivo per cui iniziamo con l'ascoltatore è perché abbiamo bisogno dell'URL live di ngrok da fornire ai webhook quando li creiamo o li aggiorniamo.
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');
});
Il nostro ascoltatore è un percorso semplice che utilizza Express. Ascoltiamo qualsiasi traffico POST in entrata, quindi sputiamo il corpo del POST alla console. Possiamo usarlo per fare tutto ciò che vorremmo con l'ascoltatore quando entrerà in gioco.
Quando creiamo il server HTTP alla fine, lo impostiamo per ascoltare sulla porta localhost 3001. Esegui ora lo script per iniziare ad ascoltare il traffico.
Usando ngrok per esporre l'ascoltatore a Internet
Con il listener impostato su localhost: 3001, il nostro prossimo lavoro è quello di esporre questo script a Internet, in modo che possa essere inviato al traffico, che è il lavoro di ngrok.
Esegui il seguente comando da una finestra di terminale:
ngrok http 3001
Ciò avvierà il processo di fornitura di un tunnel live per localhost sulla porta 3001 e fornirà le seguenti informazioni una volta eseguito:
Come possiamo vedere, l'indirizzo live che possiamo utilizzare per indirizzare il webhook di PayPal al nostro listener in esecuzione su localhost è http(s)://055b3480.ngrok.io . Questo è tutto ciò che dobbiamo sapere per impostare l'ascoltatore.
Sottoscrizione alle notifiche
Il nostro ultimo passo è creare webhook per la nostra applicazione, che creerà notifiche quando determinati eventi si verificano con pagamenti, rimborsi, ecc. Sulla nostra app. Abbiamo solo bisogno di creare questi webhook una volta per associarli all'applicazione, in modo che non debbano essere eseguiti ogni volta che vuoi usarli.
Per prima cosa impostiamo l'ambiente PayPal aggiungendo il requisito per l'SDK del Nodo PayPal, il nostro ID cliente / segreto dalla creazione di un'applicazione, quindi configurando l'ambiente per 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
});
Successivamente, impostiamo la struttura JSON per i nostri webhook. webhooks contiene due informazioni, l' url cui devono essere inviati tutti gli eventi webhook e gli event_types cui vogliamo iscriversi.
Nel caso di questo esempio, l' url è impostato sul nostro URL live ngrok e gli eventi che stiamo ascoltando sono casi in cui i pagamenti sono completati o negati.
Per un elenco completo dei potenziali eventi, consultare https://developer.paypal.com/docs/integration/direct/rest-webhooks-overview/#event-type-support .
Infine, passiamo l'oggetto webhooks alla chiamata per creare i webhooks, notification.webhook.create . In caso di esito positivo, PayPal invierà notifiche all'endpoint specificato, che è in esecuzione su 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);
}
});
Una volta emesso un pagamento utilizzando tali credenziali dell'applicazione, le informazioni sullo stato del pagamento verranno inviate all'endpoint che configuriamo.
Un esempio del corpo POST che PayPal invia come notifica potrebbe essere simile al seguente, che è stato inviato dopo un pagamento PayPal andato a buon fine:
{
"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"
}
]
}
Aggiornamento di un webhook con un nuovo URL (esempio di nodo)
Questo esempio ti mostrerà come aggiornare un URL di inoltro webhook esistente (dove le notifiche devono essere POSTATE a). Per eseguirlo, dovresti avere l'ID restituito da PayPal quando hai creato per la prima volta i tuoi webhook.
Innanzitutto, aggiungi l'SDK PayPal e configura l'ambiente (sandbox in basso).
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
});
Quindi, imposta la struttura JSON e i dettagli del webhook. Assegna prima l'ID del tuo webhook a webhookId . Successivamente, nel webhookUpdate , specificare un'operazione di sostituzione, impostare il path su /url per specificare un aggiornamento di tale risorsa e fornire il nuovo URL per sostituirlo con il value inferiore.
var webhookId = "YOUR WEBHOOK ID";
var webhookUpdate = [{
"op": "replace",
"path": "/url",
"value": "https://64fb54a2.ngrok.io"
}];
Infine, chiama notification.webhook.replace(...) , passando in webhookId e webhookUpdate .
paypal.notification.webhook.replace (webhookId, webhookUpdate, function (err, res) {if (err) {console.log (err); gira err;} else {console.log (JSON.stringify (res));} });
Se tutto riesce, un oggetto simile al seguente dovrebbe essere restituito da PayPal e, nel caso di questo campione, visualizzato nel terminale con le informazioni appena aggiornate.
{
"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
}
