Php 即使在成功执行后,快速结帐付款也会返回空的相关资源

Php 即使在成功执行后,快速结帐付款也会返回空的相关资源,php,paypal,express-checkout,Php,Paypal,Express Checkout,编辑: 正如@bluepnume所说的,这可能是一个bug,稍后会修复 在我的例子中,我也做了同样的事情(创建付款/执行付款),但是在服务器端使用RESTAPI,没有使用checkout.js,现在一切都正常了 唯一的区别是我将客户端重定向到PayPal(使用$payment->getApprovalLink()),而不是使用checkout.js生成的现场灯箱 原始问题: 我将PayPal Express Checkout与基本客户端集成 一切似乎都很好。付款顺利完成,我可以从Rest API

编辑:

正如@bluepnume所说的,这可能是一个bug,稍后会修复

在我的例子中,我也做了同样的事情(创建付款/执行付款),但是在服务器端使用RESTAPI,没有使用
checkout.js
,现在一切都正常了

唯一的区别是我将客户端重定向到PayPal(使用
$payment->getApprovalLink()
),而不是使用
checkout.js
生成的现场灯箱

原始问题:

我将PayPal Express Checkout与基本客户端集成

一切似乎都很好。付款顺利完成,我可以从Rest API请求和卖方帐户(沙箱)查看已完成/批准的付款

但是,即使在成功执行后,付款也未完成。我试图在订单取消后从API退款,但在成功读取付款数据后,我无法接收付款交易中的相关资源

JS代码(工作正常):

PHP代码:

$payment = \PayPal\Api\Payment::get($paymentId, $apiContext); // It's ok
$transactions = $payment->getTransactions(); // It's ok
$relatedResources = $transactions[0]->getRelatedResources(); // Empty...

// I can't use the code below as $relatedResources is empty
$sale = $relatedResources[0]->getSale();
$saleId = $sale->getId();

$sale = new \PayPal\Api\Sale();
$sale->setId($saleId);

$refundedSale = $sale->refundSale($refundRequest, $apiContext);

有什么想法吗

这是一个已知的问题,很快就会有一个解决方案。请参阅。

这是一个已知的问题,很快就会有一个解决方案。请参阅。

我将接受您的回答,但由于我没有时间等待修复,我通过重定向到PayPal而不是使用checkout.jsFYI实现了服务器端支付的创建和执行,您仍然可以使用checkout.js,但通过来自
onAuthorize
的ajax调用在服务器端执行。这样你仍然可以享受到相同页面弹出窗口的好处。是的,你是对的,但客户端的第一个要求是重定向到PayPal,所以重定向也没问题。我接受你的回答,但由于我没有时间等待修复,我通过重定向到PayPal而不是使用checkout.jsFYI实现了服务器端支付的创建和执行,你仍然可以使用checkout.js,但是,在服务器端使用来自authorize的ajax调用执行。这样,您仍然可以从相同的页面弹出窗口中获得好处。是的,您是对的,但客户的第一个要求是重定向到PayPal,所以重定向也可以。
$payment = \PayPal\Api\Payment::get($paymentId, $apiContext); // It's ok
$transactions = $payment->getTransactions(); // It's ok
$relatedResources = $transactions[0]->getRelatedResources(); // Empty...

// I can't use the code below as $relatedResources is empty
$sale = $relatedResources[0]->getSale();
$saleId = $sale->getId();

$sale = new \PayPal\Api\Sale();
$sale->setId($saleId);

$refundedSale = $sale->refundSale($refundRequest, $apiContext);