k2-connect-ruby 0.0.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 813e08db1df91bfd2bc8129661251a50547dd412be8e3adf73e30601c96cfd96
4
- data.tar.gz: e0152936b0c41216020713f4a9adc0b36f272f03dff49c2b5a334f7aa0bcff78
3
+ metadata.gz: 6f16b31dad92f44afc4fecd11658daedb06dd25dc248dc91aac55108e231c567
4
+ data.tar.gz: f92ca5e74163589b853eaad34856cc9477b0ea0be2794a207070f4a6e02e5906
5
5
  SHA512:
6
- metadata.gz: dd9f054d341616ae35e76f056e719576f5b90f323022564cb74d3a50de13e1f416dca358fe4029bbc393149e49f29802a84260a0f7e5cba72e2b3131a202754a
7
- data.tar.gz: e4de423af14eb8af838f9bbe40ecc93b7fd770fc241ea492e104585d30eda2d451a7b8342df0f3b394a413fdf59b64b1e5034b51ea2b145b9cd0f8efcdf36287
6
+ metadata.gz: 2c3e9fb52c6d643c0aa19bc7295db3f03a6b2831b6bff0fd804f49505895242e86ee551c37f0da6b417a86728c0ae4f330d612e82f961d6f9ec55da44c972881
7
+ data.tar.gz: 2098c75cdc7f5f86a65dcfe0bdc42138bba2a87eb05e0c244bf5c0e7accd3d5977b0d6ae22840ad423b2b0157980998cbcf8aa2ba791f5f3f41ea86d64701204
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- k2-connect-ruby (0.0.2)
4
+ k2-connect-ruby (0.0.4)
5
5
  activemodel (~> 6.1.3.1)
6
6
  activesupport (~> 6.1.3.1)
7
7
  rest-client (~> 2.1.0)
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # K2ConnectRuby For Rails
2
2
 
