한달 전이 동일한 문제가 발생하여 문서를 읽은 후 현재 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] => [email protected]
[RECEIVEREMAIL] => [email protected]
[RECEIVERID] => 1111111111111
[EMAIL] => [email protected]
[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
)
경고 : 페이팔 트랜잭션에서 사용자 정의 필드를 저장하는 경우
이것은에만 적용됩니다.
트랜잭션에 최대 7 개의 사용자 정의 필드를 저장할 수있는 경우에도 PayPal의 NVP API는 트랜잭션에 대해 최대 3 개의 사용자 정의 필드 만 반환합니다. 심지어 더 미친, 사용자 지정 필드 중 하나는 두 번째 사용자 지정 필드의 중복입니다. 적어도 그것은 트랜잭션에서 사용자 정의 필드를 검색하려고 할 때의 경우입니다.
일부 연구 후에 REST API가 이전 API와 다른 것으로 나타났습니다. 실제로 결제하기 전에 API를 통해 맞춤 링크를 생성하고 해당 링크로 사용자를 리디렉션해야합니다. 사용자가 구매를 확인하면 해당 API를 통해 수동으로 결제를 실행해야합니다. 그렇지 않으면 https://developer.paypal.com/docs/api/payments/#payment_execute를 통해 금액이 전송되지 않으며이 응답에도 고객 정보가 포함됩니다. – maddo7
예. 유용합니다. 따라서 실제로 고객의 PayPal 결제를 처리해야합니까? 트랜잭션 ID 번호를 기반으로 트랜잭션 정보를 검색하는 방법이 있었으면 좋겠습니다. –