stripe-php+ngx-stripe开发中如何在PaymentIntent流程绑定PaymentMethod到Customer
问题原因
当前Customer没有绑定PaymentMethod的问题,是因为默认情况下PaymentIntent关联的支付方式仅用于本次支付,不会自动持久化保存到对应Customer的支付方式列表中,需要你主动配置参数或调用接口完成绑定。
方案1:新增PaymentIntent时自动绑定(推荐,适配后续新支付场景)
创建PaymentIntent时额外传入save_payment_method和setup_future_usage两个参数,支付成功后Stripe会自动将本次使用的PaymentMethod绑定到关联的Customer上。
修改后的PaymentIntent创建代码如下:
$paymentIntent = $this->stripeClient->paymentIntents->create([ 'customer' => $customerId, 'amount' => $amount, 'currency' => $currency, 'payment_method_types' => ['card'], // 新增以下两个参数 'save_payment_method' => true, 'setup_future_usage' => 'off_session' // 订阅场景需要后续离线自动扣费,固定传off_session即可 ]);
方案2:已有成功支付记录,手动绑定现有PaymentMethod
如果不需要用户重新支付,可以直接调用PaymentMethod的attach接口,将本次支付关联的PaymentMethod绑定到对应Customer上:
// 先从成功的PaymentIntent对象中获取payment_method ID $paymentMethodId = $paymentIntent->payment_method; // 调用绑定接口 $this->stripeClient->paymentMethods->attach( $paymentMethodId, ['customer' => $customerId] );
额外注意事项
- 绑定完成后如果要创建订阅,直接调用订阅创建接口,传入customer ID和对应的payment method ID即可,不需要额外的支付确认流程。
- 如果你是首次支付就是订阅的首单费用,也可以直接走Stripe Subscription创建流程,无需单独创建PaymentIntent,Stripe会自动处理首单扣费和支付方式绑定逻辑。
内容的提问来源于stack exchange,提问作者Ste
相关产品推荐
相关产品推荐

