A simple utility to handle requests against the Payson payment gateway API.
-
Ruby 1.9.3, 2.0.0, 2.1.0
Put this line in your Gemfile:
gem 'payson_api'
Then bundle:
$ bundle
You need to configure the gem with your own Payson credentials through the PaysonAPI.configure
method:
PaysonAPI.configure do |config| config.api_user_id = 'XXXX' config.api_password = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX' end
Please note that if config.api_user_id
is set to 4, the client will go into test mode. Valid test access credentials could be found in documentation.
return_url = 'http://localhost/payson/success' cancel_url = 'http://localhost/payson/cancel' ipn_url = 'http://localhost/payson/ipn' memo = 'Sample order description' receivers = [] receivers << PaysonAPI::Receiver.new( email = '[email protected]', amount = 100, first_name = 'Me', last_name = 'Just me', primary = true ) sender = PaysonAPI::Sender.new( email = '[email protected]', first_name = 'My', last_name = 'Customer' ) order_items = [] order_items << PaysonAPI::OrderItem.new( description = 'Order item description', unit_price = 100, quantity = 1, tax = 0, sku = 'MY-ITEM-1' ) payment = PaysonAPI::Request::Payment.new( return_url, cancel_url, ipn_url, memo, sender, receivers ) payment.order_items = order_items response = PaysonAPI::Client.initiate_payment(payment) if response.success? # Redirect to response.forward_url else puts response.errors end
token = 'token-received-from-payment-request' payment_details = PaysonAPI::Request::PaymentDetails.new(token) response = PaysonAPI::Client.get_payment_details(payment_details) if response.success? # Do stuff with response object else puts response.errors end
token = 'token-received-from-payment-request' action = 'CANCELORDER' payment_update = PaysonAPI::Request::PaymentUpdate.new(token, action) response = PaysonAPI::Client.update_payment(payment_update) if response.success? # Do stuff with response object else puts response.errors end
This example assumes the use of the Rails web framework.
class Payson < ApplicationController def ipn_responder request_body = request.body.read ipn_response = PaysonAPI::Response::IPN.new(request_body) # Do business stuff, e.g. update the corresponding order: # order = Order.find_by_payson_token(ipn_response.token) # order.payson_status = ipn_response.status # order.save! # Create a new IPN request object containing the raw response from above ipn_request = PaysonAPI::Request::IPN.new(ipn_response.raw) validate = PaysonAPI::Client.validate_ipn(ipn_request) unless validate.verified? raise "Something went terribly wrong." end end end
Nothing at the moment. Will focus on writing more thourough test cases and look over the code all in all.
Feel free to message me on Github (stoffus).
Copyright © 2014 Christopher Svensson.