Плед с приложением Stripe Rails

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

Я установил драгоценный камень в клетку и добавил свои секретные ключи и клиентские данные через Фигаро, но теперь я потерялся.

Plaid.rb:

   Plaid.configuration.stripe = {
    p.client_id = ENV['PLAID_CLIENT_ID'],
    p.secret = ENV['PLAID_SECRET_KEY'],
    p.env = :tartan  # or :production
  end  

Плед Ссылка:

       <button id='linkButton'>Open Plaid Link</button>
        <script src="https://cdn.plaid.com/link/stable/link-initialize.js"></script>
        <script>
        var linkHandler = Plaid.create({
          env: 'tartan',
          clientName: 'ACCR',
          key: '<<< MY_PUBLIC_KEY >>>',
          product: 'auth',
          selectAccount: true,
          env: 'tartan',
          onSuccess: function(public_token, metadata) {
            // Send the public_token and account ID to your app server.
            console.log('public_token: ' + public_token);
            console.log('account ID: ' + metadata.account_id);
          },
        });

        // Trigger the Link UI
        document.getElementById('linkButton').onclick = function() {
          linkHandler.open();
        };
        </script>

Вот что у меня в контроллере для Stripe:

    def new 
    @stripe_btn_data = {
     key: "#{ Rails.configuration.stripe[:publishable_key] }",
    }   
    end

  #1 Create a charge
      customer = if current_user.stripe_id?
                    Stripe::Customer.retrieve(current_user.stripe_id)
                  else
                    Stripe::Customer.create(email: :stripeEmail)
                  end

      current_user.update(
        stripe_id: customer.id,
      )

       stripe_charge = Stripe::Charge.create(
         customer:    customer.id,
         amount:      (current_order.subtotal * 100).to_i,
         currency:    'usd',
       )
... more information to create an order then send email after charge. 

Что мне нужно включить в свой контроллер или где-либо еще, чтобы создать зарядку с помощью пледов и полос?

1 ответ

Решение

У Plaid есть описание того, как это подключить - хотя приведенный пример находится в Node.js - и в Stripe также есть руководство.

Тем не менее, вам нужно будет добавить код в onSuccess обработчик для отправки public_token а также metadata.account_id к конечной точке "обмена токенами" вашего сервера, и как только вы это получите, вы можете обменять их на токен Stripe, и, наконец, вам нужно будет прикрепить этот токен к Заказчику.

Итак, как то так:

plaid_user = Plaid::User.exchange_token(
  public_token,
  metadata_dot_account_id,
  product: :auth
)

puts plaid_user.stripe_bank_account_token

customer = Stripe::Customer.retrieve("<customer-id>")

customer.sources.create({
  :source => plaid_user.stripe_bank_account_token
})

И тогда вы можете сделать свой Stripe::Charge.create(),

Другие вопросы по тегам