Храните и извлекайте данные дебетовой и кредитной карты в Braintree

Я использую Braintree's v2 drop-in ui android для оплаты, а мой внутренний сервер находится в node.js. Я успешно внедрил раздел оплаты, но теперь мне нужно сохранить card details и автоматически вычесть сумму из сохраненных debit/credit card или paypal account.

Я создаю клиентский токен и храню этот токен в своей базе данных. Используя этот токен, я генерирую одноразовый номер. Затем я отправляю одноразовый номер на внутренний сервер для transaction.sale().

Вот фрагмент кода для раздела оплаты

if (!TextUtils.isEmpty(braintreeClientToken)) {
    DropInRequest dropInRequest = new DropInRequest()
                    .clientToken(braintreeClientToken);
    startActivityForResult(dropInRequest.getIntent(this), REQUEST_CODE);
}

OnActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE) {
        if (resultCode == Activity.RESULT_OK) {
            DropInResult result = data.getParcelableExtra(DropInResult.EXTRA_DROP_IN_RESULT);
            PaymentMethodNonce paymentMethodNonce = result.getPaymentMethodNonce();
            String nonce = "";
            if (paymentMethodNonce != null)
                nonce = paymentMethodNonce.getNonce();
            // use the result to update your UI and send the payment method nonce to your server
            if (!TextUtils.isEmpty(nonce)) {
                NonceRequest obj = new NonceRequest("ANDROID", "1",
                            "DRIVER-SAVE-PAYMENT", "1", nonce);
                Call<NonceResponse> call = RestService.getInstance().restInterface.sendNonceToServer(userId, userToken, obj);
                    call.enqueue(new Callback<NonceResponse>() {
                    @Override
                    public void onResponse(Call<NonceResponse> call, Response<NonceResponse> response) {

                    }

                    @Override
                    public void onFailure(Call<NonceResponse> call, Throwable t) {

                    }
                });
            }
        } else if (resultCode == Activity.RESULT_CANCELED) {
            // the user canceled
        } else {
            // handle errors here, an exception may be available in
            Exception error = (Exception) data.getSerializableExtra(DropInActivity.EXTRA_ERROR);
        }
    }
}

Может ли кто-нибудь сказать мне, как сохранить детали credit/debit card или paypal account и создать одноразовый номер из сохраненного payment-method


person Kaushik    schedule 27.06.2017    source источник


Ответы (1)


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

Большая часть того, что вы хотите сделать, будет касаться изменений на стороне вашего сервера. Если вы хотите сохранить карту, вы можете либо передать параметр options storeInVaultOnSuccess, который сохранит эту карту в случае успеха и создаст связанного клиента с этой картой. В противном случае вы также можете передать этот одноразовый номер в PaymentMethod.Create позвонить. Если эти вызовы будут успешными, для этих карт будет создан токен, который вы затем сможете использовать повторно. Основываясь на том факте, что вы заявили, что хотите «автоматически вычитать сумму», я думаю, вы можете настроить подписку с использованием этого токена. Для этого вам нужно создать план, который является шаблоном для ваших подписок в панели управления. Затем вам нужно создать подписку, используя сохраненный токен. что вы создали. Если вы хотите, чтобы эти сохраненные карты отображались во всплывающем окне для выбора клиентом, вам необходимо передать customer_id в вызове ClientToken.generate. Это позволит клиенту выбрать сохраненную карту из своего списка и повторно использовать ее в Drop-in.

person C Joseph    schedule 27.06.2017
comment
Спасибо за ваш ответ, сумма регулярного платежа не может быть переменной, не могли бы вы уточнить одно сомнение, нужно ли мне создавать план? - person Kaushik; 28.06.2017
comment
Чтобы создать подписку, вам необходимо создать план. Когда вы создаете план, здесь вы указываете сумму. - person C Joseph; 29.06.2017
comment
Повторного платежа нет. Это приложение для заказа такси. Там мы хотим вычесть сумму с пассажира из ранее сохраненного способа оплаты. По этой причине сумма будет переменной, и я не могу применять подписку, например, ежемесячно, ежегодно, ежеквартально, ежедневно. - person Kaushik; 30.06.2017
comment
Поэтому кажется, что вам просто нужна возможность повторно использовать карты из свода. В этом случае все, что вам нужно сделать, это то же самое, что и выше, вы просто отрегулируете параметр суммы в вызове transaction.sale(). - person C Joseph; 03.07.2017
comment
Я использую пользовательский интерфейс, поэтому DropInResult.fetchDropInResult не работает, так как я могу показать сохраненную информацию о карте в пользовательском интерфейсе. Я создам новую тему или вы можете дать решение здесь? - person Kaushik; 03.07.2017
comment
Правильно, вам не следует использовать DropiInResult.fetchDropInResult, если вы планируете использовать собственный пользовательский интерфейс. Чтобы вы могли хранить сохраненную информацию о карте без вставки, потребуется специальная логика, в которой вы извлекаете карты на стороне сервера на основе клиента, чтобы показать их на стороне клиента. Это не тот метод, который Braintree предоставляет за пределами Drop-in. - person C Joseph; 05.07.2017
comment
Да, я понял это и внедрил пользовательскую логику на стороне сервера, спасибо за вашу помощь. - person Kaushik; 06.07.2017
comment
не могли бы вы прояснить одно сомнение. Работает ли настоящая дебетовая/кредитная карта в режиме песочницы? - person Kaushik; 01.08.2017
comment
нет, вы не должны использовать настоящие карты в песочнице. только тестовые карточки: developers.braintreepayments.com/guides/credit- карты/ - person C Joseph; 01.08.2017