Recherche…


Paramètres

Paramètre Détails
app Notre référence d'application express
bodyparser La référence du package body-parser pour travailler avec des corps codés JSON
identité du client L'ID du client d'application (informations d'identification OAuth 2)
http Le package http pour exécuter le serveur
Pay Pal Objet de référence PayPal Node SDK
secret Le secret de l'application (informations d'identification OAuth 2)
webhookId ID du webhook à modifier
webhookUpdate Objet JSON contenant les détails du webhook à mettre à jour

Remarques

Ces exemples couvrent des exemples pratiques d'utilisation des Webhooks de PayPal pour assurer la surveillance des événements de votre application et de vos paiements.

Test des Webhooks Sandbox avec ngrok et Express (Node)

Dans cet exemple, nous allons tester les notifications Webhook dans Sandbox, en utilisant ngrok pour fournir un tunnel pour notre écouteur HTTP Node, exécuté sur localhost, sur Internet. Pour cet exemple, nous allons utiliser Node pour configurer les webhooks de notification pour les événements de paiement (comme un paiement en cours), puis configurer le serveur pour qu'il écoute les messages HTTP POST entrants provenant des événements Webhook.

Il y a quelques étapes que nous allons suivre ici pour que cela se produise:

  1. Configurez un serveur simple pour écouter le trafic POST entrant depuis les webhooks, qui sera la notification de PayPal, et commencez à écouter localhost.
  2. Utilisez ensuite ngrok pour fournir un tunnel à partir de localhost vers Internet afin que PayPal puisse envoyer une notification via.
  3. Enfin, abonnez-vous à notre application (basée sur les informations d'identification fournies) pour les événements Webhook que nous voulons suivre, en fournissant l'URI public ngrok à partir de l'étape 2.

Création d'un écouteur Webhooks

La première chose à faire est de créer l'auditeur. La raison pour laquelle nous commençons avec l'auditeur est que nous avons besoin de l'URL en direct ngrok à fournir aux webhooks lorsque nous les créons ou les mettons à jour.

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

Notre auditeur est un itinéraire simple utilisant Express. Nous écoutons tout trafic POST entrant, puis crachons le corps POST sur la console. Nous pouvons l'utiliser pour faire ce que nous voulons avec l'auditeur quand il entre en jeu.

Lorsque nous créons le serveur HTTP à la fin, nous le configurons pour écouter sur le port 300 de l'hôte local. Exécutez ce script maintenant pour commencer à écouter le trafic.

Utilisation de ngrok pour exposer le récepteur à Internet

Avec l'écouteur configuré sur localhost: 3001, notre tâche suivante consiste à exposer ce script à Internet, afin que le trafic puisse lui être envoyé, ce qui est le travail de ngrok.

Exécutez la commande suivante depuis une fenêtre de terminal:

ngrok http 3001

Cela lancera le processus de fourniture d'un tunnel en direct pour localhost sur le port 3001 et fournira les informations suivantes une fois exécutées:

entrer la description de l'image ici

Comme nous pouvons le constater, l’adresse en direct que nous pouvons utiliser pour pointer l’accès payant à notre écouteur en cours sur localhost est http(s)://055b3480.ngrok.io . C'est tout ce que nous devons savoir pour configurer l'auditeur.

S'abonner aux notifications

Notre dernière étape consiste à créer des webhooks pour notre application, qui créeront des notifications lorsque certains événements se produiront avec des paiements, des remboursements, etc. sur notre application. Nous avons seulement besoin de créer ces webhooks une fois pour les lier à l'application, ils n'ont donc pas besoin d'être exécutés chaque fois que vous souhaitez les utiliser.

Tout d'abord, nous avons configuré l'environnement PayPal en ajoutant l'exigence pour le SDK Node PayPal, notre ID / secret client de créer une application, puis en configurant l'environnement pour 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
});

Ensuite, nous avons configuré la structure JSON pour nos webhooks. webhooks contient deux informations, l' url laquelle tous les événements webhook doivent être envoyés et les event_types auxquels nous voulons nous abonner.

Dans le cas de cet exemple, l' url est définie sur notre URL ngrok live, et les événements que nous écoutons sont des cas où les paiements sont terminés ou refusés.

Pour une liste complète des événements potentiels, voir https://developer.paypal.com/docs/integration/direct/rest-webhooks-overview/#event-type-support .

Enfin, nous passons l'objet webhooks dans l'appel pour créer les webhooks, notification.webhook.create . En cas de succès, PayPal enverra des notifications au terminal que nous avons spécifié, qui s'exécute sur 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);
    }
});

Une fois que nous avons émis un paiement à l'aide de ces informations d'identification, les informations sur l'état du paiement seront envoyées au terminal que nous avons configuré.

Un exemple du corps POST que PayPal envoie en tant que notification pourrait ressembler à ceci, qui a été envoyé après un paiement PayPal réussi:

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

Mise à jour d'un Webhook avec une nouvelle URL (exemple de noeud)

Cet exemple va vous montrer comment mettre à jour une URL de redirection Webhook existante (où les notifications doivent être postées). Pour ce faire, vous devez avoir l'ID fourni par PayPal lors de la création de vos webhooks.

Tout d'abord, ajoutez le SDK PayPal et configurez l'environnement (sandbox ci-dessous).

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

Ensuite, configurez la structure JSON et les détails du Webhook. Attribuez d'abord l'identifiant de votre webhook à webhookId . Ensuite, dans webhookUpdate , spécifiez une opération replace, définissez le path vers /url pour spécifier une mise à jour de cette ressource et indiquez la nouvelle URL pour la remplacer par une value .

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

Enfin, appelez notification.webhook.replace(...) en transmettant webhookId et webhookUpdate .

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

Si tout se passe bien, un objet similaire à celui-ci doit être fourni par PayPal et, dans le cas de cet exemple, affiché dans le terminal avec les informations nouvellement mises à jour.

{  
    "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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow