Как включить новый Stripe Checkout в Rails? - PullRequest
0 голосов
/ 24 января 2020

Это настройка Checkout (без подключения), которая была у меня раньше, и она работала хорошо:

home / обязанности / new. html .erb

<%= form_tag charges_path do %>
  <div id="error_explanation">
    <% if flash[:error].present? %>
      <p><%= flash[:error] %></p>
    <% end %>
  </div>

  <script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
   data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
   data-description="bishbashbooked payment"
   data-amount="700"
   data-currency="gbp"
   data-locale="auto">
  </script>
<% end %>

charge_controller.rb

class ChargesController < ApplicationController

 def new
    render 'home/charges/new'
  end

def create
    customer = Stripe::Customer.create(
      :email => params[:stripeEmail],
      :source  => params[:stripeToken]
    )

charge = Stripe::Charge.create(
  :customer    => customer.id,
  :amount      => 700,
  :description => 'bishbashbooked',
  :currency    => 'gbp',
)

rescue Stripe::CardError => e
    flash[:error] = e.message
    redirect_to new_charge_path
  end

end

Во-первых, как бы я изменил это, чтобы оно соответствовало SCA (с новым Checkout), но также, чтобы платеж отправлялся продавцу? подключен аккаунт? Мне нужна кнопка на веб-сайте с надписью «оплатить сейчас», которая перенаправит вас на новую страницу Stripe Checkout. После успешного платежа мне нужно перенаправить меня на указанный c URL.

Я видел из документов, что мне нужно включить это:

session = Stripe::Checkout::Session.create({
  payment_method_types: ['card'],
  line_items: [{
    name: "Cucumber from Roger's Farm",
    amount: 200,
    currency: 'usd',
    quantity: 10,
  }],
  payment_intent_data: {
    application_fee_amount: 200,
  },
  success_url: 'https://example.com/success',
  cancel_url: 'https://example.com/cancel',
}, {stripe_account:  @group.stripe_user_id })

И это:

// Initialize Stripe.js with the same connected account ID used when creating
// the Checkout Session.
var stripe = Stripe('pk_test_xxxxxxxxxxxxxxxxxxxxxxxx', {
  stripeAccount: <%= @group.stripe_user_id %>
});

stripe.redirectToCheckout({
  // Make the id field from the Checkout Session creation API response
  // available to this file, so you can provide it as parameter here
  // instead of the {{CHECKOUT_SESSION_ID}} placeholder.
  sessionId: <%= session.id %>
}).then(function (result) {
  // If `redirectToCheckout` fails due to a browser or network
  // error, display the localized error message to your customer
  // using `result.error.message`.
});

Эти два бита кода, кажется, все, что мне нужно. Однако я, во-первых, не знаю, куда поместить этот код и, во-вторых, как заставить его работать так, как мне нужно. Где кнопка «оплатить сейчас»? Как клиенты обращаются к Stripe, используя это?

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

Спасибо, и, пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

1 Ответ

1 голос
/ 24 января 2020

Для построения потока Checkout в Rails есть довольно много подходов, которые будут работать. Вот один из способов сделать это:

  1. Создание продуктов, которые вы продаете, в вашей базе данных
  2. У вас есть кнопка для каждого продукта, который вы хотите продать или собрать продукты в корзину или аналогичные
  3. Создайте CheckoutController, который будет получать идентификаторы продуктов или корзину с идентификаторами продуктов
  4. В вашем CheckoutContoller (назовите действие по своему усмотрению) создайте Stripe CheckoutSession [0]
  5. Для каждого продукта добавьте его в CheckoutSession в виде отдельной позиции [1]
  6. Имейте представление erb, которое получает идентификатор сеанса Checkout и перенаправляет пользователя на Stripe Checkout [ 2]
  7. Используя URL-адрес перенаправления, затем go вернитесь на свой сайт и отобразите какое-то сообщение об успешном завершении [3].
  8. Обработайте любые действия / рекомендации по пост-оплате

[0] https://stripe.com/docs/payments/checkout/one-time#create -сессия-сеанс [1] https://stripe.com/docs/api/checkout/sessions/create#create_checkout_session -line_items [2] https://stripe.com/docs/payments/checkout/one-time#redirect -чек-аут [3] https://stripe.com/docs/payments/checkout/fulfillment

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...