Sök…


parametrar

Parameter detaljer
app Vår Express-applikationsreferens
bodyParser Body-parser-paketreferensen för att arbeta med JSON-kodade kroppar
Klient ID Applikationsklient-ID (OAuth 2-referenser)
http Http-paketet för att köra servern
paypal PayPal-nod SDK-referensobjektet
hemlighet Ansökningshemligheten (OAuth 2-referenser)
webhookId ID för webbhaken som ska ändras
webhookUpdate JSON-objekt som innehåller webhook-detaljerna som ska uppdateras

Anmärkningar

Dessa prover täcker fungerande exempel på hur du använder PayPal-webhooks för att tillhandahålla händelseövervakning för din ansökan och betalningar.

Testa Sandbox Webhooks med ngrok och Express (Node)

I det här exemplet kommer vi att titta på att testa meddelanden om webhook i sandlådan, använda ngrok för att tillhandahålla en tunnel för vår Node HTTP-lyssnare, som körs på localhost, till internet. I det här exemplet kommer vi att använda Node för att ställa in meddelandewebhooks för betalningshändelser (till exempel en betalning som görs) och sedan ställa in servern för att lyssna på inkommande HTTP POST-meddelanden från händelserna på webbhaken.

Det är några steg som vi kommer att följa här för att göra detta:

  1. Ställ in en enkel server för att lyssna på inkommande POST-trafik från webhooks, vilket kommer att vara meddelandet från PayPal, och börja lyssna på localhost.
  2. Använd sedan ngrok för att tillhandahålla en tunnel från localhost till internet så att PayPal kan skicka meddelanden igenom.
  3. Slutligen, prenumerera vår ansökan (baserad på de uppgifter som tillhandahålls) för webbhookhändelser som vi vill spåra, vilket ger den offentliga ngrok URI från steg 2.

Skapa en webhooks-lyssnare

Det första vi behöver göra är att skapa lyssnaren. Anledningen till att vi börjar med lyssnaren är för att vi behöver den ngrok live-URL för att tillhandahålla webhooks när vi skapar eller uppdaterar dem.

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');
});

Vår lyssnare är en enkel rutt med Express. Vi lyssnar på inkommande POST-trafik och spottar sedan ut POST-kroppen till konsolen. Vi kan använda detta för att göra vad vi vill med lyssnaren när det kommer in.

När vi skapar HTTP-servern i slutet ställer vi in den för att lyssna på localhost-port 3001. Kör det skriptet nu för att börja lyssna på trafik.

Använda ngrok för att exponera lyssnaren för Internet

Med lyssnaren inställd på localhost: 3001 är vårt nästa jobb att exponera det skriptet på internet, så att trafik kan skickas till det, vilket är jobbet för ngrok.

Kör följande kommando från ett terminalfönster:

ngrok http 3001

Detta kommer att initiera processen för att tillhandahålla en levande tunnel för localhost på hamn 3001, och kommer att tillhandahålla följande information en gång:

ange bildbeskrivning här

Som vår kan se, är den direkta adressen som vi kan använda för att peka PayPal-webhooken till vår körande lyssnare på localhost http(s)://055b3480.ngrok.io . Det är allt vi behöver veta för att ställa in lyssnaren.

Prenumerera på aviseringar

Vårt sista steg är att skapa webhooks för vår applikation, vilket kommer att skapa meddelanden när vissa händelser inträffar med betalningar, återbetalningar osv i vår app. Vi behöver bara skapa dessa webhooks en gång för att binda dem till applikationen, så de behöver inte köras varje gång du vill använda dem.

Först skapar vi PayPal-miljön genom att lägga till kravet för PayPal Node SDK, vårt klient-ID / hemlighet från att skapa ett program, sedan konfigurera miljön för sandlåda.

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
});

Därefter ställer vi in JSON-strukturen för våra webhooks. webhooks innehåller två informationer, url som alla webbhookhändelser ska skickas till och event_types som vi vill prenumerera på.

När det gäller det här exemplet, är url inställd på vår ngrok live-URL, och händelserna vi lyssnar på är fall där betalningar slutförs eller nekas.

För en fullständig lista över potentiella händelser, se https://developer.paypal.com/docs/integration/direct/rest-webhooks-overview/#event-type-support .

Slutligen webhooks vi webhooks objektet i samtalet för att skapa webhooks, notification.webhook.create . Om det lyckas skickar PayPal aviseringar till den slutpunkt som vi angav, som körs på 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);
    }
});

När vi har utfärdat en betalning med dessa ansökningsuppgifter skickas information om betalningstillståndet till slutpunkten som vi skapade.

Ett exempel på POST-organet som PayPal skickar som ett meddelande kan se ut som följande, som skickades efter en framgångsrik PayPal-betalning:

{
  "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"
    }
  ]
}

Uppdatera en webhook med en ny URL (nodprov)

Det här exemplet visar hur du uppdaterar en befintlig URL för vidarebefordran av webhook (där meddelandena ska skickas till). För att köra detta bör du ha ID: t tillbaka från PayPal när du först skapade dina webhooks.

Lägg först till PayPal SDK och konfigurera miljön (sandlåda nedan).

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
});

Ställ sedan upp JSON-strukturen och webhook-detaljerna. Tilldela ID för din webhook till webhookId först. Därefter, i webhookUpdate , ange en operation för att ersätta, ställa in path till /url att ange en uppdatering av den resursen och ge den nya URL-adressen för att ersätta den med value .

var webhookId = "YOUR WEBHOOK ID";
var webhookUpdate = [{
    "op": "replace",
    "path": "/url",
    "value": "https://64fb54a2.ngrok.io"
}];

Slutligen ring notification.webhook.replace(...) och passerar in webhookId och webhookUpdate .

paypal.notification.webhook.replace (webhookId, webhookUpdate, function (err, res) {if (err) {console.log (err); kasta fel;} annars {console.log (JSON.stringify (res));} });

Om allt lyckas bör ett objekt som liknar följande tillhandahållas tillbaka från PayPal och, i fallet med detta prov, visas i terminalen med den nyligen uppdaterade informationen.

{  
    "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
}


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow