У меня проблема с Брейнтри,
Предположим, что клиент зашел на мой сайт, затем я создаю клиентский токен для этого клиента (передавая идентификатор клиента в Braintree\ClientToken::generate()
функция),
так что, если у него есть какой-либо существующий способ оплаты, он будет загружен автоматически на стороне клиента.
Но если клиент выбирает новый способ оплаты, который уже находится в хранилище:
для карты с тем же номером карты, для Paypal с тем же адресом электронной почты,
затем он автоматически добавляется в хранилище для этого клиента, существует он или нет,
Так что в моем случае я не хочу хранить один и тот же метод оплаты (Paypal или Card) дважды или более для одного и того же пользователя,
Как я могу ограничить, чтобы один и тот же метод оплаты не хранился несколько раз в хранилище?
Полное раскрытие: я работаю в Braintree. Если у вас есть дополнительные вопросы, не стесняйтесь обращаться
служба поддержки.
На самом деле есть параметр, который вы можете установить в параметрах генерации токена клиента, который называется failOnDuplicatePaymentMethod. Если для этой опции задано значение True и способ оплаты уже добавлен в хранилище, запрос не будет выполнен. Это может быть передано, только если передано customer_id. Если проверка не пройдена, эта опция не позволит Drop-in возвращать payment_method_nonce. К сожалению, это не будет работать для методов оплаты Paypal, и для этого есть несколько обходных путей.
Не хранить в хранилище
Сначала вам нужно будет собрать учетную запись электронной почты клиента PayPal в обратном вызове на стороне клиента. Если тип платежа — PayPalAccount, вы можете запустить запрос Braintree :: Customer.search () на электронную почту пользователя. Если при этом появятся клиенты, у которых есть учетная запись электронной почты PayPal, которую вы указали (которая была получена из интеграции на стороне клиента), вам не нужно будет хранить эту учетную запись, вы можете просто продолжить создание другой транзакции на существующем токене.
Удаление дубликатов аккаунтов
Второй обходной путь аналогичен первому. Вы собираете метод оплаты PayPal клиента как обычно (собираете одноразовый номер и передаете его на свой сервер), а затем используете его в запросе API Braintree :: PaymentMethod.create или Braintree :: Customer.create по-прежнему. В возвращенном объекте результата вы можете проверить детали этой транзакции PayPal, paypal_details и проверить это, чтобы найти адрес электронной почты. Если это электронное письмо соответствует одному для учетной записи PayPal для этого клиента, вы можете немедленно удалить новый способ оплаты.
Не стесняйтесь обращаться в службу поддержки Braintree, если вам нужна дополнительная помощь.
Других решений пока нет …