【问题标题】:Express Checkout Payment returns empty related resources even after successful execution即使在成功执行后,Express Checkout Payment 也会返回空的相关资源
【发布时间】:2017-06-27 08:48:56
【问题描述】:

编辑:

正如@bluepnume 所说,这可能是一个错误,稍后会修复。

在我的情况下,我做了同样的事情(创建付款/执行付款),但在服务器端使用 REST API 而不使用checkout.js,现在一切正常。

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

原问题:

我将 PayPal Express Checkout 与基本客户端集成集成在一起。

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

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

JS 代码(工作正常):

paypal.Button.render({
    env: $form.find('[name="env"]').val(),
    client: {
        sandbox:    $form.find('[name="client_id"]').val(),
        production: $form.find('[name="client_id"]').val()
    },
    locale: 'it_IT',
    commit: true, // Optional: show a 'Pay Now' button in the checkout flow
    payment: function() {
        var env    = this.props.env;
        var client = this.props.client;
        return paypal.rest.payment.create(env, client, {
            transactions: [
                {
                    custom: $form.find('[name="custom"]').val(),
                    amount: {
                        total: $form.find('[name="subtotal"]').val(),
                        currency: $form.find('[name="currency_code"]').val()
                    },
                    description: $form.find('[name="item_name"]').val(),
                }
            ],
            redirect_urls: {
                "return_url": $form.find('[name="return"]').val(),
                "cancel_url": $form.find('[name="notify_url"]').val()
            }
        });
    },
    onAuthorize: function(data, actions) {
        return actions.payment.execute().then(function() {
            actions.payment.get().then(function(data) {
                pjQ.$.post($form.find('[name="notify_url"]').val(), data).done(function (data) {
                    return actions.redirect();
                });
            });
        });
    },
    onCancel: function(data, actions) {
        return actions.redirect();
    }
}, '#paypal-button');

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);

有什么想法吗?

【问题讨论】:

    标签: php paypal express-checkout


    【解决方案1】:

    这是一个已知问题,很快就会推出修复程序。见https://github.com/paypal/paypal-checkout/issues/143

    【讨论】:

    • 我会接受你的回答,但由于我没有时间等待修复,我通过重定向到 PayPal 而不是使用 checkout.js 实现了服务器端支付创建和执行
    • 仅供参考,您仍然可以使用 checkout.js,但使用来自 onAuthorize 的 ajax 调用在服务器端执行。这样您仍然可以获得同页弹出窗口的好处。
    • 是的,你是对的,但客户的第一个要求是重定向到 PayPal,所以重定向也可以。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多