Получить данные клиента после транзакции

Я изо всех сил пытаюсь выбрать между Paypal NVP и REST API.

API REST выглядит новее и лучше, но я не могу найти способ получить информацию о клиенте после совершения транзакции.

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

Paypal ExpressCheckout, кажется, то, что я должен использовать здесь.

API NVP предлагает метод GetExpressCheckoutDetails для получения этих деталей.

Я не нашел ничего похожего для REST API.

Поскольку REST API, по-видимому, также проходит через ExpressCheckout, должно быть решение.

Как я могу получить данные клиента после активации биллингового соглашения?

1 ответ

Я столкнулся с этой же проблемой месяц назад, и после прочтения документации в настоящее время нет способа решить эту проблему с помощью REST API. Если есть способ, он не задокументирован.

Единственный способ, который я нашел, - это использовать API NVP и, возможно, API SOAP. API NVP вернет вам большинство полей, которые вы хотите, но если вы сохранили настраиваемые поля для транзакции, он предоставит вам только 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.

NVP API PayPal возвращает только до 3 настраиваемых полей для транзакции, даже если в транзакции можно сохранить до 7 настраиваемых полей. Еще более сумасшедший, одно из настраиваемых полей, которые он возвращает, является дубликатом второго настраиваемого поля. По крайней мере, это тот случай, когда я пытаюсь получить пользовательские поля из транзакции.

Другие вопросы по тегам