Javascript PayPal智能按钮和REST签出SDK-SyntaxError:JSON输入意外结束或预期传递订单id

Javascript PayPal智能按钮和REST签出SDK-SyntaxError:JSON输入意外结束或预期传递订单id,javascript,php,json,paypal,paypal-rest-sdk,Javascript,Php,Json,Paypal,Paypal Rest Sdk,我正在尝试用实现PayPal的智能按钮,并使用服务器端调用API 但是,我对它的createOrder部分有一些问题 JS代码: paypal.Buttons({ style: { size: 'responsive', layout: 'vertical' }, createOrder: function() { return fetch(blm_custom_vars.wp_home + 'classes/paypal/

我正在尝试用实现PayPal的智能按钮,并使用服务器端调用API

但是,我对它的
createOrder
部分有一些问题

JS代码:

paypal.Buttons({
    style: {
        size: 'responsive',
        layout: 'vertical'
    },
    createOrder: function() {
        return fetch(blm_custom_vars.wp_home + 'classes/paypal/paypal-create-order.php', {
            method: 'post',
            headers: {
                'content-type': 'application/json'
            }
        }).then(function(res) {
            return res.json();
        }).then(function(data) {
            return data.id;
        });
    },
    onApprove: function(data) {
        return fetch(blm_custom_vars.wp_home + 'classes/paypal/paypal-capture-order.php', {
            method: 'post',
            headers: {
                'content-type': 'application/json'
            },
            body: JSON.stringify({
                orderID: data.id
            })
        }).then(function(res) {
            return res.json();
        }).then(function(details) {
            alert('Transaction funds captured from ' + details.payer_given_name);
        })
    },
}).render('.purchase-modal');
paypal-create-order.PHP中的PHP代码:

现在,当我有
$debug=true
时,服务器会输出正确的响应。那里什么也看不见。尽管我必须关闭调试以避免其他JSON错误

因此,一旦我关闭它,我就会得到错误:

SyntaxError:JSON输入意外结束

我想这是因为createOrder脚本返回数据而不是输出数据,所以它是一个空页面?但贝宝就是这么说的

所以我试着把它改成:
echo-json\u-encode($response)然后我得到另一个错误:

应传递订单id

在JS中,我最初有以下内容:

}).then(function(data) {
    return data.orderID;
});
…但随后意识到createOrder脚本返回的数组引用的是
id
,而不是
orderID
,因此我将其更改为
return data.id但它没有帮助


我在这里做错了什么?

只需确保您在回显/返回整个响应,或者至少是带有
{“id”:“…”}

您可以在浏览器的“开发工具”网络选项卡中查看发生了什么

因此,从PHP开始,执行以下操作:

echo json_encode($response->result, JSON_PRETTY_PRINT);

…应该可以,但是在$debug=true if块的下面/外面,上面或周围没有任何其他打印行或回显行,因为您必须输出有效的JSON,并且只输出有效的JSON(让执行createOrder获取的JS能够解析它)

好的,我看到了问题。由于PayPal提供的示例代码返回了
$response
,因此我试图回应这一点,这导致了问题。但将其更改为
$response->result
似乎已经解决了这个问题。我假设
return$response
可以被这个函数删除/替换?该函数可以返回对象,以防调用者需要使用它
echo json_encode($response->result, JSON_PRETTY_PRINT);