PAYMENT.SALE.COMPLETED webhook 事件中的 PayPal 订阅 ID 和交易 ID 在哪里?如何获取他们的详细信息?

时间:2021-03-10 19:48:56

标签: paypal

我通过 php 使用 PayPal 订阅 API。

到目前为止,我知道付款成功后会触发 PAYMENT.SALE.COMPLETED 事件。但该对象只包含一个计费协议 ID,似乎与订阅无关。如何获取有关客户和付款的更多详细信息?

示例 webhook 的内容


{
    "id": "WH-1J525465EH157100Y-81K24252LY536784P",
    "create_time": "2021-03-10T18:22:33.292Z",
    "resource_type": "sale",
    "event_type": "PAYMENT.SALE.COMPLETED",
    "summary": "Payment completed for EUR 5.0 EUR",
    "resource": {
        "billing_agreement_id": "I-8XRLDA4MNEW3",
        "amount": {
            "total": "5.00",
            "currency": "EUR",
            "details": {
                "subtotal": "5.00"
            }
        },
        "payment_mode": "INSTANT_TRANSFER",
        "update_time": "2021-03-10T18:22:13Z",
        "create_time": "2021-03-10T18:22:13Z",
        "protection_eligibility_type": "ITEM_NOT_RECEIVED_ELIGIBLE,UNAUTHORIZED_PAYMENT_ELIGIBLE",
        "transaction_fee": {
            "currency": "EUR",
            "value": "0.45"
        },
        "protection_eligibility": "ELIGIBLE",
        "links": [
            {
                "method": "GET",
                "rel": "self",
                "href": "https://api.sandbox.paypal.com/v1/payments/sale/1P642136UK709905M"
            },
            {
                "method": "POST",
                "rel": "refund",
                "href": "https://api.sandbox.paypal.com/v1/payments/sale/1P642136UK709905M/refund"
            }
        ],
        "id": "1P642136UK709905M",
        "state": "completed",
        "invoice_number": ""
    },
    "status": "SUCCESS",
    "transmissions": [
        {
            "webhook_url": "https://musily.de/payment/webhook/paypal.php",
            "http_status": 200,
            "reason_phrase": "HTTP/1.1 200 Connection established",
            "response_headers": {
                "Accept-Ranges": "none",
                "Server": "Apache/2.4.46 (Unix)",
                "Cache-Control": "max-age=172800",
                "Expires": "Fri, 12 Mar 2021 18:23:16 GMT",
                "Content-Length": "65",
                "Date": "Wed, 10 Mar 2021 18:23:16 GMT",
                "X-Powered-By": "PHP/7.3.27",
                "Content-Type": "text/html"
            },
            "transmission_id": "a7472af0-81cd-11eb-aacd-47b3747d966f",
            "status": "SUCCESS",
            "timestamp": "2021-03-10T18:23:03Z"
        }
    ],
    "links": [
        {
            "href": "https://api.sandbox.paypal.com/v1/notifications/webhooks-events/WH-1J525465EH157100Y-81K24252LY536784P",
            "rel": "self",
            "method": "GET",
            "encType": "application/json"
        },
        {
            "href": "https://api.sandbox.paypal.com/v1/notifications/webhooks-events/WH-1J525465EH157100Y-81K24252LY536784P/resend",
            "rel": "resend",
            "method": "POST",
            "encType": "application/json"
        }
    ],
    "event_version": "1.0"
}

2 个答案:

答案 0 :(得分:1)

<块引用>
    "billing_agreement_id": "I-8XRLDA4MNEW3",

这就是您订阅的 ID。

<块引用>
    "id": "1P642136UK709905M",

那就是您的 PayPal 交易/销售/收款 ID。

<块引用>
    "links": [
       {
           "method": "GET",
           "rel": "self",
           "href": "https://api.sandbox.paypal.com/v1/payments/sale/1P642136UK709905M"
       },
       {

了解如何获取有关销售的详细信息(v2/payments/captures API 也可能有效,不确定)

答案 1 :(得分:0)

正如@Preston-PHX 所说的 billing_agreement_id 是订阅 ID,但如果您需要获取订阅名称和类似的详细信息:

  1. 获取 billing_agreement_id 并调用订阅 API,回复将是客户的详细信息和订阅的小细节:

function getsubdetails($id)
                {  
                $header = array(); 
                $header[] = 'Content-type: application/json';
                $header[] = 'Authorization: Bearer '.$this->token;
                $url = 'https://api-m.sandbox.paypal.com/v1/billing/subscriptions/'.$id;
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
                curl_setopt($ch, CURLOPT_URL,$url); 
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
                $server_output = curl_exec($ch);
                return $server_output;
                 curl_close ($ch);
                 }   
  1. 获取 plan_id 并调用计划 api,回复将是订阅的所有详细信息:
   public function getplandetails($id)
    {
     
    $header = array(); 
    $header[] = 'Content-type: application/json';
    $header[] = 'Authorization: Bearer '.$this->token;
    
    
        
    $url = 'https://api-m.sandbox.paypal.com/v1/billing/plans/'.$id;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $server_output = curl_exec($ch);
    return $server_output;
    
    curl_close ($ch);
    
    
    }

完整代码:

 include 'paypal.php'; //contains above code inside Paypal class
     $paypal = new Paypal;
     $paypal->setcredentials($clientid,$secret); //setting api credentials, create this function near above code
     $paypal->gettoken(); // initiating token, create this function near above code

     $subdetails = $paypal->getsubdetails($planid); //sending billing_agreement_id
     $subdetails2 = json_decode($subdetails,true);
     $planid = $subdetails2['plan_id']; //received plan_id
     $plandetails = $paypal->getplandetails($planid); // sending it to get subscription name
     $plandetails2 = json_decode($plandetails, true);
     $this->planname = $plandetails2['name'];