Практическое руководство по интеграции Stripe Charge API

Всем привет! В этой статье я расскажу об интеграции платежного шлюза в Rails API с использованием Stripe API. Это будет единый платежный подход, как при покупке. Я уже писал о регулярных платежах. Вы можете проверить это здесь".

Начиная

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

Мы начнем добавлять Gem Stripe SDK в наш Gemfile, используя следующий код:

gem 'stripe'

После этого не забудьте запустить bundle install в своем терминале.

Теперь вам нужно создать файл инициализатора полосы в вашем приложении. Для этого выполните команду ниже в своем терминале:

touch config/initializers/stripe.rb

Затем откройте файл stripe.rb и напишите содержимое ниже:

Stripe.api_key = Rails.application.credentials.stripe_secret_key

Мы не добавили этот секретный ключ Stripe в наш файл учетных данных, так что давайте сделаем это.

Чтобы открыть файл учетных данных, выполните в терминале следующее:

EDITOR=nano rails credentials:edit

Принесите сюда свой секретный ключ Stripe.

Ваш файл учетных данных должен выглядеть следующим образом:

# aws:
#   access_key_id: 123
#   secret_access_key: 345
# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base: [YOUR SECRET KEY BASE]
stripe_secret_key: [YOUR SECRET KEY HERE]

Обратите внимание, что secret_key_base создается автоматически; вам не нужно редактировать.

Логика заказа и оплаты

Этот раздел посвящен логике модели на нашей стороне, нашему API. Он будет состоять из двух моделей: Order и Payment.

С нашей моделью заказа будет связан один платеж, и он будет принадлежать покупателю. Платеж будет создан как обратный вызов при создании заказа. Обратите внимание, что мы не будем хранить информацию о способе оплаты (например, данные кредитной карты).

Для модели клиента вы можете связать свою модель пользователя или создать конечные точки аутентификации для них в своем API. Мы не будем исследовать эту возможность здесь, потому что она не находится в центре внимания. В этом уроке клиенты будут генерироваться с помощью семян.

Информация о способе оплаты будет передаваться в виде виртуальных атрибутов в конечной точке создания заказа.

Models

Теперь мы закодируем Models на основе логики, которую мы видели выше.

Запустите в терминале следующее:

rails g model Customer name email stripe_id

Customer атрибуты:

  • name будет строкой, представляющей имя клиента;
  • email будет строкой, представляющей адрес электронной почты клиента;
  • stripe_id будет строкой, представляющей ссылку на наш Customer в Stripe API.
rails g model Order amount_cents:integer payment_method:integer customer:references

Order атрибуты:

  • amount_cents будет целым числом, представляющим стоимость заказа.
  • payment_method будет целым числом. Мы будем использовать перечисление rails для отслеживания желаемых значений для него (мы будем использовать только credit_card в этом руководстве, взгляните на все доступные способы оплаты в Stripe)
  • customer будет ссылкой на запись Customer
rails g model Payment order:references stripe_id

Payment атрибуты:

  • order будет ссылкой на запись Order.
  • stripe_id будет строкой, представляющей ссылку на наш Payment в Stripe API.

Теперь нам нужно закодировать наши модели. Они должны выглядеть так:

Наши записи о клиентах никогда не будут созданы без Stripe ID. Перед процессом проверки будет запущен наш обратный вызов create_on_stripe для создания клиента в Stripe.

Узнайте больше о перечислении Rails здесь.

Наш метод get_token обращается к Stripe API, чтобы сгенерировать токен для использования кредитной карты для списания средств с клиента. Сгенерированный токен будет передан в метод create_on_stripe с другими необходимыми параметрами.

Настройка базы данных

Нам понадобится запись клиента для тестирования контроллера, поэтому добавьте следующий код в свой файл seeds.rb:

Customer.create!(name: "Luke Skywalker", email: "[email protected]")

Теперь запустите в своем терминале:

rails db:create db:migrate db:seed

Контроллер

Теперь, работая над контроллером, мы напишем только одно действие создания. Лучшим подходом будет контроллер order и контроллер payment. Во-первых, мы создали заказ. После этого мы создадим платеж в конечной точке оформления заказа. В этом уроке я сосредоточусь не на контроллерах; это обработка платежей и интеграция с Stripe API. Таким образом, параметры платежа будут переданы в момент создания заказа.

Чтобы сгенерировать контроллер, запустите в терминале следующее:

rails g controller Api::V1::Orders

И добавьте следующий код в ваш файл routes.

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      post :orders, to: 'orders#create'
    end
  end
end

Теперь давайте поработаем над контроллером Orders. Вот код:

Обратите внимание, что параметры amount_cents и payment_method заполняются в контроллере автоматически, потому что в этом руководстве мы тестируем только кредитную карту в качестве способа оплаты, и у нас нет модели Product. Представьте, что у нас есть модель Product, представляющая то, что покупается. Мы могли бы определить цену примерно так:

Product.find(:id).amount_cents

Потрясающий!! Мы можем проверить это сейчас.

Тестирование в HTTP-клиенте

На приведенных ниже снимках экрана я использую HTTP-клиент Paw, но вы можете использовать свой любимый. Это не повлияет на результаты.

Наша конечная точка удалась!

Теперь вы можете увидеть созданный платеж в вашем Stripe Dashboard.

Stripe делает интеграцию с их API довольно простой и легкой с помощью SDK.

Есть много ресурсов по Stripe API, которые не были изучены в этой статье.

Вы можете проверить полную документацию Stripe здесь.

Want to Connect?
If you have any questions or suggestions, text me on Twitter.