如何解决使用REST API对PayPal智能按钮实现进行错误测试并触发INSTRUMENT_DECLINED
我在REST checkout SDK上使用PayPal的智能按钮,并在服务器端调用API。
我正在尝试找出正确处理funding failures的方法。
我插入代码没有问题,但是当资金出现问题时,我似乎无法将其放入JS的正确部分。
我能够通过传递correct mock headers和错误代码来模拟否定响应,从而生成模拟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,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
中有一个检查;但是,在生成模拟错误时,它从未出现在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请求中包含模拟标头。一种简单的触发方法是在结帐时将送货地址行1设置为:“ CCREJECT-REFUSED
”(从REST API出现之前在old documentation中提到)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。