Полоса из песочницы, чтобы жить, вопрос об источнике? - PullRequest
0 голосов
/ 22 марта 2019

У меня есть Stripe Connect, работающий в режиме тестирования, но мне любопытно узнать об «источнике» ..

Следующий код предварительно разрешает платежи в моем контроллере:

token = params[:stripeToken]
            payment_form = params[:payment_form]

            customer = Stripe::Customer.create({
              :source  => 'tok_visa',
              :email => params[:stripeEmail],
            })

            charge = Stripe::Charge.create({
              amount: @amount,
              currency: 'usd',
              customer: customer.id,
              capture: false,
          })

Я хочу перейтив режиме реального времени, но мне нужно обновить источник до чего-то другого, кроме 'tok_visa' ...

Что должно идти туда?

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

Когда я использую

:source => @order.order_token,

в пользовательском создании или создании заряда, он говорит мне:

Stripe::InvalidRequestError (No such token: KFU8PmscYRDsXs1234560jG4sn8J-S8TMi123456BUBkWr9aOvw):

Это при использовании номера теста: 4242424242424242

Работает с тестовым токеном, а не номером?Это нормально?

ОБНОВЛЕНИЕ:

Когда я использую следующее:

token = params[:stripeToken]
            payment_form = params[:payment_form]

            customer = Stripe::Customer.create({
              # :source  => 'tok_visa',
              :source => token,
              :email => order_params[:email],
            })

            charge = Stripe::Charge.create({
              amount: @amount,
              currency: 'usd',
              customer: customer.id,
              capture: false,
          })

Заряд не взимается и заказ не сохраняется (как и в случае плохой картыи т. д.)

JSON в полоску

{
  "error": {
    "code": "missing",
    "doc_url": "https://stripe.com/docs/error-codes/missing",
    "message": "Cannot charge a customer that has no active card",
    "param": "card",
    "type": "card_error"
  }
}

JS для элементов:

var stripe = Stripe('pk_test_xxxxxxxxxxxxxxxxxxxxx');

var elements = stripe.elements();

var style = {
  base: {
    color: '#32325d',
    lineHeight: '24px',
    fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
    fontSmoothing: 'antialiased',
    fontSize: '16px',
    '::placeholder': {
      color: '#aab7c4'
    }
  },
  invalid: {
    color: '#fa755a',
    iconColor: '#fa755a'
  }
};

var card = elements.create('card', {style: style});


card.mount('#card-element');


card.addEventListener('change', function(event) {
  var displayError = document.getElementById('card-errors');
  if (event.error) {
    displayError.textContent = event.error.message;
  } else {
    displayError.textContent = '';
  }
});

var form = document.getElementById('payment_form');
form.addEventListener('submit', function(event) {
  event.preventDefault();

  stripe.createToken(card).then(function(result) {
    if (result.error) {
      var errorElement = document.getElementById('card-errors');
      errorElement.textContent = result.error.message;
    } else {
      stripeTokenHandler(result.token);
    }
  });
});

  function stripeTokenHandler(token) {
    var form = document.getElementById('payment_form');
    var hiddenInput = document.createElement('input');
    hiddenInput.setAttribute('type', 'hidden');
    hiddenInput.setAttribute('name', 'stripeToken');
    hiddenInput.setAttribute('value', token.id);
    form.appendChild(hiddenInput);

    form.submit();
  }

Форма:

<%= form_for(@order, url: listing_orders_path([@listing, @listing_video]), remote: true ) do |form| %>


  <div class="form-group">
    <%= form.label :name, "Their Name" %>
    <%= form.text_field :name, class: "form-control", required: true, placeholder: "Steph" %>
  </div>
...

  <script src="https://js.stripe.com/v3/"></script>



  <div class="form-row">
      <label for="card-element">
         Credit or debit card
      </label>
    <div id="card-element" class="form-control">
    </div>

    <div id="card-errors" role="alert"></div>
  </div>
  <br>
  <div class="form-group">



  <%= form.submit  id:"button-element"  %>

 </div>

<span class="token"></span>

<% end %>

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Решил, добавив HTML-сообщение в форму.

это не создавало токены из-за этого. Без токена он ничего не может сделать

0 голосов
/ 22 марта 2019

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

Когда вы создаете клиента, вы создаете его с источником по умолчанию, к которому автоматически относятся все будущие расходы. На вашем веб-интерфейсе вам нужно изменить createToken на createSource - все после этого примерно одинаково, за исключением переменной, на которую вы ссылаетесь в ответе: source вместо token.

  stripe.createSource(card).then(function(result) {
    if (result.error) {
      var errorElement = document.getElementById('card-errors');
      errorElement.textContent = result.error.message;
    } else {
      stripeTokenHandler(result.source);
    }
  });
...