3
+ [![Gem](https://img.shields.io/gem/v/k2-connect-ruby?style=for-the-badge)](https://rubygems.org/gems/k2-connect-ruby)
4
+
3
5
  Ruby SDK for connection to the Kopo Kopo API.
4
6
  This documentation gives you the specifications for connecting your systems to the Kopo Kopo Application.
5
7
  Primarily, the library provides functionality to do the following:
@@ -16,20 +18,22 @@ All calls made without authentication will also fail.
16
18
 
17
19
  ## LINKS
18
20
 
19
- - [Installation](https://github.com/DavidKar1uk1/k2-connect-ruby/tree/development#installation)
20
- - [Usage](https://github.com/DavidKar1uk1/k2-connect-ruby/tree/development#installation)
21
- - [Authorization](https://github.com/DavidKar1uk1/k2-connect-ruby/tree/development#authorization)
22
- - [Webhook Subscription](https://github.com/DavidKar1uk1/k2-connect-ruby/tree/development#webhook-subscription)
23
- - [STK Push](https://github.com/DavidKar1uk1/k2-connect-ruby/tree/development#stk-push)
24
- - [PAY](https://github.com/DavidKar1uk1/k2-connect-ruby/tree/development#pay)
25
- - [Transfers](https://github.com/DavidKar1uk1/k2-connect-ruby/tree/development#transfers)
26
- - [Parsing the JSON Payload](https://github.com/DavidKar1uk1/k2-connect-ruby/tree/development#parsing-the-json-payload)
27
- - [Development](https://github.com/DavidKar1uk1/k2-connect-ruby/tree/development#development)
28
- - [Author](https://github.com/DavidKar1uk1/k2-connect-ruby/tree/development#author)
29
- - [Contributing](https://github.com/DavidKar1uk1/k2-connect-ruby/tree/development#contributing)
30
- - [License](https://github.com/DavidKar1uk1/k2-connect-ruby/tree/development#license)
31
- - [Changelog](https://github.com/DavidKar1uk1/k2-connect-ruby/tree/development#changelog)
32
- - [Code of Conduct](https://github.com/DavidKar1uk1/k2-connect-ruby/tree/development#code-of-conduct)
21
+ - [Installation](#installation)
22
+ - [Usage](#installation)
23
+ - [Authorization](#authorization)
24
+ - [Webhook Subscription](#webhook-subscription)
25
+ - [SMS Notifications](#sms-notifications)
26
+ - [STK Push](#stk-push)
27
+ - [PAY](#pay)
28
+ - [Transfers](#transfers)
29
+ - [Polling](#polling)
30
+ - [Parsing the JSON Payload](#parsing-the-json-payload)
31
+ - [Development](#development)
32
+ - [Author](#author)
33
+ - [Contributing](#contributing)
34
+ - [License](#license)
35
+ - [Changelog](#changelog)
36
+ - [Code of Conduct](#code-of-conduct)
33
37
 
34
38
  ## Installation
35
39
 
@@ -90,9 +94,32 @@ your_request = {
90
94
  }
91
95
  k2subscriber.webhook_subscribe(your_request)
92
96
  ```
97
+
98
+ ### SMS Notifications
99
+
100
+ To create an SMS notification request by calling on the send_sms_transaction_notification method.
101
+ Ensure the following arguments are passed:
102
+ - webhook_event_reference `REQUIRED`
103
+ - message `REQUIRED`
104
+ - callback_url `REQUIRED`
105
+
106
+ Code example;
107
+
108
+ ```ruby
109
+ require 'k2-connect-ruby'
110
+ k2_token = K2AccessToken.new('your_client_id', 'your_client_secret').request_token
111
+ k2_notification = K2Notification.new(k2_token)
112
+
113
+ request_payload = {
114
+ webhook_event_reference: 'c271535c-687f-4a40-a589-8b66b894792e',
115
+ message: 'message',
116
+ callback_url: 'callback_url'
117
+ }
118
+ k2_notification.send_sms_transaction_notification(request_payload)
119
+ ```
120
+
93
121
 
94
-
95
- ### STK-Push
122
+ ### STK-Push
96
123
 
97
124
  #### Receive Payments
98
125
 
@@ -290,7 +317,7 @@ The Following Details should be passed for either **Blind** or **Targeted** Tran
290
317
  - value `REQUIRED`
291
318
  - callback_url `REQUIRED`
292
319
 
293
- The Params are passed as the argument containing all the form data sent. A Successful Response is returned with the URL of the Transfer in the HTTP Location Header.
320
+ The Params are passed as the argument containing all the form data sent. A Successful Response is returned with the URL of the transfer request in the HTTP Location Header.
294
321
 
295
322
  Sample code example:
296
323
 
@@ -312,6 +339,46 @@ To Query the most recent initiated Transfer Request:
312
339
 
313
340
  A HTTP Response will be returned in a JSON Payload, accessible with the k2_response_body variable.
314
341
 
342
+ ### Polling
343
+
344
+ Tallows you to poll transactions received on the Kopo Kopo system within a certain time range, and either a company or a specific till.
345
+
346
+ First Create the K2Notification Object
347
+
348
+ k2_notification = K2Notification.new(access_token)
349
+
350
+ #### Send SMS Notification
351
+
352
+ The Following Details should be passed for creating the notification:
353
+
354
+ - fromTime `REQUIRED`
355
+ - toTime `REQUIRED`
356
+ - scope `REQUIRED`
357
+ - scopeReference `REQUIRED`
358
+ - callback_url `REQUIRED`
359
+
360
+ The Params are passed as the argument containing all the form data sent. A Successful Response is returned with the URL of the request in the HTTP Location Header.
361
+
362
+ Sample code example:
363
+
364
+ ```ruby
365
+ k2_notification = K2Notification.new(your_access_token)
366
+ # Blind or Targeted Transfer
367
+ k2_notification.send_sms_transaction_notification(request_payload)
368
+ ```
369
+
370
+ #### Query Request
371
+
372
+ To Query the status of the prior initiated Notification Request pass the location_url response as shown:
373
+
374
+ k2_notification.query_resource_url(k2_notification.location_url)
375
+
376
+ To Query the most recent initiated Transfer Request:
377
+
378
+ k2_notification.query_resource
379
+
380
+ A HTTP Response will be returned in a JSON Payload, accessible with the k2_response_body variable.
381
+
315
382
  ### Parsing the JSON Payload
316
383
 
317
384
  The K2Client class will be use to parse the Payload received from Kopo Kopo, and to further consume the webhooks and split the responses into components, the K2Authenticator and
@@ -14,8 +14,8 @@ require 'k2-connect-ruby/utilities'
14
14
  require 'k2-connect-ruby/k2_services/payload_process'
15
15
 
16
16
  # Entity
17
- require 'k2-connect-ruby/k2_financial_entity/k2_entity'
18
- require 'k2-connect-ruby/k2_financial_entity/entity'
17
+ require 'k2-connect-ruby/k2_entity/k2_entity'
18
+ require 'k2-connect-ruby/k2_entity/entity'
19
19
 
20
20
  # ActiveSupport
21
21
  require 'active_support/core_ext/hash/indifferent_access'
@@ -0,0 +1,8 @@
1
+ require 'k2-connect-ruby/k2_entity/k2_token'
2
+ require 'k2-connect-ruby/k2_entity/k2_polling'
3
+ require 'k2-connect-ruby/k2_entity/k2_subscribe'
4
+ require 'k2-connect-ruby/k2_entity/k2_notification'
5
+ require 'k2-connect-ruby/k2_entity/k2_financial_entities/k2_stk'
6
+ require 'k2-connect-ruby/k2_entity/k2_financial_entities/k2_pay'
7
+ require 'k2-connect-ruby/k2_entity/k2_financial_entities/k2_transfer'
8
+ require 'k2-connect-ruby/k2_entity/k2_financial_entities/k2_settlement'
@@ -0,0 +1,41 @@
1
+ class K2Notification
2
+ include K2Validation, K2Utilities
3
+ attr_reader :location_url, :k2_response_body
4
+ attr_accessor :access_token
5
+
6
+ # Initialize with access_token
7
+ def initialize(access_token)
8
+ raise ArgumentError, 'Nil or Empty Access Token Given!' if access_token.blank?
9
+ @threads = []
10
+ @access_token = access_token
11
+ end
12
+
13
+ # Sends transaction notifications via SMS
14
+ def send_sms_transaction_notification(params)
15
+ k2_request_links = {
16
+ callback_url: params[:callback_url]
17
+ }
18
+ k2_request_body = {
19
+ webhook_event_reference: params[:webhook_event_reference],
20
+ message: params[:message],
21
+ _links: k2_request_links,
22
+ }
23
+ subscribe_hash = make_hash(K2Config.path_url('transaction_sms_notifications'), 'post', @access_token,'Notification', k2_request_body)
24
+ @location_url = K2Connect.make_request(subscribe_hash)
25
+ end
26
+
27
+ # Query Recent Webhook
28
+ def query_resource(location_url = @location_url)
29
+ query_hash = make_hash(location_url, 'get', @access_token, 'Notification', nil)
30
+ @threads << Thread.new do
31
+ sleep 0.25
32
+ @k2_response_body = K2Connect.make_request(query_hash)
33
+ end
34
+ @threads.each(&:join)
35
+ end
36
+
37
+ # Query Specific Webhook URL
38
+ def query_resource_url(url)
39
+ query_resource(url)
40
+ end
41
+ end
@@ -0,0 +1,40 @@
1
+ # Class for Polling Service
2
+ class K2Polling
3
+ include K2Validation, K2Utilities
4
+ attr_reader :location_url, :k2_response_body
5
+ attr_accessor :access_token
6
+
7
+ # Initialize with access token
8
+ def initialize(access_token)
9
+ raise ArgumentError, 'Nil or Empty Access Token Given!' if access_token.blank?
10
+ @threads = []
11
+ @access_token = access_token
12
+ end
13
+
14
+ def poll(params)
15
+ k2_request_body = {
16
+ scope: params[:scope],
17
+ scope_reference: params[:scope_reference],
18
+ from_time: params[:from_time],
19
+ to_time: params[:to_time],
20
+ _links: { callback_url: params[:callback_url] }
21
+ }
22
+ poll_hash = make_hash(K2Config.path_url('poll'), 'post', @access_token,'Polling', k2_request_body)
23
+ @location_url = K2Connect.make_request(poll_hash)
24
+ end
25
+
26
+ # Retrieve your newly created polling request by its resource location
27
+ def query_resource(location_url = @location_url)
28
+ query_hash = make_hash(location_url, 'get', @access_token, 'Polling', nil)
29
+ @threads << Thread.new do
30
+ sleep 0.25
31
+ @k2_response_body = K2Connect.make_request(query_hash)
32
+ end
33
+ @threads.each(&:join)
34
+ end
35
+
36
+ # Retrieve your newly created polling request by specific resource location
37
+ def query_resource_url(url)
38
+ query_resource(url)
39
+ end
40
+ end
@@ -4,7 +4,7 @@ class K2Subscribe
4
4
  attr_reader :location_url, :k2_response_body
5
5
  attr_accessor :access_token, :webhook_secret
6
6
 
7
- # Initialize with the event_type
7
+ # Initialize with access token
8
8
  def initialize(access_token)
9
9
  raise ArgumentError, 'Nil or Empty Access Token Given!' if access_token.blank?
10
10
  @threads = []
@@ -1,6 +1,6 @@
1
1
  --- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
2
2
  version: v1
3
- base_url: http://127.0.0.1:3000/
3
+ base_url: https://sandbox.kopokopo.com/
4
4
  endpoints: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
5
5
  oauth_token: oauth/token
6
6
  revoke_token: oauth/revoke
@@ -13,5 +13,7 @@ endpoints: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
13
13
  settlement_mobile_wallet: merchant_wallets
14
14
  settlement_bank_account: merchant_bank_accounts
15
15
  transfers: settlement_transfers
16
+ poll: polling
17
+ transaction_sms_notifications: transaction_sms_notifications
16
18
  network_operators:
17
19
  - SAFARICOM
@@ -11,10 +11,10 @@ module K2Connect
11
11
  end
12
12
 
13
13
  # Set up Headers
14
- headers = { 'Content-Type': 'application/json', Accept: 'application/vnd.kopokopo.v1.hal+json', Authorization: "Bearer #{access_token}" }
14
+ headers = { 'Content-Type': 'application/json', Accept: 'application/json', Authorization: "Bearer #{access_token}" }
15
15
  # For access token request
16
16
  if path_url.include?('oauth/token/info')
17
- headers = { 'Content-Type': 'application/json', Accept: 'application/vnd.kopokopo.v1.hal+json', Authorization: "Bearer #{access_token}" }
17
+ headers = { 'Content-Type': 'application/json', Accept: 'application/json', Authorization: "Bearer #{access_token}" }
18
18
  elsif path_url.include?('oauth/')
19
19
  headers = { 'Content-Type': 'application/json' }
20
20
  end
@@ -25,7 +25,7 @@ module K2Connect
25
25
  response_body = Yajl::Parser.parse(k2_response.body)
26
26
  response_headers = Yajl::Parser.parse(k2_response.headers.to_json)
27
27
  response_code = k2_response.code.to_s
28
- raise K2ConnectionError.new(response_code) && k2_request.shutdown unless response_code[0].eql?(2.to_s)
28
+ raise K2ConnectionError.new(response_code) unless response_code[0].eql?(2.to_s)
29
29
 
30
30
  unless request_type.eql?('get')
31
31
  # Returns the access token for authorization
@@ -25,7 +25,7 @@ module SpecConfig
25
25
  def custom_stub_request(request_type, path_url, request_body, response_code)
26
26
  request_body = request_body.to_s
27
27
  request_uri = path_url
28
- request_headers = { Authorization: "Bearer access_token", Accept: "application/vnd.kopokopo.v1.hal+json" }
28
+ request_headers = { Authorization: "Bearer access_token", Accept: "application/json" }
29
29
 
30
30
  if request_type.eql?('post')
31
31
  request_headers['Content-Type'] = 'application/json'
@@ -6,6 +6,9 @@ require 'k2-connect-ruby/k2_utilities/config/k2_config'
6
6
  require 'k2-connect-ruby/k2_utilities/k2_process_result'
7
7
  require 'k2-connect-ruby/k2_utilities/k2_process_webhook'
8
8
 
9
+ # For Stub Requests
10
+ require 'k2-connect-ruby/k2_utilities/spec_modules/spec_config'
11
+
9
12
  module K2Utilities
10
13
  def make_hash(path_url, request, access_token, class_type, body)
11
14
  {
@@ -1,3 +1,3 @@
1
1
  module K2ConnectRuby
2
- VERSION = '0.0.3'
2
+ VERSION = '1.0.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: k2-connect-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - DavidKar1uk1
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-06 00:00:00.000000000 Z
11
+ date: 2021-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -203,15 +203,17 @@ files:
203
203
  - bin/setup
204
204
  - k2-connect-ruby.gemspec
205
205
  - lib/k2-connect-ruby.rb
206
+ - lib/k2-connect-ruby/k2_entity/entity.rb
207
+ - lib/k2-connect-ruby/k2_entity/k2_entity.rb
208
+ - lib/k2-connect-ruby/k2_entity/k2_financial_entities/k2_pay.rb
209
+ - lib/k2-connect-ruby/k2_entity/k2_financial_entities/k2_settlement.rb
210
+ - lib/k2-connect-ruby/k2_entity/k2_financial_entities/k2_stk.rb
211
+ - lib/k2-connect-ruby/k2_entity/k2_financial_entities/k2_transfer.rb
212
+ - lib/k2-connect-ruby/k2_entity/k2_notification.rb
213
+ - lib/k2-connect-ruby/k2_entity/k2_polling.rb
214
+ - lib/k2-connect-ruby/k2_entity/k2_subscribe.rb
215
+ - lib/k2-connect-ruby/k2_entity/k2_token.rb
206
216
  - lib/k2-connect-ruby/k2_errors.rb
207
- - lib/k2-connect-ruby/k2_financial_entity/entities/k2_pay.rb
208
- - lib/k2-connect-ruby/k2_financial_entity/entities/k2_settlement.rb
209
- - lib/k2-connect-ruby/k2_financial_entity/entities/k2_stk.rb
210
- - lib/k2-connect-ruby/k2_financial_entity/entities/k2_transfer.rb
211
- - lib/k2-connect-ruby/k2_financial_entity/entity.rb
212
- - lib/k2-connect-ruby/k2_financial_entity/k2_entity.rb
213
- - lib/k2-connect-ruby/k2_financial_entity/k2_subscribe.rb
214
- - lib/k2-connect-ruby/k2_financial_entity/k2_token.rb
215
217
  - lib/k2-connect-ruby/k2_services/client/k2_client.rb
216
218
  - lib/k2-connect-ruby/k2_services/payload_process.rb
217
219
  - lib/k2-connect-ruby/k2_services/payloads/k2_transaction.rb
@@ -1,6 +0,0 @@
1
- require 'k2-connect-ruby/k2_financial_entity/k2_token'
2
- require 'k2-connect-ruby/k2_financial_entity/k2_subscribe'
3
- require 'k2-connect-ruby/k2_financial_entity/entities/k2_stk'
4
- require 'k2-connect-ruby/k2_financial_entity/entities/k2_pay'
5
- require 'k2-connect-ruby/k2_financial_entity/entities/k2_transfer'
6
- require 'k2-connect-ruby/k2_financial_entity/entities/k2_settlement'