Class: MpesaConnect::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/mpesa_connect.rb

Constant Summary collapse

BASE_URL =
"https://sandbox.safaricom.co.ke"

Instance Method Summary collapse

Constructor Details

#initialize(key, secret, security_credentials) ⇒ Client

Returns a new instance of Client.



9
10
11
12
13
14
# File 'lib/mpesa_connect.rb', line 9

def initialize key, secret, security_credentials
  @key = key
  @secret = secret
  @access_token = nil
  @sec_cred = security_credentials
end

Instance Method Details

#account_balance(initiator, party_a) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/mpesa_connect.rb', line 23

def  initiator, party_a
  url = "#{BASE_URL}/mpesa/accountbalance/v1/query"
  headers = {
    "Authorization" => "Bearer #{get_token}",
    "Content-Type" => "application/json"
  }
  body = {
    Initiator: "#{initiator}",
    SecurityCredential: "#{@sec_cred}",
    CommandID: "AccountBalance",
    PartyA: party_a,
    IdentifierType: "4",
    Remarks: "Account Balance",
    QueueTimeOutURL: "#{@timeout}",
    ResultURL: "#{@transaction}"
  }.to_json
  response = HTTParty.post(url, headers: headers, body: body)
  JSON.parse(response.body)
end

#b2c_transaction(initiator, amount, party_a, party_b, url = "#{BASE_URL}/mpesa/b2c/v1/paymentrequest") ⇒ Object



122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/mpesa_connect.rb', line 122

def b2c_transaction initiator, amount, party_a, party_b, 
  url = "#{BASE_URL}/mpesa/b2c/v1/paymentrequest"
  headers = {
    "Authorization" => "Bearer #{get_token}",
    "Content-Type" => "application/json"
  }
  body = {
    InitiatorName: "#{initiator}",
    SecurityCredential: "#{@sec_cred}",
    CommandID: "SalaryPayment",
    Amount: "#{amount}",
    PartyA: "#{party_a}",
    PartyB: "#{party_b}",
    Remarks: "Salary Payments",
    QueueTimeOutURL: "#{@timeout}",
    ResultURL: "#{@transaction}"
  }.to_json
  response = HTTParty.post(url, headers: headers, body: body)
  JSON.parse(response.body)
end

#c2b_register_url(shortcode, response_type) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/mpesa_connect.rb', line 87

def c2b_register_url shortcode, response_type
  url = "#{BASE_URL}/mpesa/c2b/v1/registerurl"
  headers = {
    "Authorization" => "Bearer #{get_token}",
    "Content-Type" => "application/json"
  }
  body = {
    ShortCode: "#{shortcode}",
    ResponseType: "#{response_type}",
    ConfirmationURL: "#{@confirm}",
    ValidationURL: "#{@validate}"
  }.to_json

  response = HTTParty.post(url, headers: headers, body: body)
  JSON.parse(response.body)
end

#c2b_transaction(shortcode, amount, msisdn, bill_reference = nil) ⇒ Object



104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/mpesa_connect.rb', line 104

def c2b_transaction shortcode, amount, msisdn, bill_reference=nil
  url = "#{BASE_URL}/mpesa/c2b/v1/simulate"
  headers = {
    "Authorization" => "Bearer #{get_token}",
    "Content-Type" => "application/json"
  }
  body = {
    ShortCode: "#{shortcode}",
    CommandID: "CustomerPayBillOnline",
    Amount: "#{amount}",
    Msisdn: "#{msisdn}",
    BillRefNumber: "#{bill_reference}"
  }.to_json

  response = HTTParty.post(url, headers: headers, body: body)
  JSON.parse(response.body)
end

#reversal(initiator, transaction_id, amount, receiver_party) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/mpesa_connect.rb', line 43

def reversal initiator, transaction_id, amount, receiver_party
  url = "#{BASE_URL}/mpesa/reversal/v1/request"
  headers = {
    "Authorization" => "Bearer #{get_token}",
    "Content-Type" => "application/json"
  }
  body = {
    Initiator: "#{initiator}",
    SecurityCredential: "#{@sec_cred}",
    CommandID:"TransactionReversal",
    TransactionID: "#{transaction_id}",
    Amount: "#{amount}",
    ReceiverParty: "#{receiver_party}",
    RecieverIdentifierType:"4",
    ResultURL: "#{@transaction}",
    QueueTimeOutURL: "#{@timeout}",
    Remarks: "reverse transaction #{transaction_id}"
  }.to_json
  response = HTTParty.post(url, headers: headers, body: body)
  JSON.parse(response.body)
end

#security_password(security_credentials) ⇒ Object



143
144
145
146
# File 'lib/mpesa_connect.rb', line 143

def security_password security_credentials
  @sec_cred = security_credentials
  encrypted_security_password
end

#set_urls(timeout = nil, transaction = nil, confirm = nil, validate = nil) ⇒ Object



16
17
18
19
20
21
# File 'lib/mpesa_connect.rb', line 16

def set_urls timeout=nil, transaction=nil, confirm=nil, validate=nil 
  @timeout = timeout
  @transaction = transaction
  @confirm = confirm
  @validate = validate
end

#transaction_status(initiator, party_a, transaction_id) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/mpesa_connect.rb', line 65

def transaction_status initiator, party_a, transaction_id
  url = "#{BASE_URL}/mpesa/transactionstatus/v1/query"
  headers = {
    "Authorization" => "Bearer #{get_token}",
    "Content-Type" => "application/json"
  }
  body = {
    Initiator: "#{initiator}",
    SecurityCredential: "#{@sec_cred}",
    CommandID: "TransactionStatusQuery",
    TransactionID: "#{transaction_id}",
    PartyA: "#{party_a}",
    IdentifierType: "3",
    Remarks: "Transaction Status",
    QueueTimeOutURL: "#{@timeout}",
    ResultURL: "#{@transaction}"
  }.to_json

  response = HTTParty.post(url, headers: headers, body: body)
  JSON.parse(response.body)
end