k2-connect-ruby 3.1.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/.github/pull_request_template.md +31 -0
  3. data/.gitignore +2 -0
  4. data/Gemfile.lock +38 -5
  5. data/README.md +499 -198
  6. data/k2-connect-ruby.gemspec +39 -35
  7. data/lib/k2-connect-ruby/entity.rb +39 -9
  8. data/lib/k2-connect-ruby/http_client.rb +43 -0
  9. data/lib/k2-connect-ruby/k2_entity/k2_entity.rb +12 -11
  10. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/destination/destination_request.rb +27 -0
  11. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/destination/external_bank_account.rb +32 -0
  12. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/destination/external_mpesa_wallet.rb +38 -0
  13. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/destination/external_paybill.rb +31 -0
  14. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/destination/external_till.rb +30 -0
  15. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/destination/merchant_bank_account.rb +27 -0
  16. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/destination/merchant_mpesa_wallet.rb +27 -0
  17. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/external_recipient/bank_account.rb +17 -0
  18. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/external_recipient/mobile_wallet.rb +24 -0
  19. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/external_recipient/paybill.rb +17 -0
  20. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/external_recipient/recipient_request.rb +32 -0
  21. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/external_recipient/till.rb +17 -0
  22. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/external_recipient.rb +54 -0
  23. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/k2_stk.rb +14 -31
  24. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/payment_link.rb +53 -0
  25. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/payment_links/payment_link_request.rb +43 -0
  26. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/reversal.rb +39 -0
  27. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/reversals/reversal_request.rb +39 -0
  28. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/send_money/send_money_request.rb +53 -0
  29. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/send_money.rb +73 -0
  30. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/stk_push/stk_push_request.rb +51 -0
  31. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/transfer_account/merchant_bank_account.rb +35 -0
  32. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/transfer_account/merchant_mpesa_wallet.rb +38 -0
  33. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/transfer_account/transfer_account_request.rb +25 -0
  34. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/transfer_account.rb +49 -0
  35. data/lib/k2-connect-ruby/k2_entity/k2_polling.rb +16 -13
  36. data/lib/k2-connect-ruby/k2_entity/k2_subscribe.rb +16 -14
  37. data/lib/k2-connect-ruby/k2_entity/k2_token.rb +14 -39
  38. data/lib/k2-connect-ruby/k2_entity/polling/polling_request.rb +48 -0
  39. data/lib/k2-connect-ruby/k2_entity/webhook/webhook_subscription_request.rb +66 -0
  40. data/lib/k2-connect-ruby/k2_errors.rb +15 -71
  41. data/lib/k2-connect-ruby/k2_services/base_service.rb +25 -0
  42. data/lib/k2-connect-ruby/k2_services/k2_client.rb +7 -6
  43. data/lib/k2-connect-ruby/k2_services/payloads/daraja_webhooks.rb +43 -0
  44. data/lib/k2-connect-ruby/k2_services/payloads/k2_transaction.rb +20 -18
  45. data/lib/k2-connect-ruby/k2_services/payloads/k2_webhooks.rb +36 -32
  46. data/lib/k2-connect-ruby/k2_services/payloads/transactions/incoming_payment.rb +31 -29
  47. data/lib/k2-connect-ruby/k2_services/payloads/transactions/outgoing_payment.rb +3 -1
  48. data/lib/k2-connect-ruby/k2_services/payloads/transactions/payment_link.rb +38 -0
  49. data/lib/k2-connect-ruby/k2_services/payloads/transactions/reversal.rb +35 -0
  50. data/lib/k2-connect-ruby/k2_services/payloads/transactions/send_money_payment.rb +25 -0
  51. data/lib/k2-connect-ruby/k2_services/payloads/transactions/transfer.rb +2 -0
  52. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/b2b_transaction_received.rb +9 -3
  53. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/b2b_transaction_reversed.rb +22 -0
  54. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/buygoods_transaction_received.rb +6 -0
  55. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/buygoods_transaction_reversed.rb +4 -0
  56. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/card_transaction_received.rb +18 -0
  57. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/card_transaction_reversed.rb +17 -0
  58. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/card_transaction_voided.rb +17 -0
  59. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/customer_created.rb +11 -7
  60. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/transfer_webhook.rb +50 -0
  61. data/lib/k2-connect-ruby/k2_services/send_introspect_token_request_service.rb +56 -0
  62. data/lib/k2-connect-ruby/k2_services/send_k2_connect_get_request_service.rb +42 -0
  63. data/lib/k2-connect-ruby/k2_services/send_k2_connect_post_request_service.rb +44 -0
  64. data/lib/k2-connect-ruby/k2_services/send_request_token_request_service.rb +55 -0
  65. data/lib/k2-connect-ruby/k2_services/send_revoke_token_request_service.rb +56 -0
  66. data/lib/k2-connect-ruby/k2_services/send_token_info_request_service.rb +44 -0
  67. data/lib/k2-connect-ruby/k2_services.rb +29 -0
  68. data/lib/k2-connect-ruby/k2_utilities/config/k2_config.rb +18 -26
  69. data/lib/k2-connect-ruby/k2_utilities/config/k2_config.yml +9 -10
  70. data/lib/k2-connect-ruby/k2_utilities/k2_authenticator.rb +12 -5
  71. data/lib/k2-connect-ruby/k2_utilities/k2_connection.rb +0 -49
  72. data/lib/k2-connect-ruby/k2_utilities/k2_connection_helper.rb +21 -0
  73. data/lib/k2-connect-ruby/k2_utilities/k2_process_result.rb +16 -15
  74. data/lib/k2-connect-ruby/k2_utilities/k2_process_webhook.rb +34 -21
  75. data/lib/k2-connect-ruby/k2_utilities/k2_url_parse.rb +3 -1
  76. data/lib/k2-connect-ruby/k2_utilities/phone_number_validator.rb +15 -0
  77. data/lib/k2-connect-ruby/k2_utilities.rb +9 -20
  78. data/lib/k2-connect-ruby/version.rb +1 -1
  79. data/lib/k2-connect-ruby.rb +14 -13
  80. metadata +101 -33
  81. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/k2_pay.rb +0 -98
  82. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/k2_settlement.rb +0 -48
  83. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/k2_transfer.rb +0 -44
  84. data/lib/k2-connect-ruby/k2_entity/k2_notification.rb +0 -40
  85. data/lib/k2-connect-ruby/k2_services/payload_process.rb +0 -19
  86. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/settlement_webhook.rb +0 -44
  87. data/lib/k2-connect-ruby/k2_utilities/k2_validation.rb +0 -128
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module K2ConnectRuby
2
4
  module K2Services
