【问题标题】:Get customer details after transaction交易后获取客户详细信息
【发布时间】:2016-10-24 18:12:42
【问题描述】:

我正在努力在 Paypal NVP 和 REST API 之间做出选择。

REST API 似乎更新更好,但我找不到在交易发生后获取客户详细信息的方法。

基本上,我想为定期付款设置一个计费计划,然后通过 API 获取客户详细信息,这样他们就不必通过我的网站输入这些信息。

Paypal Express 结帐似乎是我应该在这里使用的。

NVP API 提供了一个GetExpressCheckoutDetails 方法来获取这些详细信息。

我没有为 REST API 找到类似的东西。

由于 REST API 似乎也通过 Express Checkout,因此应该有解决方案。

激活计费协议后如何获取客户详细信息?

【问题讨论】:

    标签: paypal paypal-subscriptions paypal-rest-sdk


    【解决方案1】:

    一个月前我遇到了同样的问题,在阅读了文档后,目前无法使用 REST API 完成此操作。如果有办法,则没有记录。

    我发现这样做的唯一方法是使用 NVP API 和可能的 SOAP API。 NVP API 将返回您想要的大部分字段,但如果您为交易存储了自定义字段,它只会为您提供 3 个自定义字段,而不是全部(奇怪)。

    我没有尝试过 NVP 方法GetExpressCheckoutDetails 但我使用了GetTransactionDetails 方法。它会给你回交易细节。它返回一个您必须解析的文本块。每个字段都经过 URL 编码并由 & 号分隔。下面是一个 PHP 示例:

    <?php
    
    // Get cURL resource
    $ch = curl_init();
    
    // Set url
    curl_setopt($ch, CURLOPT_URL, 'https://api-3t.paypal.com/nvp/');
    
    // Set method
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    
    // Set options
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    
    // Set headers
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Content-Type: application/x-www-form-urlencoded; charset=utf-8",
        ]
    );
    // Create body
    $body = [
        "VERSION" => "204.0",
        "METHOD" => "GetTransactionDetails",
        "USER" => "nvp_api_username_here",
        "PWD" => "nvp_api_password_here",
        "SIGNATURE" => "nvp_api_signature_here",
        "TRANSACTIONID" => "some_paypal_transaction_id_here",
    ];
    $body = http_build_query($body);
    
    // Set body
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
    
    // Send the request and save response to $resp
    $resp = curl_exec($ch);
    
    if(!$resp) {
        die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
    } else {
        parse_str($resp, $formated_response);
        print_r($formated_response);
    }
    
    // Close request to clear up some resources
    curl_close($ch);
    

    这是格式化的返回正文:

    Array
    (
        [RECEIVERBUSINESS] => paypal_account_owner_email_address_here@test.com
        [RECEIVEREMAIL] => paypal_account_owner_email_address_here@test.com
        [RECEIVERID] => 1111111111111
        [EMAIL] => buyers_email_address_here@test.com
        [PAYERID] => 55551
        [PAYERSTATUS] => verified
        [COUNTRYCODE] => US
        [BUSINESS] => buyers_business_name_here
        [ADDRESSOWNER] => PayPal
        [ADDRESSSTATUS] => None
        [SALESTAX] => 0.00
        [SHIPAMOUNT] => 0.00
        [SHIPHANDLEAMOUNT] => 0.00
        [SHIPDISCOUNT] => 0.00
        [INSURANCEAMOUNT] => 0.00
        [GIFTRECEIPT] => 0
        [TIMESTAMP] => 2016-08-02T17:04:58Z
        [CORRELATIONID] => 55552
        [ACK] => Success
        [VERSION] => 204.0
        [BUILD] => 22386173
        [FIRSTNAME] => Foo
        [LASTNAME] => Bar
        [TRANSACTIONID] => 55553
        [TRANSACTIONTYPE] => webaccept
        [PAYMENTTYPE] => instant
        [ORDERTIME] => 2016-08-01T20:49:28Z
        [AMT] => 1.00
        [TAXAMT] => 0.00
        [CURRENCYCODE] => USD
        [PAYMENTSTATUS] => Completed
        [PENDINGREASON] => None
        [REASONCODE] => None
        [SHIPPINGMETHOD] => Default
        [PROTECTIONELIGIBILITY] => Ineligible
        [PROTECTIONELIGIBILITYTYPE] => None
        [L_QTY0] => 0
        [L_TAXAMT0] => 0.00
        [L_SHIPPINGAMT0] => 0.00
        [L_HANDLINGAMT0] => 0.00
        [L_CURRENCYCODE0] => USD
        [L_OPTIONSNAME0] => first_custom_field_label_here
        [L_OPTIONSVALUE0] => first_custom_field_value_here
        [L_OPTIONSNAME1] => second_custom_field_label_here
        [L_OPTIONSVALUE1] => second_custom_field_value_here
        [L_OPTIONS1NAME0] => second_custom_field_label_here_duplicate
        [L_OPTIONS1VALUE0] => second_custom_field_value_here_duplicate
        [L_TAXABLE0] => false
        [L_TAXRATE0] => 0.0
        [L_AMT0] => 1.00
        [INSURANCEOPTIONSELECTED] => 0
        [SHIPPINGOPTIONISDEFAULT] => 0
    )
    

    警告:

    这仅适用于您在 PayPal 交易中存储自定义字段的情况。

    PayPal 的 NVP API 最多只能为一次交易返回 3 个自定义字段,即使您在一次交易中最多可以存储 7 个自定义字段。更疯狂的是,它返回的自定义字段之一是 second 自定义字段的副本。至少当我尝试从事务中检索自定义字段时就是这种情况。

    【讨论】:

    • 经过一番研究,我发现 REST API 与以前的 API 不同。在您实际进行付款之前,您必须通过 API 生成自定义链接并将用户重定向到该链接。用户在那里确认购买后,您必须通过他们的 API 手动执行付款,否则不会通过 developer.paypal.com/docs/api/payments/#payment_execute 发送资金,此响应还将包含客户信息。
    • 是的。这很有用。因此,您实际上必须是处理客户 PayPal 付款的人吗?我希望有一种方法可以仅根据交易 ID 号检索交易信息。
    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 2013-06-05
    • 1970-01-01
    • 2013-08-07
    • 2016-06-07
    • 1970-01-01
    • 2015-06-08
    • 2021-07-23
    相关资源
    最近更新 更多