You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用纯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实现后续支付逻辑。


具体说明

  1. 为什么没有纯PHP的首次接入方案
  • 钱包类支付(Apple Pay、Google Pay等)需要调用用户设备本地的钱包应用,完成生物验证/密码验证后才能生成加密的支付凭证,这个流程只能在用户端(浏览器/APP)触发,服务端PHP没有权限访问设备本地的钱包数据,也无法唤起钱包应用。
  • 你之前用纯PHP实现的卡、Afterpay等支付方式,是因为你可以直接获取明文的卡信息、用户身份信息直接提交;但钱包支付的凭证是端到端加密的,只有Stripe.js/官方客户端SDK有权限和钱包交互获取合法的支付凭证,Stripe官方不允许服务端直接收集这类数据。
  1. 复用已保存的钱包支付方式的纯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://你的域名/支付结果回调地址'
]);
  1. 首次接入的最小成本方案
    如果需要首次收集用户的钱包支付信息,只需要加极少量的前端Stripe.js代码,拿到payment_method_id后传给你的PHP后端处理后续逻辑即可,90%以上的业务逻辑依然可以放在PHP侧实现,不需要把整个支付流程迁移到前端。

内容的提问来源于stack exchange,提问作者Giulia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:54:02