如何使用现有的 customerId 处理 Braintree 付款

Posted

技术标签:

【中文标题】如何使用现有的 customerId 处理 Braintree 付款【英文标题】:How to Process Braintree Payment with existing customerId 【发布时间】:2015-06-07 17:05:38 【问题描述】:

尝试使用 Braintree 设置 iosphp 支付系统。

我可以用

设置一个 clientToken
$clientToken["client_token"] = Braintree_ClientToken::generate());
return ($clientToken);

我可以通过以下方式处理第一笔付款:

$result = Braintree_Transaction::sale(array(
        'amount' => '1',
        'paymentMethodNonce' => $nonce,
        'customer' => array(
            'id' => 'testId',
            'firstName' => 'John',
            'lastName' => 'Doe',
            'email' => 'john@doe.com',
        ),
        'options' => array(
            'submitForSettlement' => true,
            'storeInVaultOnSuccess' => true,
        )
      ));

但是,当我尝试处理第二笔付款时,我收到了错误:

91609 – Customer ID has already been taken.

如何为具有相同 customerId ('testId') 的同一客户处理第二笔付款 - 为什么在我尝试使用现有客户 ID 进行付款时会引发错误?当然,它应该只是将付款附加给同一位客户吗?不就是为了这个吗?

编辑: 因此,在环顾四周后,我发现了另一个可以包含在 Braintree_Transaction::sale 中的字段,如下所示:

'customerId' => 'testId',

所以这将允许我重新使用存储在 Braintree 保险库中的 customerId。然而,对于第一次交易,我得到了错误:

91510 – Customer ID is invalid.

所以我最终遇到了第 22 个问题 - 我可以将第一组代码用于新客户,但不能用于回头客,我可以将第二组代码用于回头客,但不能用于新客户。我不能同时使用两者。所以我的解决方案是创建我自己的本地数据库条目,确定用户之前是否通过 Braintree 支付过,并相应地替换代码。有没有更精简的方法?

【问题讨论】:

【参考方案1】:

还有其他选择,而不是查看您的数据库,您可以使用 find('a_customer_id') 来查看 Braintree 是否已经有用户 ID。然后选择你的第一种方法或第二种方法。

【讨论】:

【参考方案2】:

我在布伦特里工作。如果您需要更多帮助,可以随时reach out to our support team。

你的想法是对的。您需要跟踪 Braintree 是否存在客户 ID。

有一个替代方案,但我不推荐它,因为它需要额外的 API 调用。

你可以先试试create the customer with Braintree,如果错误码是91510则忽略错误:

$result = Braintree_Customer::create(array(
        'id' => 'testId',
        'firstName' => 'John',
        'lastName' => 'Doe',
        'email' => 'john@doe.com',
));

然后,您知道客户已经存在,或者您刚刚创建了它,您可以使用第二种方法create a transaction。

【讨论】:

感谢@agf - 如果我遇到任何问题,我会寻求支持。我注意到文档中存在一些漏洞,如果您能够向文档团队指出 - 特别是我上面的第一段代码,文档缺少这样一个事实,即您必须使用 item ' 创建一个数组client_token' 而不是仅仅返回对象,否则 iOS 不会接受它。 我觉得文档也很少。它也不直观。到目前为止,*** 支持很好:) 我认为得到两个级别的错误会很好。 Braintree_Transaction::sale 中的付款错误和创建错误。然后,我们可以创建客户、支付方式等,而不会因为出现重复而牺牲销售额。 @MaciekSemik 你可以,setting the "store in vault" option to "true"。 @agf 你知道这个程序是否仍然有效吗?在一次通话中即将“创建或使用现有”有什么改进吗?

以上是关于如何使用现有的 customerId 处理 Braintree 付款的主要内容,如果未能解决你的问题,请参考以下文章

如何注册现有的 Jersey MessageBodyReader Provider 来处理其他内容类型?

如何创建 CodeBlocks IDE C++ 项目以处理现有的共享库项目?

如何使用 .yml 文件更新现有的 Conda 环境

如何使用现有的整数排序对整数元组进行排序?

我们如何使用 Kong 替换现有的 Nginx?

如何在现有的rails模型中使用mongoid来种植数据?