3
5
  module Payloads
4
6
  module Transactions
5
7
  class OutgoingPayment < OutgoingTransaction
6
8
  attr_reader :transaction_reference,
7
- :destination
9
+ :destination
8
10
 
9
11
  def initialize(payload)
10
12
  super
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module K2ConnectRuby
4
+ module K2Services
5
+ module Payloads
6
+ module Transactions
7
+ # Parsed attributes of payment link result callback
8
+ class PaymentLink
9
+ include ActiveModel::Validations
10
+
11
+ attr_reader :id, :type, :status, :created_at, :till_name, :currency, :amount, :payment_reference, :note,
12
+ :payment_link, :request_errors, :metadata, :callback_url, :links_self
13
+
14
+ validates :id, :type, :status, :created_at, :till_name, :currency, :amount, :callback_url, :links_self,
15
+ presence: :true
16
+ validates :type, comparison: { equal_to: "payment_link" }
17
+
18
+ def initialize(payload)
19
+ @id = payload.dig("data", "id")
20
+ @type = payload.dig("data", "type")
21
+ @status = payload.dig("data", "attributes", "status")
22
+ @created_at = payload.dig("data", "attributes", "created_at")
23
+ @till_name = payload.dig("data", "attributes", "till_name")
24
+ @currency = payload.dig("data", "attributes", "currency")
25
+ @amount = payload.dig("data", "attributes", "amount")
26
+ @payment_reference = payload.dig("data", "attributes", "payment_reference")
27
+ @note = payload.dig("data", "attributes", "note")
28
+ @payment_link = payload.dig("data", "attributes", "payment_link")&.deep_symbolize_keys
29
+ @metadata = payload.dig("data", "attributes", "metadata")&.deep_symbolize_keys
30
+ @request_errors = payload.dig("data", "attributes", "errors")
31
+ @callback_url = payload.dig("data", "attributes", "_links", "callback_url")
32
+ @links_self = payload.dig("data", "attributes", "_links", "self")
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module K2ConnectRuby
4
+ module K2Services
5
+ module Payloads
6
+ module Transactions
7
+ # Parsed attributes of reversal result callback
8
+ class Reversal
9
+ include ActiveModel::Validations
10
+
11
+ attr_reader :id, :type, :transaction_reference, :reason, :status, :created_at, :reversal_bulk_payment,
12
+ :request_errors, :metadata, :callback_url, :links_self
13
+
14
+ validates :id, :type, :transaction_reference, :reason, :status, :created_at, :callback_url, :links_self,
15
+ presence: true
16
+ validates :type, comparison: { equal_to: "reversal" }
17
+
18
+ def initialize(payload)
19
+ @id = payload.dig("data", "id")
20
+ @type = payload.dig("data", "type")
21
+ @transaction_reference = payload.dig("data", "attributes", "transaction_reference")
22
+ @status = payload.dig("data", "attributes", "status")
23
+ @created_at = payload.dig("data", "attributes", "created_at")
24
+ @reason = payload.dig("data", "attributes", "reason")
25
+ @reversal_bulk_payment = payload.dig("data", "attributes", "reversal_bulk_payment")&.deep_symbolize_keys
26
+ @metadata = payload.dig("data", "attributes", "metadata")&.deep_symbolize_keys
27
+ @request_errors = payload.dig("data", "attributes", "errors")
28
+ @links_self = payload.dig("data", "attributes", "_links", "self")
29
+ @callback_url = payload.dig("data", "attributes", "_links", "callback_url")
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module K2ConnectRuby
4
+ module K2Services
5
+ module Payloads
6
+ module Transactions
7
+ class SendMoneyPayment < OutgoingTransaction
8
+ attr_reader :transaction_reference,
9
+ :destination
10
+
11
+ def initialize(payload)
12
+ super
13
+ end
14
+
15
+ private
16
+
17
+ def valid_payment_type
18
+ raise ArgumentError, "Wrong Payment Type" unless @type.eql?("send_money")
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module K2ConnectRuby
2
4
  module K2Services
