Braintree 集成 - 用户信用卡详细信息仅一次

Posted

技术标签:

【中文标题】Braintree 集成 - 用户信用卡详细信息仅一次【英文标题】:Braintree Integration - User Credit Card Details only once 【发布时间】:2017-05-06 00:14:42 【问题描述】:

我们正在开发一个类似于 Uber 的 cordova 应用程序。 工作流程很简单:用户请求一项服务,分配一个助理,工作完成后,按小时数向用户收费。

我让服务器从 Braintree 生成客户端令牌

    $clientToken = Braintree_ClientToken::generate();

并且可以要求用户在第一次请求时只输入一次他的信用卡详细信息,之后我创建一个 Braintree_customer 对象

$result = Braintree_Customer::create(array(
                            'paymentMethodNonce' => $payment_token
                        ));

并将令牌存储在我的数据库中。

    $payment = new Payment;
    $payment->owner_id = $owner_id;
    $payment->customer_id = $customer_id;
    $payment->last_four = $last_four;
    $payment->card_token = $result->customer->creditCards[0]->token;
    $payment->save();

我可以将此客户 ID 用于所有后续交易吗?

Braintree_Transaction::sale(array(
                            'amount' => $total,
                            'paymentMethodNonce' => $customer_id
                            ));

在这种情况下,我们希望用户只输入一次他的卡详细信息,并且即使在一个月左右之后他下次创建另一个请求时,我们应该能够向他收费而不必输入他的卡详细信息。

我能否获得一个简单的工作流程,说明我们如何实现这一点以及示例(如果有)?

【问题讨论】:

【参考方案1】:

您似乎希望使用 Transaction.sale 的 paymentMethodToken 键,以该令牌字符串作为值,以向特定客户的存储付款方式收费。

result = braintree.Transaction.sale(
    'amount' => $total,
    'paymentMethodToken' => 'token_string'
)

因此,对于所有后续交易,您需要使用 paymentMethodToken 并传入该令牌字符串,而不是传入客户 ID。

【讨论】:

嗨,'token_string' 到底是什么?假设我有一个注册的客户已经提供了他的信用卡数据并且我不希望他再做一次,我从哪里得到它?跨度> @Maxlight 这可以在Braintree Customer result object 中找到。 payment_methods 属性将返回客户存储的付款方式的列表。每种付款方式都将包含与之关联的令牌字符串。 谢谢我现在看到了:) 顺便说一句,我正在使用托管字段进行信用卡输入和贝宝付款,我应该如何处理它们?我应该检查是否有任何存储的付款方式以及是否没有显示托管字段,或者如果存在具有付款方式的回头客,它们是否应该以不同的方式初始化? 听起来这完全取决于您,但我认为在您的 Braintree Vault 中找到该客户并首先检查他们是否有任何存储的付款方式是合乎逻辑的。

以上是关于Braintree 集成 - 用户信用卡详细信息仅一次的主要内容,如果未能解决你的问题,请参考以下文章

在 Braintree 中使用 AngularJS 加密信用卡详细信息

Braintree - 使用 Paypal 详细信息创建客户

Braintree 可以在没有账单信息的情况下从卡中收取费用吗?

如何使用 Braintree 保存卡片详细信息?

在不成功的 Braintree 交易期间返回参数/信用卡信息

Braintree:如何使用自定义 UI 选择付款方式并获取付款方式 nonce?