Project

airvend

0.0
No release in over a year
This gem makes it easy for businesses or individuals to implement vending of Airtime, Data, Electricity, Utilities & Television subscriptions to their application
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

 Project Readme

Airvend Ruby

This gem makes it easy for businesses or individuals to implement vending of Airtime, Data, Electricity, Utilities & Television subscriptions to their application. This is a simplifiication of the Airvend API

Documentation

See Here for Airvend REST API Docs.

To use this resource, you would need to register on the Airvend B2B to get access to personal test API Keys or contact me hey@uche.io

Installation

Add this line to your application's Gemfile:

gem 'airvend', "~> 0.1.2"

And then execute:

$ bundle install

Or install it yourself as:

$ gem install airvend

Usage

Initialization

Instantiate Airvend object in sandbox with environment variable:

To use the Airvend Gem, you need to instantiate the Airvend class with your credentials including your Username, Password & API Key. Best practice requires you to add your credentials to your Environment Variables AIRVEND_USERNAME, AIRVEND_PASSWORD & AIRVEND_API_KEY. You can call the new method on the Airvend Class afterwards

airvend = Airvend.new

 

you can also call the class with your credentials without Environment Variables pre set

airvend = Airvend.new("YOUR-AIRVEND-USERNAME", "YOUR-AIRVEND-PASSWORD", "YOUR-AIRVEND-API-KEY")

Expect a AirvendBadUserError, AirvendBadPassError, or AirvendBadKeyError if the username, password or API key is missing or invalid respectively.

NOTE: It is best practice to always set your API keys to your environment variable for security purpose. Please be warned not use this package without setting your API keys in your environment variables in production.

 

Airvend Objects

  • VEND
    • Airtime Vending - Vend::Airtime.new(airvend)
    • Internet Data Vending - Vend::InternetData.new(airvend)
    • Electricity Vending - Vend::Power.new(airvend)
    • TV Vending - Vend::Television

VEND

To vend different services, you have access to the different classes for the different services

 

Airtime Vending

To vend airtime, you need to instantiate the Airtime Class with the airvend object

airtime = Vend::Airtime.new(airvend)

 

To purchase airtime for a phone number that is registered with any of the NCC licensed mobile networks MTN, GLO, AIRTEL, 9MOBILE you can utilize the method below

First, we need to provide the required data in the payload

payload =  {
	ref: "YOUR-OWN-REF-HERE",
	phone: "08138236694",
	mno: "mtn", # can also be `glo`, `airtel` or `9mobile`
	amount: "200"
}

 

Next, we call the method to process the airtime purchase as shown below

airtime.buy(payload)

 

Internet Data Vending

To vend Internet data subscriptions, you need to instantiate the Internet Class with the airvend object

internet = Vend::Internet.new(airvend)

 

To purchase internet data for a phone number that is registered with any of the NCC licensed mobile networks MTN, GLO, AIRTEL, 9MOBILE you can utilize the method below

First, we need to fetch a list of available internet data plans for the selected mobile network with the payload

internet_plans = internet.plans("mtn") # can also be `glo`, `airtel` or `9mobile`

 

This return an array of hashes with each containing a data plan in the format

[
  ...
  {
    :description=>"350MB",
    :amount=>"300",
    :code=>"300",
    :validity=>" for 7 Days"
	}
  ...
]

Note the code is an identifier for the plan and is different from the amount

 

Next, you can proceed to purchase the selected internet data plan with the payload

payload =  {
	ref: "YOUR-OWN-REF-HERE",
	phone: "08138236694",
	mno: "mtn", # can also be `glo`, `airtel` or `9mobile`
	code: "200" # this is code from the selected internet data plan from the list of data plans
  }

 

then we can proceed to make subscription after charging customer or your app user

internet.buy(payload)

 

Electricity Vending

To vend Electricity Bills, you need to instantiate the Power Class with the airvend object

power = Vend::Power.new(airvend)

 

Before paying for electricity bills, it's important to confirm the customers details before proceeding

payload = {
  account: "45701113131", #this is the customers meter number
  provider: "aedc",
  account_type: "prepaid" # can also be "postpaid"
}

 

the following providers are supported:

  • aedc for Abuja Electricity Distribution Company
  • ie for Ikeja Electricity
  • eko for Eko Distribution
  • phed for Port Harcourt Electricity Distribution
  • eedc for Enugu Electricity Distribution Company
  • kedco for Kaduna Electricity Distribution Company
  • ibedc for Ibadan Electricity Distribution Company

 

To get the customer details, use the verify method

customer = power.verify(payload)

which returns:

{
  :name=>"OLUWAFEMI ODIGIE",
  :accountstatus=>"OPEN",
  :customernumber=>"BA36F4AEF88763454678BF9D1A85E4AE6F166CECA01DE4B58C1100DA3DA87362A6CBD3410E2B7F809C1A33E1AD6756BBA853F4C0275270B398BC69E8AC050E75|eyJwcm9kdWN0IjoiUE9SVEhBUkNPVVJURUxFQ1RSSUNJVFkiLCJ0eXBlIjoiUFJFUEFJRCIsImFjY291bnQiOiIwMTI0MDAxMjQ3Njk5IiwibmFtZSI6IkVzIE9tYWNoaSIsImFkZHJlc3MiOiJOTyA2NSBXb2ppIFJkIE5PIDY1IFdvamkgUmQiLCJ0YXJyaWYiOiJSMiIsImFycmVhcnMiOiIwIiwicGhvbmUiOiIiLCJtZXRlck51bWJlciI6IjAxMjQwMDEyNDc2OTkiLCJjdXN0b21lck51bWJlciI6IjgxNDE3MDIyODMwMSIsInRvdGFsQmlsbCI6IjAiLCJpYmNOYW1lIjoiR2FyZGVuIENpdHkgSW5kdXN0cmlhbCIsImJzY05hbWUiOiJSdW11b2diYSJ9",
  :account=>"7021959296",
  :customeraccounttype=>""
}

 

Finally, to purchase power for the verified customer, you would prepare a payload using the customer number that is gotten from the verify method

payload =  {
	ref: "YOUR-OWN-REF-HERE",
	account: "02188019141",
	provider: "aedc",
	amount: "2000",
	customernumber:"BA36F4AEF88763454678BF9D1A85E4AE6F166CECA01DE4B58C1100DA3DA87362A6CBD3410E2B7F809C1A33E1AD6756BBA853F4C0275270B398BC69E8AC050E75|eyJwcm9kdWN0IjoiUE9SVEhBUkNPVVJURUxFQ1RSSUNJVFkiLCJ0eXBlIjoiUFJFUEFJRCIsImFjY291bnQiOiIwMTI0MDAxMjQ3Njk5IiwibmFtZSI6IkVzIE9tYWNoaSIsImFkZHJlc3MiOiJOTyA2NSBXb2ppIFJkIE5PIDY1IFdvamkgUmQiLCJ0YXJyaWYiOiJSMiIsImFycmVhcnMiOiIwIiwicGhvbmUiOiIiLCJtZXRlck51bWJlciI6IjAxMjQwMDEyNDc2OTkiLCJjdXN0b21lck51bWJlciI6IjgxNDE3MDIyODMwMSIsInRvdGFsQmlsbCI6IjAiLCJpYmNOYW1lIjoiR2FyZGVuIENpdHkgSW5kdXN0cmlhbCIsImJzY05hbWUiOiJSdW11b2diYSJ9" #data contained in the response from verify customer method
}

The customernumber is contained in the response from the verify method

 

Next, to process the power purchase, use the method below on the provided payload

power.buy(payload)

 

TV Vending

To vend TV Subscriptions like DStv & GoTv, you need to instantiate the Television Class with the airvend object

tv = Vend::Television

 

Before paying for TV subscriptions, it's important to confirm the customers details before proceeding

payload = {
  provider: "dstv",
  account: "7021959296" # customer decoder iuc number
}

 

To get the customer details, use the verify method

customer = tv.verify(payload)

which returns:

{
  :name=>"OLUWAFEMI ODIGIE",
  :accountstatus=>"OPEN",
  :customernumber=>56920080,
  :account=>"7021959296"
}

 

Also, for processing TV Subscriptions, customers would be interested in selecting a subscription plan from their provider. You can get a list of available plans from each specific subscriber

tv_plans = tv.plans("dstv") # can also be `gotv`

This return an array of hashes with each containing a tv plans in the format

[
  ...
  {
    :description=>"DStv Compact",
    :amount=> "7900",
    :code=>"COMPE36"
	}
  ...
]

 

Finally, to subscribe to a tv plan for the verified customer, you would prepare a payload using the customer

payload =  {
	ref: "YOUR-OWN-REF-HERE",
	account: "02188019141",
	provider: "aedc",
  account_type: "prepaid",
	amount: "2000",
  customernumber: "56920080"
}

 

next, to process the power purchase, use the method below on the provided payload

tv.buy(payload)

 

Transactions

NOTE: This is currently not available.

 

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. 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 the created tag, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/urchymanny/airvend-rails. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the Airvend project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.