3
5
  module Payloads
@@ -1,15 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module K2ConnectRuby
2
4
  module K2Services
3
5
  module Payloads
4
6
  module Webhooks
5
7
  class B2bTransactionReceived < K2CommonEvents
8
+ include ActiveModel::Validations
9
+
10
+ validates :topic, comparison: { equal_to: "b2b_transaction_received" }
11
+
6
12
  attr_reader :sending_till,
7
- :till_number
13
+ :till_number
8
14
 
9
15
  def initialize(payload)
10
16
  super
11
- @till_number = payload.dig('event', 'resource', 'till_number')
12
- @sending_till = payload.dig('event', 'resource', 'sending_till')
17
+ @till_number = payload.dig("event", "resource", "till_number")
18
+ @sending_till = payload.dig("event", "resource", "sending_till")
13
19
  end
14
20
  end
15
21
  end
@@ -0,0 +1,22 @@
1
+ module K2ConnectRuby
2
+ module K2Services
3
+ module Payloads
4
+ module Webhooks
5
+ class B2bTransactionReversed < K2CommonEvents
6
+ include ActiveModel::Validations
7
+
8
+ validates :topic, comparison: { equal_to: "b2b_transaction_reversed" }
9
+
10
+ attr_reader :sending_till,
11
+ :till_number
12
+
13
+ def initialize(payload)
14
+ super
15
+ @till_number = payload.dig("event", "resource", "till_number")
16
+ @sending_till = payload.dig("event", "resource", "sending_till")
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,8 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module K2ConnectRuby
2
4
  module K2Services
