PayPal:基于Javascript SDK+REST的刷卡失败处理与测试问题咨询
PayPal刷卡失败场景适配相关问题解答
1. JS SDK测试方法与PayPal专属测试卡号
PayPal有独立的沙盒测试卡号,无需使用Braintree的测试卡号,所有测试卡号仅在沙盒环境生效。你不需要手动修改REST请求头来测试失败场景,直接使用对应场景的测试卡号即可触发不同的刷卡失败结果:
- 模拟支付被拒:卡号
4000000000000002,到期日填未来任意年月,CVV填任意3位数字 - 其他场景(卡过期、余额不足、风控拦截等)均有对应的专属测试卡号,直接在沙盒环境使用即可
2. 银行卡支付被拒时actions.order.capture()的返回内容
支付被拒时actions.order.capture()不会进入.then的成功回调,会直接抛出Promise异常,返回的错误对象中会包含:
- 错误状态标识
status: "DECLINED" - 具体错误码,比如
INSTRUMENT_DECLINED代表支付方式被拒 details字段,标注具体的拒付原因,比如发卡行拒绝、卡余额不足、卡已过期等
3. onError回调入参类型与流程处理建议
onError的入参是已经解码完成的原生JS错误对象,既不是纯字符串也不是JSON字符串,你可以直接读取err.name、err.message、err.details等字段获取错误信息。
你计划的重试逻辑可以这样调整:优先在actions.order.capture()的catch回调中判断错误类型,如果是可重试的支付被拒类错误,直接调用actions.restart()重置支付流程,不可重试的错误再跳转你设置的兜底失败页面即可。
优化后的代码参考
BuildNewPayPalButtons = function(val) { paypal.Buttons({ createOrder: function(data, actions) { // Set up the transaction return actions.order.create({ application_context: { shipping_preference: 'NO_SHIPPING' // NOT an enum }, purchase_units: [{ amount: { value: '$amt' }, description: 'my favorite product', invoice_id: '$sessid' }] }); }, onApprove: function(data, actions) { return actions.order.capture().then(function(orderData) { var trns = orderData.purchase_units[0].payments.captures[0]; console.error('OK: Whole JSON ', JSON.stringify(orderData)); // Send the transaction id to the server for verification window.location.href = "$payurl&paymID=" + trns.id; }).catch(function(err) { // 捕获支付被拒类错误,优先重试 if(err.details && err.details.some(d => d.issue === 'INSTRUMENT_DECLINED')) { return actions.restart(); } // 其他错误走兜底逻辑 console.error('capture error', err); window.location.href = "/unimplemented_error.html"; }) }, onCancel: function(data) { window.location.href = "$cancelurl"; }, onError: function(err) { console.error('error from the onError callback', err); // 非流程内的全局错误走兜底 window.location.href = "/unimplemented_error.html"; } }).render('#paypal-button-container'); }
关于你提到的官方「Complete Javascript SDK」文档内容不全的问题,确实存在部分场景描述缺失的情况,建议调试时优先以沙盒环境实际返回的字段为准。
内容的提问来源于stack exchange,提问作者dajoke
相关产品推荐
相关产品推荐

