如何正确获取stripe.redirectToCheckout()的返回结果值
stripe.redirectToCheckout()返回值获取方案
现有代码不生效的原因有两点:
- 语法错误:
successUrl: someurl行尾缺失逗号,会导致JS解析中断,方法无法正常执行。 - 逻辑认知偏差:该方法返回的Promise仅在跳转流程触发失败时(如参数非法、接口请求报错),才会resolve出带
error字段的结果;如果参数校验通过,浏览器会直接跳转到Stripe托管结算页,当前页面上下文会被销毁,后续.then()逻辑根本不会执行,这是方法本身的设计逻辑,并非返回值获取失败。
修正后可正常捕获错误返回的代码如下:
stripe.redirectToCheckout({ lineItems: [ { price: stripePrice, quantity: token, }, ], mode: "payment", successUrl: someurl, // 补全缺失的分隔逗号 cancelUrl: someurl }).then(result => { // 仅跳转触发失败时会进入该分支拿到返回结果 if (result?.error) { alert(result.error.message); } }).catch(err => { // 捕获网络异常等运行时错误,避免出现未捕获异常报错 console.error('Stripe结算跳转异常:', err) })
注意事项:
- 无法通过该方法的返回值拿到支付成功/取消的最终结果:只要跳转正常触发,当前页面就会被卸载,支付流程全程在Stripe托管页完成,最终支付状态需要通过跳转回
successUrl/cancelUrl时携带的参数、或后端配置的Stripe Webhook接收,和当前页调用方法的返回值无关。 - 调用前可提前校验必填参数合法性(如price值是否正确、跳转地址是否为合法HTTP/HTTPS地址、购买数量是否为正整数),减少不必要的错误返回。
内容的提问来源于stack exchange,提问作者Дейвид Аптикадир
相关产品推荐
相关产品推荐

