如何使用纯PHP在Stripe中对接钱包类支付方式
用户提问
我反复阅读了Stripe API文档,目前仅使用PHP开发支付功能,使用card、afterpay、alipay...等支付方式时都得到了符合预期的结果,但涉及钱包类支付时我完全没有头绪。我了解到钱包会读取已保存的卡片数据,但Stripe文档中完全没有说明PHP端对接钱包支付的相关内容,仅提到可以使用Stripe.js实现,但我不想使用JS获取支付数据,希望只用pure php实现,可文档中完全没有提及PHP端的相关方案。有人知道如何通过PHP的paymentMethod接口收集钱包支付相关数据吗?我目前收集支付数据的实现方式如下:
CARD
$payment = $stripe->paymentMethods->create([ 'type' => 'card', 'billing_details' => [ 'address' => [ 'city' => 'nova york', 'country' => 'US', 'line1' => 'asdasd', 'line2' => 'asdfasd', 'postal_code' => '999876', 'state' => 'boom' ], ], 'card' => [ 'number' => '4242424242424242', 'exp_month' => 9, 'exp_year' => 2022, 'cvc' => '314', ], 'customer' => 'cus_...' ]);
AFTERPAY
$payment = $stripe->paymentMethods->create([ 'type' => 'afterpay_clearpay', 'billing_details' => [ 'address' => [ 'city' => 'Miami', 'country' => 'US', 'line1' => 'Street 33', 'line2' => 'United aLA', 'postal_code' => '99854332', 'state' => 'Florida' ], 'email' => 'jenny@example.com', 'name' => 'Lois', 'phone' => '+15555555555' ], 'metadata' => ['id' => 'corrego'] ]);
EPS
$payment = $stripe->paymentMethods->create([ 'type' => 'eps', 'billing_details' => [ 'address' => [ 'city' => 'Miami', 'country' => 'BR', 'line1' => 'Street 33', 'line2' => 'United aLA', 'postal_code' => '99854332', 'state' => 'SP' ], 'email' => 'jenny@example.com', 'name' => 'Lois', 'phone' => '+15555555555' ], ]);
...
上述这些支付方式的文档都同时给出了Stripe.js和纯PHP两种实现方案,但钱包支付完全没有提到纯PHP的实现方法,有人有相关实现思路吗?我的母语不是英语,可能这也导致我对文档的理解存在一定障碍。
回答
核心结论
钱包类支付首次收集支付凭证时无法通过纯PHP实现,这是Stripe的安全合规要求,也是钱包支付的技术特性决定的,不存在绕过方案。只有复用已经保存到Stripe客户账户下的钱包支付方式时,可完全用PHP实现后续支付逻辑。
具体说明
- 为什么没有纯PHP的首次接入方案
- 钱包类支付(Apple Pay、Google Pay等)需要调用用户设备本地的钱包应用,完成生物验证/密码验证后才能生成加密的支付凭证,这个流程只能在用户端(浏览器/APP)触发,服务端PHP没有权限访问设备本地的钱包数据,也无法唤起钱包应用。
- 你之前用纯PHP实现的卡、Afterpay等支付方式,是因为你可以直接获取明文的卡信息、用户身份信息直接提交;但钱包支付的凭证是端到端加密的,只有Stripe.js/官方客户端SDK有权限和钱包交互获取合法的支付凭证,Stripe官方不允许服务端直接收集这类数据。
- 复用已保存的钱包支付方式的纯PHP实现
如果你已经通过前端流程把用户的钱包支付方式绑定到对应的Stripe客户(Customer)下,后续支付不需要用户再操作钱包,可直接用PHP调用接口完成:
// 第一步:获取指定客户下已保存的所有支付方式,筛选钱包类的即可 $paymentMethods = $stripe->paymentMethods->all([ 'customer' => 'cus_xxxxxx', // 替换为你的客户ID 'type' => 'card', // 钱包生成的卡支付方式类型同样为card,PayPal类钱包传paypal即可 ]); // 第二步:直接使用已保存的支付方式ID创建并确认支付单 $paymentIntent = $stripe->paymentIntents->create([ 'amount' => 2000, // 金额单位为对应货币的最小单位,比如美元为分 'currency' => 'usd', 'customer' => 'cus_xxxxxx', 'payment_method' => $paymentMethods->data[0]->id, // 替换为你要使用的钱包支付方式ID 'confirm' => true, 'return_url' => 'https://你的域名/支付结果回调地址' ]);
- 首次接入的最小成本方案
如果需要首次收集用户的钱包支付信息,只需要加极少量的前端Stripe.js代码,拿到payment_method_id后传给你的PHP后端处理后续逻辑即可,90%以上的业务逻辑依然可以放在PHP侧实现,不需要把整个支付流程迁移到前端。
内容的提问来源于stack exchange,提问作者Giulia
相关产品推荐
相关产品推荐

