Szukaj…


Parametry

Parametr Detale
app Nasz numer referencyjny aplikacji Express
bodyParser Odwołanie do pakietu analizatora treści do pracy z obiektami zakodowanymi w JSON
Identyfikator klienta Identyfikator klienta aplikacji (poświadczenia OAuth 2)
http Pakiet http do uruchomienia serwera
paypal Obiekt referencyjny SDK węzła PayPal
sekret Tajny wniosek (poświadczenia OAuth 2)
webhookId Identyfikator haka, który ma zostać zmodyfikowany
webhookUpdate Obiekt JSON zawierający szczegóły elementu webhook do zaktualizowania

Uwagi

Przykłady te obejmują robocze przykłady użycia haczyków internetowych PayPal do monitorowania zdarzeń związanych z aplikacją i płatnościami.

Testowanie piaskowników Webhooks za pomocą ngrok i Express (węzeł)

W tym przykładzie przyjrzymy się testowaniu powiadomień z haka w piaskownicy, używając ngrok do zapewnienia tunelu dla naszego nasłuchującego HTTP Node, działającego na localhost, w Internecie. W tym przykładzie użyjemy Węzła do skonfigurowania haków powiadomień dla zdarzeń płatności (takich jak dokonywana płatność), a następnie skonfigurujemy serwer tak, aby nasłuchiwał przychodzących wiadomości HTTP POST ze zdarzeń haka.

Aby to zrobić, musimy wykonać kilka kroków:

  1. Skonfiguruj prosty serwer do nasłuchiwania przychodzącego ruchu POST z haków internetowych, które będą powiadomieniem z PayPal, i zacznij nasłuchiwać na localhost.
  2. Następnie użyj ngrok, aby udostępnić tunel z hosta lokalnego do Internetu, aby PayPal mógł przesyłać powiadomienia za pośrednictwem.
  3. Na koniec zasubskrybuj naszą aplikację (na podstawie podanych poświadczeń) do zdarzeń haka, które chcemy śledzić, podając publiczny identyfikator URI ngrok od kroku 2.

Tworzenie detektora Webhooks

Pierwszą rzeczą, którą musimy zrobić, to stworzyć detektora. Powodem, dla którego zaczynamy od nasłuchiwania, jest to, że potrzebujemy aktywnego adresu URL ngrok do dostarczania haków internetowych podczas ich tworzenia lub aktualizacji.

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

Nasz słuchacz jest prostą drogą korzystającą z Express. Nasłuchujemy przychodzącego ruchu POST, a następnie wypluwamy ciało POST do konsoli. Możemy to wykorzystać, aby zrobić, co zechcesz ze słuchaczem, gdy się pojawi.

Kiedy tworzymy serwer HTTP na końcu, ustawiamy go tak, aby nasłuchiwał na porcie lokalnym hosta 3001. Uruchom teraz ten skrypt, aby zacząć nasłuchiwać ruchu.

Używanie ngrok do ujawnienia nasłuchiwacza w Internecie

Po skonfigurowaniu nasłuchiwania na localhost: 3001, naszym następnym zadaniem jest udostępnienie tego skryptu w Internecie, aby ruch mógł być do niego wysyłany, co jest zadaniem ngrok.

Uruchom następujące polecenie w oknie terminala:

ngrok http 3001

To zainicjuje proces dostarczania tunelu na żywo dla hosta lokalnego na porcie 3001 i zapewni następujące informacje po uruchomieniu:

wprowadź opis zdjęcia tutaj

Jak widzimy, adres na żywo, którego możemy użyć, aby skierować hak internetowy PayPal do naszego działającego nasłuchiwania na localhost, to http(s)://055b3480.ngrok.io . To wszystko, co musimy wiedzieć, aby skonfigurować słuchacza.

Subskrybowanie powiadomień

Naszym ostatnim krokiem jest utworzenie haczyków internetowych dla naszej aplikacji, które będą tworzyć powiadomienia o określonych zdarzeniach związanych z płatnościami, zwrotami itp. W naszej aplikacji. Musimy utworzyć te haki internetowe tylko raz, aby powiązać je z aplikacją, więc nie trzeba ich uruchamiać za każdym razem, gdy chcesz z nich korzystać.

Najpierw konfigurujemy środowisko PayPal, dodając wymaganie do zestawu SDK węzła PayPal, naszego identyfikatora / hasła klienta podczas tworzenia aplikacji, a następnie konfigurując środowisko dla piaskownicy.

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

Następnie skonfigurowaliśmy strukturę JSON dla naszych haków internetowych. webhooks zawiera dwa kawałki informacji, url , że wszystkie zdarzenia webhook powinna być wysłana do, a event_types które chcemy subskrybować.

W przypadku tej próbki url jest ustawiony na nasz aktualny URL ngrok, a zdarzenia, których oczekujemy, to przypadki, w których płatności zostały zakończone lub odrzucone.

Aby uzyskać pełną listę potencjalnych zdarzeń, zobacz https://developer.paypal.com/docs/integration/direct/rest-webhooks-overview/#event-type-support .

Wreszcie mijamy webhooks obiektu do wezwania do stworzenia webhooks, notification.webhook.create . Jeśli się powiedzie, PayPal wyśle powiadomienia do określonego przez nas punktu końcowego, który jest uruchomiony na 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);
    }
});

Po zrealizowaniu płatności przy użyciu poświadczeń aplikacji informacje o stanie płatności zostaną wysłane do skonfigurowanego punktu końcowego.

Przykład organu POST, który PayPal wysyła jako powiadomienie, może wyglądać następująco, który został wysłany po pomyślnej płatności PayPal:

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

Aktualizowanie elementu Webhook za pomocą nowego adresu URL (przykładowy węzeł)

W tym przykładzie pokazano, jak zaktualizować istniejący adres URL przekierowania elementu webhook (do którego powiadomień należy wysłać wiadomość POST). Aby to zrobić, powinieneś otrzymać identyfikator dostarczony przez PayPal przy pierwszym tworzeniu haków internetowych.

Najpierw dodaj zestaw SDK PayPal i skonfiguruj środowisko (piaskownica poniżej).

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

Następnie skonfiguruj strukturę JSON i szczegóły elementu webhook. Najpierw przypisz identyfikator haka do webhookId . Następnie w webhookUpdate określ operację zastępowania, ustaw path na /url aby określić aktualizację tego zasobu i podaj nowy adres URL, aby zastąpić go value niedostateczną.

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

Na koniec wywołaj notification.webhook.replace(...) , przekazując webhookId i webhookUpdate .

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

Jeśli wszystko się powiedzie, obiekt podobny do następującego powinien zostać dostarczony z PayPala i, w przypadku tej próbki, wyświetlony w terminalu z nowo zaktualizowanymi informacjami.

{  
    "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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow