我目前正在使用paypal沙盒中的自定义购物车测试在线商店。 我能够正确地完成所有的交易步骤 setExpressCheckout->支付 - > DoExpressCheckout。
在DoExpressCheckout步骤中,我认为现在是用订单更新数据库的好时机。为此,我使用GetExpressCheckoutDetails函数来检索事务的内容。 遗憾的是,这个函数返回paypal提供的所有内容但却错过了我购物车的内容。我所能得到的只是一个项目的细节。如果交易涉及多个项目,我只会获得第一个项目的详细信息。
这是我的代码(主要来自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()找到了我购物车的内容,但严重的是这是paypal返回的原始XML,api应该正确解析它:(。
感谢您阅读
答案 0 :(得分:1)
我有同样的问题 - 虽然PayPal返回的XML很好,但他们的PHP SDK无法正确解析它,所以你只能看到GetExpressCheckout中的最后一项。
我已经在PayPal的GitHub问题上发布了此问题的修复程序,请查看: