Практическое руководство по интеграции 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, но вы можете использовать свой любимый. Это не повлияет на результаты.
- Не забудьте добавить в запрос заголовок Content-Type. Должно быть
application/json
. - Для тестирования Stripe API используйте предоставленные ими тестовые данные.
Наша конечная точка удалась!
Теперь вы можете увидеть созданный платеж в вашем Stripe Dashboard.
Stripe делает интеграцию с их API довольно простой и легкой с помощью SDK.
Есть много ресурсов по Stripe API, которые не были изучены в этой статье.
Вы можете проверить полную документацию Stripe здесь.
Want to Connect? If you have any questions or suggestions, text me on Twitter.