Skip to content
forked from stoffus/payson_api

Client API for integration with the Payson payment service.

License

Notifications You must be signed in to change notification settings

Lani/payson_api

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Payson API

A simple utility to handle requests against the Payson payment gateway API.

Supported versions

  • Ruby 1.9.3, 2.0.0, 2.1.0

Install

Put this line in your Gemfile:

gem 'payson_api'

Then bundle:

$ bundle

Usage

General configuration options

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.

Initiating a payment

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

Requesting payment details

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

Updating a payment

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

Validating an IPN response

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

Todo

Nothing at the moment. Will focus on writing more thourough test cases and look over the code all in all.

Questions, Feedback

Feel free to message me on Github (stoffus).

Copyright © 2014 Christopher Svensson.

About

Client API for integration with the Payson payment service.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 100.0%