現在、PayPal サンドボックス内のカスタム カートを使用してオンライン ストアをテストしています。setExpressCheckout-> pay -> DoExpressCheckout のすべての取引手順を適切に実行できます。
DoExpressCheckout のステップ中に、データベースを注文で更新するのに良い時期だと思います。そのために、GetExpressCheckoutDetails 関数を使用してトランザクションの内容を取得します。悲しいことに、この関数はペイパルが提供するすべてのものを返しますが、カートの内容を見逃してしまいます。私が得ることができるのは、1 つのアイテムの詳細だけです。トランザクションに複数のアイテムが含まれる場合、最初のアイテムの詳細のみを取得します。
これが私のコードです(主にPayPalのサンプルから取得):
$token =urlencode( $_REQUEST['token']);
$payerId=urlencode( $_REQUEST['PayerID']);
$getExpressCheckoutDetailsRequest = new GetExpressCheckoutDetailsRequestType($token);
$getExpressCheckoutReq = new GetExpressCheckoutDetailsReq();
$getExpressCheckoutReq->GetExpressCheckoutDetailsRequest = $getExpressCheckoutDetailsRequest;
$paypalService = new PayPalAPIInterfaceServiceService();
$getECResponse = $paypalService->GetExpressCheckoutDetails($getExpressCheckoutReq);
$details = $getECResponse->GetExpressCheckoutDetailsResponseDetails;
// $details->PaymentDetails->PaymentDetailsItem this array should hold all items details
// sadly it always have 1 element instead of the full content of my cart :(
$orderTotal = $details->PaymentDetails->OrderTotal;
$PaymentDetails= new PaymentDetailsType();
$PaymentDetails->OrderTotal = $orderTotal;
//
Some stuff with payment details
//
$DoECRequestDetails = new DoExpressCheckoutPaymentRequestDetailsType();
$DoECRequest = new DoExpressCheckoutPaymentRequestType();
$DoECRequest->DoExpressCheckoutPaymentRequestDetails = $DoECRequestDetails;
$DoECReq = new DoExpressCheckoutPaymentReq();
$DoECReq->DoExpressCheckoutPaymentRequest = $DoECRequest;
$DoECResponse = $paypalService->DoExpressCheckoutPayment($DoECReq);
ステップを見逃したり、悪い関数を呼び出したりしますか? 出くわしたすべての変数をprint_rしようとしたため、カートの完全なコンテンツがどこにも見つかりませんでした。トランザクションの「orderTotal」が元のカートと一致するため、これは奇妙に感じます。SetExpressCheckout ステップで元の注文を保存できましたが、paypal には既にそれらの値があるため、冗長であることがわかりました。
最後の手段として、$paypalService->getLastRequest() を使用してカートのコンテンツを見つけましたが、真剣にこれはペイパルによって返された生の XML であり、API はそれを適切に解析する必要があります :(.
読んでくれてありがとう