Afterpay is a payment gateway which allow consumer to ‘Buy Now, Enjoy Now and Pay Later’. Afterpay is 100% interest free and easy to pay by its installment process. These all can be done by registering in Afterpay with the personal and card details. Consumer can buy stuff upto $1000 and pay that amount with 4 equal installments that will be due every 2 weeks. Consumer can make repayments to Afterpay any time BEFORE the due date. Otherwise, Afterpay will automatically try process payments on the scheduled dates from registered card. If a payment is not processed on or before the due date, late fees will apply – initial $10 late fee, and a further $7 if the payment remains unpaid 7 days after the due date.
Required information for integration in Rails application
To get started with the integration, the credentials we need are as follows:
- Merchant ID
- Merchant Key
- Merchant Name
- User Agent.
These all credentials will be provided by the afterpay team once you get in touch with their customer assistance team.
Test Merchant account
Need to get register with email and password to get the sandbox merchant credentials, which will allow to create order, capture payment (create charge) and create refund. Credentials to pay via afterpay will be:
- Your personal details.
-
Your card details
- Card number (4242424242424242 for test)
- Card expiry date
- PCV code
Integration process in Rails Application
As, there is not any gem available to integrate afterpay in Rails application, need to access the afterpay API using its curl. Further API documentation will be available in https://docs.afterpay.com/au-online-api-v1.html#api-endpoint
Configuration
To get the authorization token need to encode MERCHANT_ID:MERCHANT_KEY into Base64. So, the actual authorization code will be ‘Basic + encoded authorization.’
API operation
Let’s create a separate service for the afterpay.
require 'rest-client'
require 'json'
class AfterPayHandler
end
Create Order
Once, you got the authorization token and and the values as in https://docs.afterpay.com/au-online-api-v1.html#orders this will redirect you to the afterpay payment portal if you have required and called the afterpay javascript with the order token, where you need to add your login and payment credentials. Where you can set the redirect_url after success and fail. If the ordering process got succeeded you will get “order token” and “token expiry date” as response.
def create_order
order = {totalAmount: {...}}
user_agent = ENV['AFTERPAY_USER_AGENT']
authorization = "Basic" + " " + ENV['AFTERPAY_API_KEY']
url = "https://api-sandbox.afterpay.com/v1/orders"
header = {content_type: "application/json", user_agent: user_agent,
authorization: authorization, accept: 'application/json'}
response = RestClient::Request.execute(method: :post, url: url, payload: JSON.dump(order), headers: header)
end
Capture Payment
After you get the order token from the create order API you can proceed for the capture payment process. Here its a bit tricky cause the token has only of 30min lifetime. So, it would be better if you capture payment as soon as the order created. For the capturing payment you can go through
https://docs.afterpay.com/au-online-api-v1.html#capture-payment.
def capture_payment
token = ENV['TOKEN']
user_agent = ENV['AFTERPAY_USER_AGENT']
authorization = "Basic" + " " + ENV['AFTERPAY_API_KEY']
url = "https://api-sandbox.afterpay.com/v1/payments/capture"
header = {content_type: "application/json", user_agent: user_agent,
authorization: authorization, accept: 'application/json'}
response = RestClient::Request.execute(method: :post, url: url, payload: JSON.dump({token: token}), headers: header)
end
Refund
Refund API will refund the captured order amount.
def refund
body = { amount: { amount:payment_amount.to_s, currency: "AUD" }}
user_agent = ENV['AFTERPAY_USER_AGENT']
authorization = "Basic" + " " + ENV['AFTERPAY_API_KEY']
url = "https://api-sandbox.afterpay.com/v1/payments/#{@reservation.charge_id}/refund"
header = {content_type: "application/json",
authorization: authorization, accept: 'application/json'}
response = RestClient::Request.execute(method: :post, url: url, payload: JSON.dump(body), headers: header)
end
For more details on refunding you can follow:
https://docs.afterpay.com/au-online-api-v1.html#create-refund
Gurzu is a Ruby on Rails company based in Nepal. Here at Gurzu we transform ideas into world-class products. Our professional team is fluent in 3Rs (Ruby on Rails, React and React Native). We’re ready to design, build and develop something that your users will love. We love building web applications and do so with extreme passion and craftsmanship.
Our services include following. Product Design. Web application development. Mobile application development. Technology trainings. Infrastructure setup and monitoring. Engineers/Designers leasing.