私はこの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] => [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
)
警告:あなたはPayPalの取引でカスタムフィールドを保存している場合
にのみ適用されます。
トランザクションに最大7つのカスタムフィールドを保存することはできますが、PayPalのNVP APIはトランザクションのカスタムフィールドを最大3つまで返します。よりクレイジーでも、それが返すカスタムフィールドの1つは、の第2のカスタムフィールドの複製です。少なくとも、それはトランザクションからカスタムフィールドを取得しようとする場合です。
一部の研究の後、私はREST APIが以前のAPIとは異なることを発見しました。実際に支払いを受ける前に、API経由でカスタムリンクを生成し、そのリンクにユーザーをリダイレクトする必要があります。ユーザーが購入を確認した後、APIを使用して手動で支払いを実行する必要があります。また、https://developer.paypal.com/docs/api/payments/#payment_executeからお金が送信されません。この応答には顧客情報も含まれます。 – maddo7
うん。それは便利です。だからあなたは実際に顧客のPayPal支払いを処理するものでなければならないのですか?トランザクションID番号だけに基づいてトランザクション情報を取得する方法があることを願っています。 –