Как обработать Braintree Payment с существующим customerId

Попытка настроить платежную систему iOS и PHP с помощью Braintree.

Я могу настроить 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' => '[email protected]',
),
'options' => array(
'submitForSettlement' => true,
'storeInVaultOnSuccess' => true,
)
));

Однако, когда я пытаюсь обработать второй платеж, я получаю сообщение об ошибке:

91609 – Customer ID has already been taken.

Как я могу обработать второй платеж для того же клиента с тем же customerId (‘testId’) — почему он выдает ошибку, когда я пытаюсь передать платеж с существующим идентификатором клиента? Наверняка стоит просто прикрепить платеж к тому же клиенту? Разве не для этого?

Редактировать:
Поэтому, посмотрев немного больше, я нашел другое поле, которое я могу включить в Braintree_Transaction :: sale следующим образом:

'customerId' => 'testId',

Так что это позволит мне повторно использовать идентификатор клиента, хранящийся в хранилище Брейнтри. Однако при первой транзакции я получаю сообщение об ошибке:

91510 – Customer ID is invalid.

Таким образом, я в конечном итоге поймал 22 — я могу использовать первый набор кода для нового клиента, но не повторяющихся клиентов, и я могу использовать второй для постоянных клиентов, но не новых. Я не могу использовать оба вместе. Поэтому мое решение состоит в том, чтобы создать собственную запись в локальной базе данных, которая определяет, заплатил ли пользователь через braintree ранее или нет, и заменять код соответствующим образом. Есть ли более упорядоченный подход?

5

Решение

Я работаю в Брэйнтри. Если вам нужна дополнительная помощь, вы всегда можете обратиться в нашу службу поддержки.

У тебя правильная идея. Вам необходимо отслеживать, существует ли идентификатор клиента в Braintree.

Есть альтернатива, но я не рекомендую ее, так как она требует дополнительного вызова API.

Вы можете сначала попытаться создать клиента с Braintree, игнорирование ошибки, если код ошибки 91510:

$result = Braintree_Customer::create(array(
'id' => 'testId',
'firstName' => 'John',
'lastName' => 'Doe',
'email' => '[email protected]',
));

Затем вы знаете, что либо клиент уже существует, либо вы только что создали его, и вы можете использовать свой второй метод для создать транзакцию.

7

Другие решения

Есть другая альтернатива, вместо того, чтобы искать в вашей базе данных, вы можете использовать find (‘a_customer_id’), чтобы увидеть, есть ли у Braintree уже идентификатор пользователя. А затем выбрали свой первый подход или второй.

0

По вопросам рекламы [email protected]