Поиск…


параметры

параметр подробности
приложение Наша экспресс-ссылка на приложение
bodyParser Ссылка на пакет body-parser для работы с закодированными органами JSON
ID клиента Идентификатор клиента приложения (учетные данные OAuth 2)
HTTP Пакет http для запуска сервера
PayPal Опорный объект SDK SDK
секрет Секрет приложения (учетные данные OAuth 2)
webhookId ID веб-камеры, подлежащей изменению
webhookUpdate Объект JSON, содержащий сведения о веб-узле, которые необходимо обновить

замечания

Эти примеры охватывают рабочие примеры того, как использовать веб-камеры PayPal для мониторинга событий для вашего приложения и платежей.

Тестирование веб-кнопок Sandbox с помощью ngrok и Express (Node)

В этом примере мы рассмотрим тестирование уведомлений webhook в песочнице, используя ngrok, чтобы предоставить туннель для нашего HTTP-прослушивателя Node, работающего на localhost, в Интернете. В этом примере мы собираемся использовать Node для создания веб-узлов уведомлений о событиях оплаты (например, сделанного платежа), а затем настроить сервер для прослушивания входящих HTTP-сообщений POST из событий webhook.

Мы предпримем несколько шагов, чтобы это произошло:

  1. Настройте простой сервер, чтобы прослушивать входящий трафик POST с веб-узлов, который будет являться уведомлением от PayPal, и начать прослушивание на localhost.
  2. Затем используйте ngrok для предоставления туннеля из локального хоста в Интернет, чтобы PayPal мог отправлять уведомления через.
  3. Наконец, подпишитесь на наше приложение (на основе предоставленных учетных данных) на события веб-хоста, которые мы хотим отслеживать, предоставив публичный URI ngrok с шага 2.

Создание прослушивателя Webhooks

Первое, что нам нужно сделать, это создать слушателя. Причина, по которой мы начинаем с слушателя, заключается в том, что нам нужен прямой URL-адрес ngrok, чтобы предоставлять веб-узлы, когда мы создаем или обновляем их.

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

Наш слушатель - это простой маршрут, использующий Express. Мы слушаем любой входящий трафик POST, а затем выставляем тело POST на консоль. Мы можем использовать это, чтобы делать все, что захочет, с слушателем, когда оно появится.

Когда мы создаем HTTP-сервер в конце, мы настроили его на прослушивание на localhost port 3001. Запустите этот скрипт, чтобы начать прослушивание трафика.

Использование ngrok для размещения слушателя в Интернете

Когда слушатель настроен на localhost: 3001, наша следующая работа заключается в том, чтобы открыть этот скрипт в Интернете, чтобы трафик мог быть отправлен на него, что является задачей ngrok.

Выполните следующую команду из окна терминала:

ngrok http 3001

Это запустит процесс предоставления живого туннеля для локального хоста на порту 3001 и предоставит следующую информацию после запуска:

введите описание изображения здесь

Как мы видим, живым адресом, который мы можем использовать, чтобы указать веб-хост PayPal на наш текущий прослушиватель на localhost, является http(s)://055b3480.ngrok.io . Это все, что нам нужно знать, чтобы настроить слушателя.

Подписка на уведомления

Нашим последним шагом является создание веб-узлов для нашего приложения, которое будет создавать уведомления, когда определенные события происходят с платежами, возмещениями и т. Д. В нашем приложении. Нам нужно только создать эти webhooks один раз, чтобы связать их с приложением, поэтому их не нужно запускать каждый раз, когда вы хотите их использовать.

Сначала мы настраиваем среду PayPal, добавляя требование к SDK PayPal Node, нашему идентификатору клиента / секретарю от создания приложения, а затем настраиваем среду для песочницы.

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

Затем мы создали структуру JSON для наших веб-узлов. webhooks содержит две части информации, url который должны быть отправлены все события веб-хоста, и event_types которые мы хотим подписаться.

В случае с этим образцом url установлен на наш прямой URL-адрес ngrok, а события, которые мы слушаем, - это случаи, когда платежи завершены или отклонены.

Полный список потенциальных событий см. На странице https://developer.paypal.com/docs/integration/direct/rest-webhooks-overview/#event-type-support .

Наконец, мы передаем объект webhooks в вызов для создания webhooks, notification.webhook.create . В случае успеха PayPal отправит уведомления конечной точке, которую мы указали, которая работает на 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);
    }
});

После того, как мы произведем платеж с использованием этих учетных данных, информация о состоянии платежа будет отправлена ​​в конечную точку, которую мы установили.

Пример органа POST, который PayPal отправляет в качестве уведомления, может выглядеть следующим образом, которое было отправлено после успешного платежа 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"
    }
  ]
}

Обновление веб-узла с новым URL-адресом (пример узла)

В этом примере вам будет показано, как обновить существующий URL-адрес пересылки webhook (где уведомления должны быть отправлены POSTED). Чтобы запустить это, вы должны иметь ID, предоставленный PayPal, когда вы впервые создали свои веб-камеры.

Сначала добавьте SDK PayPal и настройте среду (песочница ниже).

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

Затем настройте структуру JSON и данные веб-узла. Сначала назначьте идентификатор для своего веб-чек в webhookId . Затем в webhookUpdate укажите операцию замены, укажите path /url для указания обновления этого ресурса и укажите новый URL-адрес, чтобы заменить его value .

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

Наконец, вызовите notification.webhook.replace(...) , передав в webhookId и webhookUpdate .

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

Если все удастся, то из PayPal должен быть возвращен объект, аналогичный приведенному ниже, и, в случае этого примера, отображаться в терминале с обновленной информацией.

{  
    "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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow