Razorpay Ruby bindings
This is the base ruby gem for interacting with the Razorpay API. This is primarily meant for users who wish to perform interactions with the Razorpay API programatically.
Installation
Add this line to your application's Gemfile:
gem 'razorpay'
And then execute:
$ bundle
Or install it yourself as:
$ gem install razorpay
Usage
Remember to require 'razorpay'
before anything else.
Next, you need to setup your key and secret using the following:
Razorpay.setup('key_id', 'key_secret')
You can set customer headers for your requests using the following:
Razorpay.headers = {"CUSTOM_APP_HEADER" => "CUSTOM_VALUE"}
You can find your API keys at https://dashboard.razorpay.com/#/app/keys.
If you are using rails, the right place to do this might be config/initializers/razorpay.rb
.
The most common construct is capturing a payment, which you do via the following:
Razorpay::Payment.fetch("payment_id").capture({amount:500})
# Note that the amount should come from your session, so as to verify
# that the purchase was correctly done and not tampered
You can refund a payment via the following:
Razorpay::Payment.fetch("payment_id").refund({amount:500})
refunds = Razorpay::Payment.fetch("payment_id").refunds
A payment can also be refunded without fetching it:
refund = Razorpay::Refund.create(payment_id:"payment_id")
Razorpay::Refund.fetch(refund.id)
If payment is captured or refunded via capture!
or refund!
, then the calling object is also updated:
payment = Razorpay::Payment.fetch('payment_id')
payment.status
# 'authorized'
payment.capture!
payment.status
# 'captured'
payment.refund!
payment.status
# 'refunded'
For other applications (such as fetching payments and refunds), see our online documentation on https://docs.razorpay.com
Orders API
You can use the orders API using the following constructs:
You can find docs at https://docs.razorpay.com/v1/page/orders
order = Razorpay::Order.create amount: 5000, currency: 'INR', receipt: 'TEST'
# order.id = order_50sX9hGHZJvjjI
# Same collection as Refunds or Payments
orders = Razorpay::Order.all
# Fetching an Order
order = Razorpay::Order.fetch('order_50sX9hGHZJvjjI')
puts order.amount
# Fetching payments corresponding to an order
payments = order.payments
Verification
You can use the Utility class to verify the signature received in response to a payment made using Orders API
puts payment_response
# {
# :razorpay_order_id => "fake_order_id",
# :razorpay_payment_id => "fake_payment_id",
# :razorpay_signature => "signature"
# }
Razorpay::Utility.verify_payment_signature(payment_response)
You can also verify the signature received in a webhook:
Razorpay::Utility.verify_webhook_signature(webhook_body, webhook_signature, webhook_secret)
Customers
# Create a customer
customer = Razorpay::Customer.create email: 'test@razorpay.com', contact: '9876543210'
puts customer.id #cust_6vRXClWqnLhV14
Cards
# Fetch a card
card = Razorpay::Card.fetch('card_7EZLhWkDt05n7V')
puts card.network #VISA
You can find cards API documentation at https://docs.razorpay.com/v1/page/cards.
Invoices
# Creating an invoice
invoice = Razorpay::Invoice.create customer_id: customer.id, amount: 100, currency: 'INR', description: 'Test description', type: 'link'
You can find invoices API documentation at https://docs.razorpay.com/v1/page/invoices.
Plan
# Creating a plan
plan = Razorpay::Plan.create interval: 1, period: 'monthly', item: { name: 'fake_plan', description: 'fake_desc', currency: 'INR', amount: 500 }, notes: { identifier: 'plan_monthly_super' }
You can find plan API documentation at https://razorpay.com/docs/subscriptions/api/#plan.
Subscription
# Creating a subscription and starting after 24 hours (24 hours = 60 * 60 * 24)
subscription = Razorpay::Subscription.create plan_id: plan.id, customer_id: customer.id, start_at: (Time.now + (60 * 60 * 24)).to_i, total_count: 3
You can find subscription API documentation at https://razorpay.com/docs/subscriptions/api/#subscription.
Addon
# Creating an addon
subscription_addon = Razorpay::Addon.create subscription.id, item: { name: 'fake_plan', description: 'fake_desc', currency: 'INR', amount: 500 }, quantity: 1
# Fetching an addon
addon = Razorpay::Addon.fetch subscription_addon.id
You can find addon API documentation at https://razorpay.com/docs/subscriptions/api/#add-on.
Development
- Everything is namespaced under the Razorpay module
- We use rubocop for checking style guidelines
- Rake + MiniTest is using as the testrunner
- Webmock is used as the request mock framework
- HTTParty is used for making requests
- Travis is used for CI
- Coveralls is used for coverage reports
Contributing
- Fork it ( https://github.com/razorpay/razorpay-ruby/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Run
rake
andrubocop
after making your changes to make sure you didn't break anything - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
Supported Versions
While we support all currently supported versions of Ruby only, the code is tested against the following versions:
- 1.9.3
- 2.0.0
- 2.1.10
- 2.3.8
- 2.4.6
- 2.5.5
- 2.6.2
Release
Steps to follow for a release:
- Merge the branch with the new code to master.
- Bump the Version in
lib/razorpay/constants.rb
- Rename Unreleased to the new tag in
CHANGELOG
- Fix links at bottom in
CHANGELOG
- Commit (message should include version number)
- Tag the release and push to GitHub. Get the tag signed using Razorpay GPG key.
- Create a release on GitHub using the website with more details about the release
- Run
gem build razorpay-ruby.gemspec
- Run
gem push razorpay-{version}.gem
gem push
will ask you for credentials, if you are not logged in already.