Stripe支付集成时paymentIntentClientSecret需要传入什么参数?
Stripe paymentIntentClientSecret字段说明
paymentIntentClientSecret是Stripe PaymentIntent对象的客户端专用密钥,用于关联对应支付订单的金额、币种、支付状态等核心配置,是客户端初始化支付 sheet 时的必填参数,该字段必须由你的后端服务生成后返回给前端,不允许在前端直接生成或硬编码。
正确的获取&使用流程
- 后端调用Stripe服务端API创建PaymentIntent对象,传入当前订单的支付金额、币种、关联客户ID等必填参数,创建成功后Stripe接口返回的
client_secret字段值就是你需要填充的paymentIntentClientSecret内容 - 后端同时生成对应客户的临时密钥(customerEphemeralKeySecret),和customerId、paymentIntentClientSecret一起返回给Flutter前端
- 前端拿到三个参数后再调用
initPaymentSheet方法完成初始化,参考正确的填充格式如下:
await Stripe.instance.initPaymentSheet( paymentSheetParameters: SetupPaymentSheetParameters( applePay: true, googlePay: true, style: ThemeMode.dark, testEnv: true, merchantCountryCode: 'US', merchantDisplayName: 'Flutter Stripe Store Demo', // 以下三个参数均从你的后端接口请求获取 customerId: "cus_xxxxxxx", // cus开头的客户ID,不是银行卡号 paymentIntentClientSecret:"pi_xxxxxx_secret_xxxxxx", // 后端返回的client_secret值 customerEphemeralKeySecret:"ek_xxxxxx", // 后端生成的临时密钥,不是sk开头的账户密钥 ));
你当前代码的高危问题必须修复
- 你把Stripe账户的
sk_test_开头的私钥直接写在前端代码中,这是严重安全漏洞,生产环境会导致你的Stripe账户完全被盗用,sk开头的密钥只能在后端存储使用,绝对不可以暴露给客户端- 你填写的
customerId值4242424242424242是Stripe测试银行卡号,不是客户ID,合法的Stripe客户ID是cus_开头的字符串,需要你在Stripe后台或者通过服务端API创建客户后获得- customerEphemeralKeySecret是针对单客户的临时密钥,也需要由后端调用Stripe接口生成后返回给前端,不可以直接填账户私钥
内容的提问来源于stack exchange,提问作者Muhammad Arbaz Zafar
相关产品推荐
相关产品推荐

