paystack-gateway
is a Ruby library that provides easy-to-use bindings for the Paystack API. This library provides a collection of modules, methods and helpers for interacting with Paystack's API endpoints. It includes built-in error handling, caching, parsing, and logging.
Install the gem and add to the application's Gemfile by executing:
$ bundle add paystack-gateway
If bundler is not being used to manage dependencies, install the gem by executing:
$ gem install paystack-gateway
To use the PaystackGateway gem, you need to configure it with your Paystack secret key. You can do this in an initializer or directly in your application code.
The configuration options are
secret_key
: Your paystack api key used to authorize requestslogger
: Your ruby Logger. Default is Logger.new($stdout)logging_options
: Options passed to Faraday logger middleware. Default is{ headers: false }
log_filter
: Filter used when logging headers and body.
# config/initializers/paystack_gateway.rb
PaystackGateway.configure do |config|
config.secret_key = Rails.application.credentials.dig(:paystack, :secret_key)
config.logger = Rails.logger
config.log_filter = lambda { |params|
next params if !params || !params.respond_to?(:each)
ActiveSupport::ParameterFilter.new(Rails.application.config.filter_parameters).filter(params)
}
end
Once configured, you can start using the various API modules and methods provided by the gem. They are designed to mirror how the api methods are grouped and listed on the Paystack API.
Here's an example creating a customer using the /customer/create endpoint.
response = PaystackGateway::Customers.create_customer(
email: '[email protected]',
first_name: 'Test',
last_name: 'User',
)
response.id # => 203316808
response.customer_code # => "CUS_xsrozmbt8g1oear"
Whenever a network error occurs or the called endpoint responds with an error response, a PaystackGateway::ApiError
(or a subclass of it) is raised that can be handled in your calling code.
Here's an example initializing a transaction using the /transaction/initialize endpoint
begin
response = PaystackGateway::Transactions.initialize_transaction(
email: '[email protected]',
amount: 1000,
reference: 'test_reference',
)
return response.payment_url
rescue InitializeTransactionError => e # subclass of PaystackGateway::ApiError
cancel_payment if e.cancellable?
rescue PaystackGateway::ApiError => e
handle_initialize_error(e)
end
While caching is implemented in the library, it is currently not configurable for all modules and api methods. With a little more work, this can be achieved. So if there's demand for it, I can work on it (PRs are also welcome 🙂).
Some endpoints currently make use of caching:
- Miscellaneous#list_banks
- Verifications#resolve_account_number
Caching works using an ActiveSupport::Cache::FileStore cache. The default caching period is 7 days and the cache data is stored on the file system at ENV['TMPDIR']
or /tmp/cache
.
Refer to the Paystack API documentation for details on all the available endpoints and their usage.
Below is a complete list of the API modules and methods that are currently implemented.
I invite you to collaborate on this project! If you need to use any of the unimplemented API methods or modules, or if you want to make modifications to the defaults or the level of configuration available in the currently implemented API methods, please feel free to raise a pull request (PR). See Contributing and Code of Conduct below
- Fork the repository.
- Create a new branch for your feature or bugfix.
- Make your changes, add tests for them.
- Ensure the tests and linter pass
- Open a pull request with a detailed description of your changes.
After checking out the repo, run bin/setup
to install dependencies. Then, run rake test
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
Minitest is used for unit tests. Rubocop is used to enforce the ruby style.
To run the complete set of tests and linter run the following:
$ bundle install
$ bundle exec rake test
$ bundle exec rubocop
Bug reports and pull requests are welcome on GitHub at https://github.com/darthrighteous/paystack-gateway. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.
The gem is available as open source under the terms of the MIT License.
Everyone interacting in the PaystackGateway project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.