Попытка настроить платежную систему 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 ранее или нет, и заменять код соответствующим образом. Есть ли более упорядоченный подход?
Я работаю в Брэйнтри. Если вам нужна дополнительная помощь, вы всегда можете обратиться в нашу службу поддержки.
У тебя правильная идея. Вам необходимо отслеживать, существует ли идентификатор клиента в Braintree.
Есть альтернатива, но я не рекомендую ее, так как она требует дополнительного вызова API.
Вы можете сначала попытаться создать клиента с Braintree, игнорирование ошибки, если код ошибки 91510
:
$result = Braintree_Customer::create(array(
'id' => 'testId',
'firstName' => 'John',
'lastName' => 'Doe',
'email' => '[email protected]',
));
Затем вы знаете, что либо клиент уже существует, либо вы только что создали его, и вы можете использовать свой второй метод для создать транзакцию.
Есть другая альтернатива, вместо того, чтобы искать в вашей базе данных, вы можете использовать find (‘a_customer_id’), чтобы увидеть, есть ли у Braintree уже идентификатор пользователя. А затем выбрали свой первый подход или второй.