3
5
  module Payloads
4
6
  module Webhooks
5
7
  class BuygoodsTransactionReceived < Buygoods
8
+ include ActiveModel::Validations
9
+
10
+ validates :topic, comparison: { equal_to: "buygoods_transaction_received" }
11
+
6
12
  def initialize(payload)
7
13
  super
8
14
  end
@@ -3,6 +3,10 @@ module K2ConnectRuby
3
3
  module Payloads
4
4
  module Webhooks
5
5
  class BuygoodsTransactionReversed < Buygoods
6
+ include ActiveModel::Validations
7
+
8
+ validates :topic, comparison: { equal_to: "buygoods_transaction_reversed" }
9
+
6
10
  def initialize(payload)
7
11
  super
8
12
  end
@@ -0,0 +1,18 @@
1
+ module K2ConnectRuby
2
+ module K2Services
3
+ module Payloads
4
+ module Webhooks
5
+ class CardTransactionReceived < K2CommonEvents
6
+ attr_reader :settled, :till_number, :customer_cc_number
7
+
8
+ def initialize(payload)
9
+ super
10
+ @customer_cc_number = payload.dig("event", "resource", "customer_cc_number")
11
+ @till_number = payload.dig("event", "resource", "till_number")
12
+ @settled = payload.dig("event", "resource", "settled")
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,17 @@
1
+ module K2ConnectRuby
2
+ module K2Services
3
+ module Payloads
4
+ module Webhooks
5
+ class CardTransactionReversed < K2CommonEvents
6
+ attr_reader :till_number, :customer_cc_number
7
+
8
+ def initialize(payload)
9
+ super
10
+ @customer_cc_number = payload.dig("event", "resource", "customer_cc_number")
11
+ @till_number = payload.dig("event", "resource", "till_number")
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module K2ConnectRuby
2
+ module K2Services
3
+ module Payloads
4
+ module Webhooks
5
+ class CardTransactionVoided < K2CommonEvents
6
+ attr_reader :till_number, :customer_cc_number
7
+
8
+ def initialize(payload)
9
+ super
10
+ @customer_cc_number = payload.dig("event", "resource", "customer_cc_number")
11
+ @till_number = payload.dig("event", "resource", "till_number")
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -3,17 +3,21 @@ module K2ConnectRuby
3
3
  module Payloads
4
4
  module Webhooks
5
5
  class CustomerCreated < K2Webhooks
6
+ include ActiveModel::Validations
7
+
8
+ validates :topic, comparison: { equal_to: "customer_created" }
9
+
6
10
  attr_reader :resource_first_name,
7
- :resource_middle_name,
8
- :resource_last_name,
9
- :resource_phone_number
11
+ :resource_middle_name,
12
+ :resource_last_name,
13
+ :resource_phone_number
10
14
 
11
15
  def initialize(payload)
12
16
  super
13
- @resource_first_name = payload.dig('event', 'resource', 'first_name')
14
- @resource_middle_name = payload.dig('event', 'resource', 'middle_name')
15
- @resource_last_name = payload.dig('event', 'resource', 'last_name')
16
- @resource_phone_number = payload.dig('event', 'resource', 'phone_number')
17
+ @resource_first_name = payload.dig("event", "resource", "first_name")
18
+ @resource_middle_name = payload.dig("event", "resource", "middle_name")
19
+ @resource_last_name = payload.dig("event", "resource", "last_name")
20
+ @resource_phone_number = payload.dig("event", "resource", "phone_number")
17
21
  end
18
22
  end
19
23
  end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module K2ConnectRuby
