The Paysafe Ruby Gem
A well tested Ruby interface to the Paysafe REST API (formerly Optimal Payments). Requires Ruby 2.5 and up. Not all API actions are supported yet. Since the Paysafe API uses camelCase, this gem will handle converting to and from snake_case for you.
Installation
Add the following to your application's Gemfile:
gem 'paysafe'
Or install directly with gem install paysafe
.
To try out the gem, just follow the Development section instructions as the built in setup script will direct you on how to provide the necessary API info.
Usage
Client Configuration
Create and configure a client with your API authentication.
client = Paysafe::REST::Client.new(
api_key: 'your_api_key',
api_secret: 'your_api_secret',
test_mode: false, # to enable Production requests, default is `true`
account_number: '1234', # used for the Card Payments API
# Provide optional timeouts in seconds
# timeout: { connect: 2, read: 5, write: 10 }
# Or as a global timeout in seconds
# timeout: 20
)
At a minimum the following options: api_key
, api_secret
, and test_mode
should be specified. The account_number
is only necessary for certain API's such as the Card Payments API.
Making Requests
Make an API request with a payload in the structure documented by the Paysafe REST API but using snake_case. The request payload will be converted to camelCase for you.
profile = client.customer_vault.create_profile(
merchant_customer_id: '123',
locale: 'en_US',
card: {
card_num: '4111111111111111',
card_expiry: {
month: 12,
year: 2020
}
}
)
Handling Responses
Response data is in snake_case (converted from camelCase) typed with individual methods and predicates, including nested complex objects and array of objects as shown below:
profile.id?
# => true
profile.id
# => b088ac37...
profile.cards.first.card_expiry.year
# => 2020
Development
git clone https://github.com/jackpocket/paysafe.git
- Run
./bin/setup
to install dependencies and fill out API key/secret info Run
./bin/console
for an interactive prompt with an authenticated client for you to experiment:profile = client.customer_vault.create_profile(merchant_customer_id: SecureRandom.uuid, locale: 'en_US') puts profile.id # => b088ac37...
All code is written in snake_case since requests and responses are converted to and from camelCase for you.
Tests
If the API key/secret info is different from what was used to record the cassettes, you'll need to run bundle exec rake test RECORD_MODE=all
otherwise run bundle exec rake test
.
Releasing
To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Contributing
Bug reports and pull requests for missing API support are welcome on GitHub at https://github.com/jackpocket/paysafe. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
License
The gem is available as open source under the terms of the MIT License.