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

时间:2015-04-02 16:41:35

标签: php payment braintree

尝试使用Braintree设置iOS和PHP支付系统。

我可以使用

设置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付款并且代替了代码。是否有更简化的方法?

2 个答案:

答案 0 :(得分:7)

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

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

还有其他选择,但我不推荐它,因为需要额外的API调用。

如果错误代码为91510,您可以先尝试create the customer with Braintree,忽略错误:

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

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

答案 1 :(得分:0)

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