수색…


매개 변수

매개 변수 세부
Express 애플리케이션 참조
bodyParser JSON 인코딩 된 본문을 사용하기위한 body-parser 패키지 참조
clientId 애플리케이션 클라이언트 ID (OAuth 2 자격증 명)
http 서버를 실행하기위한 http 패키지
페이팔 PayPal 노드 SDK 참조 객체
비밀 애플리케이션 비공개 (OAuth 2 자격증 명)
webhookId 수정할 웹 훅의 ID입니다.
webhookUpdate 업데이트 할 Webhook 세부 정보를 포함하는 JSON 객체

비고

이 샘플은 PayPal 웹 훅을 사용하여 애플리케이션 및 지불에 대한 이벤트 모니터링을 제공하는 방법의 실제 예를 다루고 있습니다.

ngrok 및 Express (노드)를 사용하여 샌드 박스 Webhooks 테스트

이 예제에서는 sandbox에서 webhook 알림을 테스트하고, ngrok 를 사용하여 localhost에서 실행중인 Node HTTP Listener에 대한 터널을 인터넷에 제공합니다. 이 예제에서는 Node를 사용하여 결제 이벤트 (예 : 결제)에 대한 알림 웹 훅을 설정 한 다음 webhook 이벤트에서 들어오는 HTTP POST 메시지를 수신하도록 서버를 설정합니다.

이러한 일이 발생하도록하기 위해 여기에 따라야 할 몇 가지 단계가 있습니다.

  1. PayPal에서 알림이 될 webhooks에서 들어오는 POST 트래픽을 수신하고 localhost에서 수신 대기하는 간단한 서버를 설정합니다.
  2. 그런 다음 ngrok를 사용하여 localhost에서 인터넷으로 터널을 제공하면 PayPal에서 알림을 게시 할 수 있습니다.
  3. 마지막으로 2 단계에서 공개 한 ngrok URI를 제공하여 추적하려는 웹 훅 이벤트에 제공된 애플리케이션의 자격 증명 (제공된 자격 증명을 기반으로)을 구독하십시오.

Webhook Listener 만들기

우리가해야 할 첫 번째 일은 청취자를 만드는 것입니다. 청취자로 시작하는 이유는 웹 후크를 만들거나 업데이트 할 때 웹 후크에 제공하기 위해 ngrok 라이브 URL이 필요하기 때문입니다.

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 포트 3001에서 수신 대기하도록 설정합니다. 이제 트래픽 수신을 시작하기 위해 해당 스크립트를 실행하십시오.

ngrok를 사용하여 리스너를 인터넷에 노출시키기

localhost : 3001에 설정된 리스너를 사용하여 다음 작업은 해당 스크립트를 인터넷에 노출 시켜서 ngrok의 작업 인 트래픽을 보낼 수 있도록하는 것입니다.

터미널 창에서 다음 명령을 실행하십시오.

ngrok http 3001

그러면 포트 3001에서 로컬 호스트에 대한 라이브 터널을 제공하는 프로세스가 시작되고 한 번 실행 된 다음 정보가 제공됩니다.

여기에 이미지 설명을 입력하십시오.

우리가 볼 수 있듯이, 우리가 localhost에서 실행중인 청취자에게 PayPal 웹 훅을 가리 키기 위해 사용할 수있는 실제 주소는 http(s)://055b3480.ngrok.io 입니다. 청취자를 설치하기 위해 알아야 할 모든 것입니다.

알림 구독

마지막 단계는 애플리케이션 용 웹 훅 (webhook)을 만드는 것입니다.이 앱은 앱에 대한 지불, 환불 등 특정 이벤트가 발생할 때 알림을 생성합니다. 이러한 webhook을 응용 프로그램에 바인딩하기 위해 한 번만 만들어야하므로 사용할 때마다 실행할 필요가 없습니다.

먼저 PayPal 노드 SDK에 대한 요구 사항, 클라이언트 ID / 암호가 애플리케이션 생성에서 추가 된 다음 샌드 박스 환경을 구성하여 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
});

다음으로 webhook을위한 JSON 구조를 설정합니다. webhooks 에는 두 가지 정보, 즉 모든 webhook 이벤트를 보내야하는 url 과 우리가 구독하고자하는 event_types 가 들어 있습니다.

이 샘플의 경우 url 은 Google의 라이브 URL로 설정되며, 수신 대기중인 이벤트는 지불이 완료되거나 거부되는 경우입니다.

전체 이벤트 목록은 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);
    }
});

해당 응용 프로그램 자격 증명을 사용하여 지불을하면 지불 상태에 대한 정보가 설정 한 끝점으로 전송됩니다.

PayPal에서 알림으로 전송하는 POST 본문의 예는 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로 Webhook 업데이트 (노드 샘플)

이 샘플에서는 기존 webhook 전달 URL (알림을 게시 할 위치)을 업데이트하는 방법을 보여줍니다. 이를 실행하려면 웹 후크를 처음 만들 때 PayPal에서 제공 한 ID가 있어야합니다.

먼저 PayPal SDK를 추가하고 환경을 구성하십시오 (아래 샌드 박스).

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 구조와 webhook 세부 정보를 설정합니다. 먼저 webhook의 ID를 webhookId 지정하십시오. 그런 다음 webhookUpdate 에서 replace 작업을 지정하고 path/url 로 설정하여 해당 자원의 업데이트를 지정하고 새로운 URL을 제공하여 valuewebhookUpdate .

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

마지막으로 webhookIdwebhookUpdate 전달하여 notification.webhook.replace(...) 호출합니다.

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