Laravel结合Braintree创建客户ID及存储信用卡用于后续支付
当然可以实现!
Laravel Cashier 对 Braintree Vault 的支持其实已经内置了,你完全可以把客户的信用卡信息存在 Vault 里,之后用客户ID快速完成后续支付,不用再重复收集卡信息。我给你捋捋具体怎么操作:
首次创建客户并存储支付方式
当你用 Cashier 处理用户的首次支付(不管是一次性付款还是订阅),只要你通过 Braintree 的前端组件(比如 Drop-in UI)拿到了合法的支付令牌(payment method token),Cashier 会自动帮你在 Braintree 侧创建客户账户,把支付方式存入 Vault,同时把 Braintree 客户ID关联到你的 Laravel User 模型上。
举个例子,处理订阅的代码大概是这样:$user->newSubscription('main', 'monthly') ->create($paymentMethodToken);这一步完成后,用户的 Braintree 客户ID就存在
$user->braintreeId里了,支付方式也已经存在 Vault 中。用客户ID完成后续支付
之后你要发起支付时,根本不需要再收集信用卡信息,直接用用户关联的支付方式就行:- 一次性付款可以这样写:
// 使用用户的默认支付方式扣款10美元(金额单位是分) $user->charge(1000, $user->defaultPaymentMethod()); - 如果你需要指定某个特定的支付方式(用户可能存了多张卡),可以先获取用户的所有支付方式,再选择使用:
$paymentMethods = $user->paymentMethods(); // 用第一个支付方式扣款 $user->charge(1000, $paymentMethods->first()); - 要是你想直接通过 Braintree 客户ID操作底层 API,Cashier 也提供了便捷方法:
$braintreeCustomer = $user->braintreeCustomer(); // 这里可以调用 Braintree 原生的客户相关方法
- 一次性付款可以这样写:
额外的支付方式管理
你还可以给用户添加新的支付方式到 Vault:$user->addPaymentMethod($newPaymentMethodToken);或者更新默认支付方式:
$user->updateDefaultPaymentMethod($paymentMethod);
⚠️ 重要提醒:一定要用 Braintree 的前端组件(比如 Drop-in、Hosted Fields)来收集支付信息,绝对不能把信用卡号直接传到你的服务器,这样才能符合 PCI 合规要求,Cashier 和 Braintree 的集成也是基于这个前提设计的。
内容的提问来源于stack exchange,提问作者Webtect
相关产品推荐
相关产品推荐

