Stripe.js — сбор информации о получателе

Stripe теперь предлагает выплаты, которые работают путем создания токена банковского счета во внешнем интерфейсе. Оттуда токен отправляется на сервер, где вы создаете объект recipient с этим токеном банковского счета. Оттуда вы используете этот объект получателя в передачах.

Хотя я знаком с тем, что вы можете создавать пользовательские формы для платежей с помощью stripe.js, когда дело доходит до создания токена для получателей, я не могу найти никакой документации, кроме это.

Вот моя проблема, сначала моя форма:

<form method="POST" id="inst-form">    

    <div class="form-row">
      <label>
        <span>Bank Location</span>
            <select data-stripe="country">
                <option value="US">United States</option>
            </select>
      </label>
    </div>

    <div class="form-row">
      <label>
        <span>Routing Number</span>
            <input type="text" size="9" data-stripe="routingNumber"/>
      </label>
    </div>

    <div class="form-row">
      <label>
        <span>Account Number</span>
            <input type="text" size="17" data-stripe="accountNumber"/>
      </label>
    </div>


    <button type="submit">Make Recipient!</button>
</form>

На данный момент мне нужны три вещи из этой формы: country, routingNumber и accountNumber. Давайте посмотрим на Javascript, чтобы я мог использовать эти поля с Stripe.js:

  // Create a handler to manage what Stripe returns.
  var stripeResponseHandler = function(status, response) {
    var $form = $('#inst-form');
    if (response.error)
    {
      alert("Error");
      // Not sure how to get these errors.
      $form.find('button').prop('disabled', false);
    }
    else
    {
      var token = response.id;
      $form.append($('<input type="hidden" name="stripeToken" />').val(token));
      $form.get(0).submit();
    }
  };

  // Now the handler is done, lets use it when the form is submitted.
  // On form submission execute:
  jQuery(function($) {
    $('#inst-form').submit(function(event) {
      // Get the form object.
      var $form = $(this);
      // Disable the submit button to prevent repeated clicks
      $form.find('button').prop('disabled', true);
      // Create a token with Stripe
      Stripe.bankAccount.createToken({
        country: $('.country').val(),
        routingNumber: $('.routingNumber').val(),
        accountNumber: $('.accountNumber').val(),
      }, stripeResponseHandler);
      // Prevent the form from submitting with the default action
      return false;
    });
  });

Моя проблема в том, что срабатывает alert(), что означает наличие ошибок. Я просмотрел API и не знаю, как отображать эти ошибки специально для создания получателя. Для платежей он дает следующий пример:

$(".payment-errors").text(response.error.message);

Примечание. Я исключил импорт jQuery/Stripe.js — проблема точно не в этом. Спасибо за помощь!


person Joker    schedule 11.07.2013    source источник


Ответы (2)


По моему опыту, response.error.message действительно является правильным способом действий.

Вот пример моего собственного кода для этого:

Stripe.bankAccount.createToken({
    country: 'US',
    routingNumber: bank_routing_number,
    accountNumber: bank_account_number,
}, function(status, response) {
    if (response.error)
    {
        console.log(response);
        alert(response.error.message);
    }
    else
    {
        var token = response.id;
        /* send the token to the server along with the withdraw request */
    }
});

Если вы по-прежнему не видите правильных ошибок, попробуйте выполнить console.log(response) и просмотреть консоль javascript для получения подсказок.

Вот пример ошибки, которую легко воспроизвести:

Маршрутный номер должен состоять из 9 цифр.

Конечно, вы должны проверять свою учетную запись и номера маршрутизации с помощью процедур, которые предоставляет Stripe.js. Вот пример использования, взятый из их документации:

// This will return true, indicating a potentially valid bank
// routing number.

Stripe.bankAccount.validateRoutingNumber('111000025')
Stripe.bankAccount.validateRoutingNumber('110000000')

// These invalid bank routing numbers will all return false.

Stripe.bankAccount.validateRoutingNumber('990000000')
// (Doesn't pass the checksum check.)
Stripe.bankAccount.validateRoutingNumber('12345')
Stripe.bankAccount.validateRoutingNumber('mistake')

Документы для этого находятся здесь: https://stripe.com/docs/stripe.js#collecting-bank-account-details

person Josh    schedule 13.07.2013

Просто измените форму, как показано ниже. другие вещи в порядке. Поскольку вы получаете значение как $('.country').val(), где .country указывает, что должен быть класс. поэтому просто добавьте класс в свою форму, как показано ниже.

<form method="POST" id="inst-form">    

<div class="form-row">
  <label>
    <span>Bank Location</span>
        <select data-stripe="country" class="country">
            <option value="US">United States</option>
        </select>
  </label>
</div>

<div class="form-row">
  <label>
    <span>Routing Number</span>
        <input type="text" size="9" data-stripe="routingNumber" class="routingNumber"/>
  </label>
</div>

<div class="form-row">
  <label>
    <span>Account Number</span>
        <input type="text" size="17" data-stripe="accountNumber" class="accountNumber"/>
  </label>
</div>

<button type="submit">Make Recipient!</button>

person Vatsal Shah    schedule 10.04.2015