Stripe订阅支付完成后如何获取客户ID(PHP后端场景)
PHP环境下Stripe订阅支付完成后获取客户ID的实现方案
方案1:Checkout Session回调获取(实现成本最低,符合你的需求)
你不需要提前创建客户,也不需要配置webhook,直接通过Stripe Checkout自带的成功页回调参数就能拿到自动生成的客户ID:
- 第一步:修改
create-checkout-session.php中的success_url配置,使用Stripe内置的{CHECKOUT_SESSION_ID}占位符自动注入会话ID,示例代码:
$stripe = new \Stripe\StripeClient('你的Stripe服务端密钥'); $session = $stripe->checkout->sessions->create([ 'payment_method_types' => ['card'], 'line_items' => [ [ 'price' => '你的订阅价格ID', 'quantity' => 1, ] ], 'mode' => 'subscription', // 支付成功后跳转的地址,自动携带Session ID 'success_url' => 'https://你的网站域名.com/payment-success.php?session_id={CHECKOUT_SESSION_ID}', 'cancel_url' => 'https://你的网站域名.com/payment-cancel.php', ]);
- 第二步:在支付成功页对应的
payment-success.php文件中,调用Stripe接口检索会话详情即可拿到客户ID,示例代码:
$stripe = new \Stripe\StripeClient('你的Stripe服务端密钥'); // 取URL中的会话ID参数 $session = $stripe->checkout->sessions->retrieve($_GET['session_id']); // 直接获取自动生成的Stripe客户ID $stripe_customer_id = $session->customer; // 此处添加你自己的业务逻辑,将客户ID存入数据库即可
方案2:预创建客户传入(适合需要提前留存客户信息的场景)
也就是你想到的实现方案,稳定性也很高,适合需要在用户进入支付页前就管理客户信息的场景:
- 先调用Stripe客户创建接口生成客户ID
- 创建Checkout Session时直接传入
customer参数为你提前生成的客户ID,Stripe就不会重复创建客户,你也可以提前拿到客户ID不需要等支付完成。
补充说明
如果需要确保即使用户支付成功后没有跳转到成功页,你也能拿到客户ID,可以额外配置checkout.session.completed事件的webhook作为兜底,正常支付跳转场景下方案1完全可以满足需求。
内容的提问来源于stack exchange,提问作者Soulss
相关产品推荐
相关产品推荐

