通过Stripe集成GiroPay与SOFORT遇到问题求助
关于Stripe Giropay支付集成问题的排查与解决方案
我来帮你梳理下这个问题的排查方向,结合你给出的代码和遇到的现象,咱们一步步拆解:
1. 测试密钥报错的核心原因
你提到用测试密钥(pk_test_xxx)调用时提示“需使用发布密钥”,大概率是测试模式下的配置遗漏:
- 先确认Stripe后台的测试环境中,Giropay支付方式是否已经正式激活(有时候只激活生产环境会导致测试模式无法调用);
- 另外检查代码中有没有不小心混用密钥的情况,比如后端用了测试密钥但前端用了生产密钥,或者反过来。
其实测试密钥完全支持Giropay的测试流程,Stripe针对Giropay有专门的测试模拟规则,这个后面会提到。
2. 发布密钥下仅返回Source对象的正常性与缺失步骤
当你用发布密钥调用createSource成功返回Source对象时,这是流程的第一步,而非全部!Giropay的完整支付流程是:
- 前端调用
createSource生成待支付的Source(状态为pending); - 将用户重定向到
source.redirect.url,用户在Giropay的页面完成支付; - 用户支付完成后,会自动跳回你指定的
return_url; - 通过Webhook或后端接口验证Source状态,完成最终的扣费操作。
你的代码目前只完成了第一步,缺少了重定向用户到Giropay支付页面的关键逻辑,这就是为什么你只看到Source对象,但没有后续支付流程的原因。
3. 代码修正建议
修改你的Giropay分支代码,补充重定向逻辑:
else if (choosenPaymentMethod == "giropay") { stripe.createSource({ type: 'giropay', amount: 1099, currency: 'eur', owner: { name: 'Jenny Rosen', }, redirect: { return_url: 'https://shop.example.com/crtA6B28E1', }, }).then(function(result) { if (result.error) { // 前端友好提示用户错误,比如弹窗显示错误信息 console.error(result.error); } else { // 关键步骤:跳转到Giropay的官方支付页面 window.location.href = result.source.redirect.url; } }); }
4. 后续回调与状态验证
用户完成支付跳回return_url后,需要验证支付结果,推荐两种方式:
- Webhook方式(更可靠):在Stripe后台配置
source.chargeable事件的Webhook地址,当Source状态变为可扣费状态时,后端用Secret Key调用stripe.charges.create完成扣费; - 前端+后端联动方式:在
return_url页面,获取URL参数中的sourceID,传给后端,后端用Secret Key调用stripe.sources.retrieve查询状态,再返回结果给前端处理。
另外,测试环境下你可以手动模拟支付:生成Source后复制source.redirect.url,打开后可以选择“模拟成功支付”或“模拟失败”,之后会跳回你的return_url,方便测试回调逻辑。
5. 最后检查几个细节
- 确保Stripe后台的测试和生产环境都激活了Giropay;
- 把
return_url添加到Stripe后台的“允许跳转域名”列表中,防止被拦截; - 所有涉及扣费、查询的敏感操作必须放在后端,绝对不能在前端暴露Secret Key。
内容的提问来源于stack exchange,提问作者A. Ilazi
相关产品推荐
相关产品推荐

