正在调用RedirectUrls,忽略onAuthorize函数

时间:2017-02-08 18:33:34

标签: php paypal-sandbox paypal-rest-sdk paypal

根据高级服务器集成下的documentation on PayPal's Developer site,必须在付款电话中提供重定向网址,但是:

  

(...)PayPal不会自动调用这些网址。当买方授权付款时,PayPal会调用您的onAuthorize功能。    提供的不会被使用。

所以我开发了我的代码,假设这是真的,并且在我的本地设置上,这工作正常。但是,当我将其推送到我的登台服务器时,将调用SDK中传递的重定向URL,并忽略我的onAuthorize函数。它甚至打开一个新的弹出窗口,然后在那里打开我的payment-execute.php脚本,附加GET个查询,忽略我的POST ed值。

以下是我正在使用的JS示例:

paypal.Button.render({

    env: 'sandbox',

    payment: function(resolve, reject) {

        paypal.request.post(
            '/path-to-inc/payment.php',
            {
                action: 'create_paypal_payment',
                orderId: order_id,
                postId: post_id,
            }
        )
        .then(function(data) {
            resolve(data.paymentID);
        })
        .catch(function(err) {
            reject(err);
        });
    },

    onAuthorize: function(data) {

        paypal.request.post('/path-to-inc/payment-execute.php',
            {
                paymentID: data.paymentID,
                payerID: data.payerID,
                postId: post_id
            })

            .then(function(data) {
                window.location.reload();
            })

            .catch(function(err) {
                console.log('Error');
        });
    }

}, '#paypal-button');

来自PHP文件的片段:

$redirectUrls = new RedirectUrls();
$redirectUrls->setReturnUrl('http://website.com/payment-execute.php')
    ->setCancelUrl('http://website.com/checkout');

$payment = new Payment();
$payment->setIntent('sale')
    ->setPayer($payer)
    ->setRedirectUrls($redirectUrls)
    ->setTransactions(array($transaction));

try {

    $payment->create($apiContext);

    echo json_encode( ['paymentID' => $payment->id] );

} catch (Exception $e) {

    error_log( 'Payment error: ' . $e->getMessage() );
}

1 个答案:

答案 0 :(得分:1)

我从1天前开始遇到同样的问题,我在旧测试中使用onAuthorize调用

编辑1:使用旧脚本版本进行测试,并使用此https://www.paypalobjects.com/api/checkout.4.0.38.js获得预期结果