class MpesaStk::PushPayment

Attributes

amount[R]
phone_number[R]
token[R]

Public Class Methods

call(amount, phone_number) click to toggle source
# File lib/mpesa_stk/push_payment.rb, line 6
def call(amount, phone_number)
  new(amount, phone_number).push_payment
end
new(amount, phone_number) click to toggle source
# File lib/mpesa_stk/push_payment.rb, line 13
def initialize(amount, phone_number)
  @token = MpesaStk::AccessToken.call
  @amount = amount
  @phone_number = phone_number
end

Public Instance Methods

push_payment() click to toggle source
# File lib/mpesa_stk/push_payment.rb, line 19
def push_payment
  response = HTTParty.post(url, headers: headers, body: body)
  JSON.parse(response.body)
end

Private Instance Methods

body() click to toggle source
# File lib/mpesa_stk/push_payment.rb, line 37
def body
  {
    BusinessShortCode: "#{ENV['business_short_code']}",
    Password: generate_password,
    Timestamp: "#{timestamp}",
    TransactionType: "CustomerPayBillOnline",
    Amount: "#{amount}",
    PartyA: "#{phone_number}",
    PartyB: "#{ENV['business_short_code']}",
    PhoneNumber: "#{phone_number}",
    CallBackURL: "#{ENV['callback_url']}",
    AccountReference: generate_bill_reference_number(5),
    TransactionDesc: generate_bill_reference_number(5)
  }.to_json
end
generate_bill_reference_number(number) click to toggle source
# File lib/mpesa_stk/push_payment.rb, line 53
def generate_bill_reference_number(number)
  charset = Array('A'..'Z') + Array('a'..'z')
  Array.new(number) { charset.sample }.join
end
generate_password() click to toggle source

shortcode passkey timestamp

# File lib/mpesa_stk/push_payment.rb, line 65
def generate_password
  key = "#{ENV['business_short_code']}#{ENV['business_passkey']}#{timestamp}"
  Base64.encode64(key).split("\n").join
end
headers() click to toggle source
# File lib/mpesa_stk/push_payment.rb, line 30
def headers
  {
    "Authorization" => "Bearer #{token}",
    "Content-Type" => "application/json"
  }
end
timestamp() click to toggle source
# File lib/mpesa_stk/push_payment.rb, line 58
def timestamp
  DateTime.now.strftime("%Y%m%d%H%M%S").to_i
end
url() click to toggle source
# File lib/mpesa_stk/push_payment.rb, line 26
def url
  "#{ENV['base_url']}#{ENV['process_request_url']}"
end