С Braintree, как не сохранять дубликаты карт при создании транзакции? - PullRequest
0 голосов
/ 25 октября 2018

Я знаю, что при создании способа оплаты я могу использовать failOnDuplicatePaymentMethod для блокировки дубликатов карт.Но когда я использую опцию storeInVaultOnSuccess с Braintree_Transaction::sale, как лучше не сохранять карту, если она уже сохранена?

Редактировать:

Позвольте мне прояснить мою ситуацию, чтобы убедиться.На своей странице оформления заказа я в настоящее время использую этот JavaScript:

braintree.setup(
    myToken,
    'custom',
    {
        id: 'my-form-id',
        hostedFields: {
            ...
        },
        onPaymentMethodReceived: function(obj) {
            ...
        },
        onError: function(obj) {
            ...
        }
    }
);

Клиент заполняет свой номер CC, CVV и дату истечения срока действия, нажимает кнопку отправки и затем запускается обратный вызов onPaymentMethodReceived.В этом обратном вызове JS я выполняю AJAX-вызов на свой сервер и передаю одноразовый номер.На бэкэнде я звоню Braintree_Transaction::sale, чтобы выставить счет клиенту.

Мне всегда нужно Braintree_Transaction::sale для успешного завершения, чтобы продажа прошла.И затем в дополнение к этой продаже, я хочу, чтобы карта была сохранена, если клиент установил флажок «сохранить мою карту», ​​а карта еще не сохранена.

На этой странице оформления заказа у клиента естьвозможность выбрать сохраненную карту вместо ввода всей информации о своей карте, но они могут ввести всю информацию о карте снова (для уже сохраненной карты) вместо выбора сохраненной карты.

Как бы вы это сделалиучитывая эту настройку?Ваши настройки ниже все еще применяются?Если да, то как именно я интегрирую нижеприведенное с моей настройкой выше?Или мне нужно изменить для этого свой UI / UX (я думаю, что это довольно стандартный процесс оформления заказа)?

1 Ответ

0 голосов
/ 26 октября 2018

Полное раскрытие: я работаю в Braintree.Если у вас есть какие-либо дополнительные вопросы, свяжитесь с support .

Невозможно предотвратить повторные способы оплаты при совершении вызова API Braintree_Transaction::sale.Тем не менее, вы все равно можете достичь своей цели с некоторыми настройками на вашем клиенте.Вот эти шаги:

  1. На вашем сервере создайте клиентский токен и включите customer_ID и failOnDuplicatePaymentMethod параметры:

`` `

$clientToken = $gateway->clientToken()->generate([
    "customerId" => "aCustomerId",
    "options" => [
        "failOnDuplicatePaymentMethod" => true
        ] ]);

` ``

Используйте этот токен клиента в качестве авторизации при создании экземпляра клиента Braintree :

`` `

var createClient = require('braintree-web/client').create;

createClient({
  authorization: CLIENT_AUTHORIZATION
}, function (createErr, clientInstance) {
  // ...
});

Per Документы Braintree относительно создания клиентского токена,

Если опция [failOnDuplicatePaymentMethod] пропущена и тот же метод оплаты уже добавлен в хранилище для любого клиента, запрос не будет выполнен.Это может быть передано, только если передан также $ customerId.Если проверка не пройдена, эта опция не позволит Drop-in возвращать $ paymentMethodNonce.Этот параметр будет игнорироваться для методов оплаты PayPal, Pay with Venmo, Apple Pay и Google Pay.

...