Braintree Gateway: Используя customerId, как я могу снять единовременную плату с кредитной карты с помощью PaymentMethodRequest или TransactionRequest? - PullRequest
0 голосов
/ 25 июня 2019

Я использую пример Braintree Sping, найденный здесь: https://github.com/braintree/braintree_spring_example.

В классе контроллера есть метод, который списывает с новой кредитной карты / клиента определенную сумму. Контроллер получает эту сумму из данных POST.

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

Похоже, что способ сделать это - создать новый PaymentMethodRequest, как показано здесь: https://developers.braintreepayments.com/reference/request/payment-method/create/java

Но когда я смотрю на API, я не вижу, как установить сумму для списания с помощью PaymentMethodRequest. В отличие от класса TransactionRequest, PaymentMethodRequest не позволяет устанавливать сумму.

Итак, учитывая кастомериду, как я могу снять единовременную плату со сводной карты?

Спасибо за помощь.

Это метод обработки информации о сообщении


    public String postForm(@RequestParam("amount") String amount, @RequestParam("payment_method_nonce") String nonce, Model model, final RedirectAttributes redirectAttributes) {
 // ... validate the amount ... 

        TransactionRequest request = new TransactionRequest()
            .amount(decimalAmount)
            .paymentMethodNonce(nonce)
            .options()
                .submitForSettlement(true)
                .done();

        Result<Transaction> result = gateway.transaction().sale(request);

    // ... process result....
    }

Кажется, я должен быть в состоянии сделать

PaymentMethodRequest request = new PaymentMethodRequest()
  .amount(decimalAmount) // this isn't actually allowed by the class
  .customerId(customer.getId())
  .token("the_token")
  .paymentMethodNonce(nonceFromTheClient);

Но PaymentMethodRequest не имеет такой функциональности.

1 Ответ

0 голосов
/ 26 июня 2019

Оказывается, я вносил изменения не в тот метод.

Для достижения своей цели я не внес никаких изменений в postForm ().Вместо этого я изменил checkout ().Я добавил в код строки customerId и ClientTokenRequest.Здесь я жестко закодировал идентификатор клиента.Это только для демонстрационных целей.

   @RequestMapping(value = "/checkouts", method = RequestMethod.GET)
    public String checkout(Model model) {
        // Two new lines for the new way  - retrieve customer specific token from the vault
          String customerId = "555555555"; // Hard coded just to make it work.
        ClientTokenRequest clientTokenRequest = new ClientTokenRequest() .customerId(customerId);

        // One modified line for the new way - gets vaulted payment methods: now use clientTokenRequest to generate clientToken
        String clientToken = gateway.clientToken().generate(clientTokenRequest);

        // old way - one time charge with all new data. generate() takes no arguments
        /* String clientToken = gateway.clientToken().generate(); */

        model.addAttribute("clientToken", clientToken);

        return "checkouts/new";
    }
...