4
+ module K2Services
5
+ module Payloads
6
+ module Webhooks
7
+ class TransferWebhook < K2CommonEvents
8
+ include ActiveModel::Validations
9
+
10
+ validates :topic, comparison: { equal_to: "settlement_transfer_completed" }
11
+
12
+ attr_reader :disbursements,
13
+ :destination_type,
14
+ :destination_network,
15
+ :destination_reference,
16
+ :destination_last_name,
17
+ :destination_first_name,
18
+ :destination_account_name,
19
+ :destination_phone_number,
20
+ :destination_account_number,
21
+ :destination_bank_branch_ref,
22
+ :destination_transfer_method
23
+
24
+ def initialize(payload)
25
+ super
26
+ # Destination
27
+ @disbursements = payload.dig("event", "resource", "disbursements")
28
+ @destination_type = payload.dig("event", "resource", "destination", "type")
29
+ @destination_reference = payload.dig("event", "resource", "destination", "resource", "reference")
30
+ destination_assets(payload)
31
+ end
32
+
33
+ def destination_assets(payload)
34
+ if @destination_type.eql?("Mobile Wallet")
35
+ @destination_network = payload.dig("event", "resource", "destination", "resource", "network")
36
+ @destination_last_name = payload.dig("event", "resource", "destination", "resource", "last_name")
37
+ @destination_first_name = payload.dig("event", "resource", "destination", "resource", "first_name")
38
+ @destination_phone_number = payload.dig("event", "resource", "destination", "resource", "phone_number")
39
+ elsif @destination_type.eql?("Bank Account")
40
+ @destination_account_name = payload.dig("event", "resource", "destination", "resource", "account_name")
41
+ @destination_account_number = payload.dig("event", "resource", "destination", "resource", "account_number")
42
+ @destination_bank_branch_ref = payload.dig("event", "resource", "destination", "resource", "bank_branch_ref")
43
+ @destination_transfer_method = payload.dig("event", "resource", "destination", "resource", "transfer_method")
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module K2ConnectRuby
4
+ module K2Services
5
+ class SendIntrospectTokenRequestService < BaseService
6
+ include K2ConnectRuby::K2Utilities::K2ConnectionHelper
7
+
8
+ attr_reader :client_id, :client_secret, :access_token
9
+
10
+ def initialize(client_id, client_secret, access_token)
11
+ super()
12
+ @client_id = client_id
13
+ @client_secret = client_secret
14
+ @access_token = access_token
15
+ end
16
+
17
+ def execute
18
+ send_request
19
+ end
20
+
21
+ private
22
+
23
+ def send_request
24
+ response = K2ConnectRuby::HttpClient.post(
25
+ endpoint,
26
+ payload: params.to_json,
27
+ headers: request_headers
28
+ )
29
+
30
+ CallResult.success(
31
+ {
32
+ response_code: response.code,
33
+ response_headers: response_headers(response.headers),
34
+ response_body: response_body(response.body),
35
+ },
36
+ )
37
+ end
38
+
39
+ def endpoint
40
+ K2ConnectRuby::K2Utilities::Config::K2Config.endpoint("introspect_token")
41
+ end
42
+
43
+ def params
44
+ {
45
+ client_id: client_id,
46
+ client_secret: client_secret,
47
+ token: access_token,
48
+ }
49
+ end
50
+
51
+ def request_headers
52
+ { "Content-Type" => "application/json", "Accept" => "application/json", "User-Agent" => "Kopokopo-Ruby-SDK" }
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module K2ConnectRuby
4
+ module K2Services
5
+ class SendK2ConnectGetRequestService < BaseService
6
+ include K2ConnectRuby::K2Utilities::K2ConnectionHelper
7
+
8
+ attr_reader :access_token, :endpoint, :request_body
9
+
10
+ def initialize(access_token, endpoint)
11
+ super()
12
+ @access_token = access_token
13
+ @endpoint = endpoint
14
+ end
15
+
16
+ def execute
17
+ send_request
18
+ end
19
+
20
+ private
21
+
22
+ def send_request
23
+ response = K2ConnectRuby::HttpClient.get(
24
+ endpoint,
25
+ headers: request_headers
26
+ )
27
+
28
+ CallResult.success(
29
+ {
30
+ response_code: response.code,
31
+ response_headers: response_headers(response.headers),
32
+ response_body: response_body(response.body),
33
+ },
34
+ )
35
+ end
36
+
37
+ def request_headers
38
+ { "Content-Type" => "application/json", "Accept" => "application/json", Authorization: "Bearer #{access_token}", "User-Agent" => "Kopokopo-Ruby-SDK" }
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module K2ConnectRuby
4
+ module K2Services
5
+ class SendK2ConnectPostRequestService < BaseService
6
+ include K2ConnectRuby::K2Utilities::K2ConnectionHelper
7
+
8
+ attr_reader :access_token, :endpoint, :request_body
9
+
10
+ def initialize(access_token, endpoint, request_body)
11
+ super()
12
+ @access_token = access_token
13
+ @endpoint = endpoint
14
+ @request_body = request_body
15
+ end
16
+
17
+ def execute
18
+ send_request
19
+ end
20
+
21
+ private
22
+
23
+ def send_request
24
+ response = K2ConnectRuby::HttpClient.post(
25
+ endpoint,
26
+ payload: request_body.to_json,
27
+ headers: request_headers
28
+ )
29
+
30
+ CallResult.success(
31
+ {
32
+ response_code: response.code,
33
+ response_headers: response_headers(response.headers),
34
+ response_body: response_body(response.body),
35
+ },
36
+ )
37
+ end
38
+
39
+ def request_headers
40
+ { "Content-Type" => "application/json", "Accept" => "application/json", Authorization: "Bearer #{access_token}", "User-Agent" => "Kopokopo-Ruby-SDK" }
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module K2ConnectRuby
4
+ module K2Services
5
+ class SendRequestTokenRequestService < BaseService
6
+ include K2ConnectRuby::K2Utilities::K2ConnectionHelper
7
+
8
+ attr_reader :client_id, :client_secret
9
+
10
+ def initialize(client_id, client_secret)
11
+ super()
12
+ @client_id = client_id
13
+ @client_secret = client_secret
14
+ end
15
+
16
+ def execute
17
+ send_request
18
+ end
19
+
20
+ private
21
+
22
+ def send_request
23
+ response = K2ConnectRuby::HttpClient.post(
24
+ endpoint,
25
+ payload: request_body_json,
26
+ headers: request_headers
27
+ )
28
+
29
+ CallResult.success(
30
+ {
31
+ response_code: response.code,
32
+ response_headers: response_headers(response.headers),
33
+ response_body: response_body(response.body),
34
+ },
35
+ )
36
+ end
37
+
38
+ def endpoint
39
+ K2ConnectRuby::K2Utilities::Config::K2Config.endpoint("oauth_token")
40
+ end
41
+
42
+ def request_headers
43
+ { "Content-Type" => "application/json", "Accept" => "application/json", "User-Agent" => "Kopokopo-Ruby-SDK" }
44
+ end
45
+
46
+ def request_body_json
47
+ {
48
+ client_id: client_id,
49
+ client_secret: client_secret,
50
+ grant_type: "client_credentials",
51
+ }.to_json
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module K2ConnectRuby
4
+ module K2Services
5
+ class SendRevokeTokenRequestService < BaseService
6
+ include K2ConnectRuby::K2Utilities::K2ConnectionHelper
7
+
8
+ attr_reader :client_id, :client_secret, :access_token
9
+
10
+ def initialize(client_id, client_secret, access_token)
11
+ super()
12
+ @client_id = client_id
13
+ @client_secret = client_secret
14
+ @access_token = access_token
15
+ end
16
+
17
+ def execute
18
+ send_request
19
+ end
20
+
21
+ private
22
+
23
+ def send_request
24
+ response = K2ConnectRuby::HttpClient.post(
25
+ endpoint,
26
+ payload: params.to_json,
27
+ headers: request_headers
28
+ )
29
+
30
+ CallResult.success(
31
+ {
32
+ response_code: response.code,
33
+ response_headers: response_headers(response.headers),
34
+ response_body: response_body(response.body),
35
+ },
36
+ )
37
+ end
38
+
39
+ def endpoint
40
+ K2ConnectRuby::K2Utilities::Config::K2Config.endpoint("revoke_token")
41
+ end
42
+
43
+ def params
44
+ {
45
+ client_id: client_id,
46
+ client_secret: client_secret,
47
+ token: access_token,
48
+ }
49
+ end
50
+
51
+ def request_headers
52
+ { "Content-Type" => "application/json", "Accept" => "application/json", "User-Agent" => "Kopokopo-Ruby-SDK" }
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module K2ConnectRuby
4
+ module K2Services
5
+ class SendTokenInfoRequestService < BaseService
6
+ include K2ConnectRuby::K2Utilities::K2ConnectionHelper
7
+
8
+ attr_reader :access_token
9
+
10
+ def initialize(access_token)
11
+ super()
12
+ @access_token = access_token
13
+ end
14
+
15
+ def execute
16
+ send_request
17
+ end
18
+
19
+ private
20
+
21
+ def send_request
22
+ response = K2ConnectRuby::HttpClient.get(
23
+ endpoint,
24
+ headers: request_headers
25
+ )
26
+ CallResult.success(
27
+ {
28
+ response_code: response.code,
29
+ response_headers: response_headers(response.headers),
30
+ response_body: response_body(response.body),
31
+ },
32
+ )
33
+ end
34
+
35
+ def endpoint
36
+ K2ConnectRuby::K2Utilities::Config::K2Config.endpoint("token_info")
37
+ end
38
+
39
+ def request_headers
40
+ { "Content-Type" => "application/json", "Accept" => "application/json", "Authorization" => "Bearer #{access_token}", "User-Agent" => "Kopokopo-Ruby-SDK" }
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,29 @@
1
+ require "k2-connect-ruby/k2_services/k2_client"
2
+ require "k2-connect-ruby/k2_services/base_service"
3
+ require "k2-connect-ruby/k2_services/send_k2_connect_get_request_service"
4
+ require "k2-connect-ruby/k2_services/send_k2_connect_post_request_service"
5
+ require "k2-connect-ruby/k2_services/send_request_token_request_service"
6
+ require "k2-connect-ruby/k2_services/send_revoke_token_request_service"
7
+ require "k2-connect-ruby/k2_services/send_introspect_token_request_service"
8
+ require "k2-connect-ruby/k2_services/send_token_info_request_service"
9
+
10
+ require "k2-connect-ruby/k2_services/payloads/k2_webhooks"
11
+ require "k2-connect-ruby/k2_services/payloads/webhooks/b2b_transaction_received"
12
+ require "k2-connect-ruby/k2_services/payloads/webhooks/b2b_transaction_reversed"
13
+ require "k2-connect-ruby/k2_services/payloads/webhooks/customer_created"
14
+ require "k2-connect-ruby/k2_services/payloads/webhooks/buygoods_transaction_received"
15
+ require "k2-connect-ruby/k2_services/payloads/webhooks/buygoods_transaction_reversed"
16
+ require "k2-connect-ruby/k2_services/payloads/webhooks/transfer_webhook"
17
+ require "k2-connect-ruby/k2_services/payloads/daraja_webhooks"
18
+
19
+ require "k2-connect-ruby/k2_services/payloads/k2_transaction"
20
+ require "k2-connect-ruby/k2_services/payloads/transactions/transfer"
21
+ require "k2-connect-ruby/k2_services/payloads/transactions/incoming_payment"
22
+ require "k2-connect-ruby/k2_services/payloads/transactions/outgoing_payment"
23
+ require "k2-connect-ruby/k2_services/payloads/transactions/send_money_payment"
24
+ require "k2-connect-ruby/k2_services/payloads/transactions/reversal"
25
+ require "k2-connect-ruby/k2_services/payloads/transactions/payment_link"
26
+
27
+ module K2ConnectRuby
28
+ module K2Services; end
29
+ end