For your Stripe account, add in your PK and SK test values.
PK_TEST_KEY=
SK_TEST_KEY=
Scaffolding the Charges Route
From the console run:
rails generate controller Charges create
This will scaffold our app/controllers/charges_controller.rb controller.
Inside that, let's update the code:
require 'stripe'
class ChargesController < ApplicationController
# POST /charge
# POST /charge.json
def create
# `source` is obtained with Stripe.js; see https://stripe.com/docs/payments/accept-a-payment-charges#web-create-token
charge = Stripe::Charge.create({
amount: params[:amount],
currency: 'aud',
source: 'tok_amex',
receipt_email: params[:receipt_email],
description: 'My First Test Charge (created for API docs)',
})
render json: charge
end
end
This code will make a charge to Stripe using the JSON body params amount and receipt_email.
If the charge is successful, it will return the charge information as JSON.
Updating config/routes.rb
Ensure routes has the following for POST:
Rails.application.routes.draw do
# ... the rest is omitted for brevity
post 'charges/create'
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
This ensures that we can send a POST request to http://localhost:PORT/charges/create when we run the server.
Running the code
Run rails server to get our server up and running (defaulting to 3000).
In this example using HTTPie, call http POST http://localhost:3000/charges/create amount:=1700 receipt_email=hello_rails@example.com and we will get back our charge results sent as JSON. Hooray!
I chose to use HTTPie because I feel it is a fun tool that more should know about! Alternative, you could do the above using curl as well (or anything that can make a POST request for a matter of fact).