我将PayPal的智能按钮与REST结账SDK一起使用,并使用服务器端调用API。
我正在努力找出如何正确处理资金短缺的问题。
我插入代码没有问题,但当资金失败时,我似乎无法将其放入JS中的正确部分。
我能够通过传递正确的模拟标头和错误代码来模拟负面响应,从而生成模拟INSTRUMENT_DECLINED
错误;这是通过捕获脚本中的服务器端发送的。
这是我的JS代码供参考:
paypal.Buttons({
style: {
size: 'responsive',
layout: 'vertical'
},
createOrder: function() {
// Make sure payment status alert is hidden first up...
jQuery('.payment-status').hide();
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.result.id;
});
},
onApprove: function(data, actions) {
return fetch(blm_custom_vars.wp_home + 'classes/paypal/paypal-capture-order.php?order_id=' + data.orderID, {
method: 'post',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify({
orderID: data.id
})
}).then(function(res) {
return res.json();
}).then(function(orderData) {
console.log(orderData);
var errorDetail = Array.isArray(orderData.details) && orderData.details[0];
if (errorDetail && errorDetail.issue === 'INSTRUMENT_DECLINED') {
console.log('Hi!');
// return actions.restart();
}
if (errorDetail) {
// Error here
}
alert('Transaction funds captured from ' + orderData.payer.name.given_name);
})
},
onError: function (err) {
// Error display here
},
}).render('.purchase-modal');
现在,正如您所看到的,有一个INSTRUMENT_DECLINED
的检查;然而,当生成mock错误时,它从未出现在JS的那个部分,它最终出现在onError
部分,就像所有其他错误一样。
然后,我试图在不嘲笑它的情况下生成一个,方法是转到支付屏幕,让它可以使用余额,然后回到我的沙盒账户,减少余额,让他们没有足够的余额——然而,这也有同样的效果,直接进入onError
部分。
我唯一能进入onError
上方部分的时间似乎是付款成功的时候。
我想测试一下,看看它是否能确保我的代码是正确的,因为我已经看到了不同的正确代码的例子,从:
var errorDetail = Array.isArray(orderData.details) && orderData.details[0];
if (errorDetail && errorDetail.issue === 'INSTRUMENT_DECLINED') {
return actions.restart();
}
到。。。
if (orderData.error === 'INSTRUMENT_DECLINED') {
return actions.restart();
}
到。。。
if (orderData.details[0].issue === 'INSTRUMENT_DECLINED') {
return actions.restart();
}
这看起来是基于第一个。
我在这里做错了什么?我如何正确地模拟INSTRUMENT_DECLINED
错误,使其最终出现在JS代码的正确部分?
我看到了不同的例子,说明检查的正确代码是什么
;正确的";代码取决于您的服务器在自己对获取请求的响应中发送回的内容。如果您只是将v2/checkout/orders API返回的内容发送回捕获响应(为简单起见,强烈建议(,那么https://developer.paypal.com/demo/checkout/#/pattern/server是正确的,并展示了如何基于该格式处理所有3种情况。
至于如何触发INSTURMENT_DECLINED响应,捕获调用必须在API请求中包含一个mock头。触发相同的一种更简单的方式是在结账期间将发货地址行1设置为:";CCD_ 7";(在REST API存在之前的旧文档中提到(