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

Php 如何使用现有customerId处理Braintree付款,php,payment,braintree,Php,Payment,Braintree,尝试使用Braintree设置iOS和PHP支付系统 我可以使用设置clientToken $clientToken["client_token"] = Braintree_ClientToken::generate()); return ($clientToken); 我可以通过以下方式处理首次付款: $result = Braintree_Transaction::sale(array( 'amount' => '1', 'paymentMethodN

尝试使用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.
91510 – Customer ID is invalid.
我如何处理使用相同customerId(“testId”)的同一客户的第二次付款-为什么在我尝试使用现有客户ID传递付款时会抛出错误?当然,它应该将付款附加到同一个客户身上?这不是它的目的吗

编辑: 因此,在仔细查看之后,我发现了另一个可以包含在Braintree_Transaction::sale中的字段,如下所示:

'customerId' => 'testId',
因此,这将允许我重用存储在Braintree vault中的customerId。但是,对于第一次事务,我得到了错误:

91609 – Customer ID has already been taken.
91510 – Customer ID is invalid.
因此,我最终陷入了第22条陷阱——我可以对新客户使用第一组代码,但不能对重复客户使用第二组代码,但不能对新客户使用第二组代码。我不能两者兼用。因此,我的解决方案是创建我自己的本地数据库条目,确定用户之前是否通过braintree付费,并相应地替换代码。有更精简的方法吗?

我在Braintree工作。如果你需要更多的帮助,你随时可以

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

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

如果错误代码为
91510
,则可以首先尝试忽略错误:

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

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

还有其他替代方法,您可以使用find('a_customer_id')来查看Braintree是否已经有了用户id。然后选择第一种方法或第二种方法

谢谢@agf-如果我遇到任何问题,我会寻求支持。我注意到文档中有一些漏洞,如果您能够向文档团队指出,尤其是我上面的第一段代码,文档缺少这样一个事实,即您必须创建一个带有“client_token”项的数组,而不是仅仅返回对象,否则iOS将不会接受它。我觉得文档也有点稀疏。这也不是直观的。到目前为止,Stackoverflow支持是好的:)我认为获得两个级别的错误会很好。Braintree_Transaction::sale中存在支付错误和创建错误。然后,我们可以创建客户、付款方式等,而不必牺牲销售,以防出现重复的情况。@MaciekSemik您可以,by.@agf您知道这个过程是否仍然有效吗?在一次通话中“创建或使用现有”是否有任何改进?