flutterwave_sdk 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +32 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +6 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +7 -0
  7. data/Gemfile.lock +34 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +1282 -0
  10. data/Rakefile +6 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/flutterwave_sdk.gemspec +28 -0
  14. data/lib/flutterwave_sdk/error.rb +15 -0
  15. data/lib/flutterwave_sdk/flutterwave_modules/base_endpoints.rb +5 -0
  16. data/lib/flutterwave_sdk/flutterwave_modules/util.rb +26 -0
  17. data/lib/flutterwave_sdk/flutterwave_objects/account_payment.rb +55 -0
  18. data/lib/flutterwave_sdk/flutterwave_objects/bank.rb +17 -0
  19. data/lib/flutterwave_sdk/flutterwave_objects/bank_transfer.rb +30 -0
  20. data/lib/flutterwave_sdk/flutterwave_objects/base/base.rb +109 -0
  21. data/lib/flutterwave_sdk/flutterwave_objects/base/card_base.rb +49 -0
  22. data/lib/flutterwave_sdk/flutterwave_objects/beneficiaries.rb +34 -0
  23. data/lib/flutterwave_sdk/flutterwave_objects/bills.rb +86 -0
  24. data/lib/flutterwave_sdk/flutterwave_objects/card.rb +55 -0
  25. data/lib/flutterwave_sdk/flutterwave_objects/misc.rb +37 -0
  26. data/lib/flutterwave_sdk/flutterwave_objects/mobile_money.rb +49 -0
  27. data/lib/flutterwave_sdk/flutterwave_objects/otp.rb +22 -0
  28. data/lib/flutterwave_sdk/flutterwave_objects/payment_plan.rb +42 -0
  29. data/lib/flutterwave_sdk/flutterwave_objects/preauthorise.rb +26 -0
  30. data/lib/flutterwave_sdk/flutterwave_objects/qr.rb +28 -0
  31. data/lib/flutterwave_sdk/flutterwave_objects/settlements.rb +17 -0
  32. data/lib/flutterwave_sdk/flutterwave_objects/subaccount.rb +40 -0
  33. data/lib/flutterwave_sdk/flutterwave_objects/subscriptions.rb +25 -0
  34. data/lib/flutterwave_sdk/flutterwave_objects/tokenized_charge.rb +61 -0
  35. data/lib/flutterwave_sdk/flutterwave_objects/transactions.rb +47 -0
  36. data/lib/flutterwave_sdk/flutterwave_objects/transfer.rb +46 -0
  37. data/lib/flutterwave_sdk/flutterwave_objects/ussd_payment.rb +27 -0
  38. data/lib/flutterwave_sdk/flutterwave_objects/virtual_account_number.rb +34 -0
  39. data/lib/flutterwave_sdk/flutterwave_objects/virtual_card.rb +66 -0
  40. data/lib/flutterwave_sdk/version.rb +3 -0
  41. data/lib/flutterwave_sdk.rb +126 -0
  42. metadata +88 -0
@@ -0,0 +1,42 @@
1
+ require_relative "base/base.rb"
2
+ require 'json'
3
+
4
+ class PaymentPlan < Base
5
+
6
+ # method to create a payment plan
7
+ def create_payment_plan(data)
8
+ base_url = flutterwave_object.base_url
9
+ required_parameters = ["amount", "name", "interval"]
10
+ check_passed_parameters(required_parameters, data)
11
+ payload = data.to_json
12
+ response = post_request("#{base_url}/payment-plans", payload)
13
+ return response
14
+ end
15
+
16
+ def get_payment_plans
17
+ base_url = flutterwave_object.base_url
18
+ response = get_request("#{base_url}/payment-plans")
19
+ return response
20
+ end
21
+
22
+ def get_a_payment_plan(id)
23
+ base_url = flutterwave_object.base_url
24
+ response = get_request("#{base_url}/payment-plans/#{id}")
25
+ return response
26
+ end
27
+
28
+ def update_payment_plan(id, data)
29
+ base_url = flutterwave_object.base_url
30
+ payload = data.to_json
31
+ response = put_request("#{base_url}/payment-plans/#{id}",payload)
32
+ return response
33
+ end
34
+
35
+ def cancel_payment_plan(id)
36
+ base_url = flutterwave_object.base_url
37
+ payload = {}
38
+ payload = payload.to_json
39
+ response = put_request("#{base_url}/payment-plans/#{id}/cancel",payload)
40
+ return response
41
+ end
42
+ end
@@ -0,0 +1,26 @@
1
+ require_relative "base/base.rb"
2
+ require 'json'
3
+
4
+ class Preauth < Base
5
+
6
+ def capture_preauth(flw_ref, data)
7
+ base_url = flutterwave_object.base_url
8
+ payload = data.to_json
9
+ response = post_request("#{base_url}/charges/#{flw_ref}/capture", payload)
10
+ return response
11
+ end
12
+
13
+ def void_preauth(flw_ref)
14
+ base_url = flutterwave_object.base_url
15
+ payload = payload.to_json
16
+ response = post_request("#{base_url}/charges/#{flw_ref}/void", payload)
17
+ return response
18
+ end
19
+
20
+ def refund_preauth(flw_ref, data)
21
+ base_url = flutterwave_object.base_url
22
+ payload = data.to_json
23
+ response = post_request("#{base_url}/charges/#{flw_ref}/refund", payload)
24
+ return response
25
+ end
26
+ end
@@ -0,0 +1,28 @@
1
+ require_relative "base/base.rb"
2
+ require 'json'
3
+
4
+ class QR < Base
5
+ def initiate_charge(data)
6
+ base_url = flutterwave_object.base_url
7
+ # only update the payload with the transaction reference if it isn't already added to the payload
8
+ if !data.key?("tx_ref")
9
+ data.merge!({"tx_ref" => Util.transaction_reference_generator})
10
+ end
11
+ # check the currency to determine the type and the required parameters
12
+ required_parameters = ["amount", "fullname", "email", "phone_number", "tx_ref", "currency"]
13
+
14
+ check_passed_parameters(required_parameters, data)
15
+ type = "qr"
16
+ payload = data.to_json
17
+
18
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::CHARGE_ENDPOINT}?type=#{type}", payload)
19
+ return response
20
+ end
21
+
22
+ # mthod to verify transaction
23
+ def verify_charge(id)
24
+ base_url = flutterwave_object.base_url
25
+ response = get_request("#{base_url}/transactions/#{id}/verify")
26
+ return response
27
+ end
28
+ end
@@ -0,0 +1,17 @@
1
+ require_relative "base/base.rb"
2
+ require 'json'
3
+
4
+ class Settlements < Base
5
+
6
+ def get_settlements
7
+ base_url = flutterwave_object.base_url
8
+ response = get_request("#{base_url}/settlements")
9
+ return response
10
+ end
11
+
12
+ def get_settlement(id)
13
+ base_url = flutterwave_object.base_url
14
+ response = get_request("#{base_url}/settlements/#{id}")
15
+ return response
16
+ end
17
+ end
@@ -0,0 +1,40 @@
1
+ require_relative "base/base.rb"
2
+ require 'json'
3
+
4
+ class Subaccount < Base
5
+ def create_subaccount(data)
6
+ base_url = flutterwave_object.base_url
7
+ required_parameters = ["account_bank", "account_number", "business_name", "business_contact", "country", "split_value", "business_mobile"]
8
+ check_passed_parameters(required_parameters, data)
9
+ payload = data.to_json
10
+ response = post_request("#{base_url}/subaccounts", payload)
11
+ return response
12
+ end
13
+
14
+ def fetch_subaccounts
15
+ base_url = flutterwave_object.base_url
16
+ response = get_request("#{base_url}/subaccounts")
17
+ return response
18
+ end
19
+
20
+ def fetch_subaccount(id)
21
+ base_url = flutterwave_object.base_url
22
+ response = get_request("#{base_url}/subaccounts/#{id}")
23
+ return response
24
+ end
25
+
26
+ def update_subaccount(id, data)
27
+ base_url = flutterwave_object.base_url
28
+ payload = data.to_json
29
+ response = put_request("#{base_url}/subaccounts/#{id}", payload)
30
+ return response
31
+ end
32
+
33
+ def delete_subaccount(id)
34
+ base_url = flutterwave_object.base_url
35
+ payload = {}
36
+ payload = payload.to_json
37
+ response = delete_request("#{base_url}/subaccounts/#{id}", payload)
38
+ return response
39
+ end
40
+ end
@@ -0,0 +1,25 @@
1
+ require_relative "base/base.rb"
2
+ require 'json'
3
+
4
+ class Subscriptions < Base
5
+
6
+ def get_all_subscriptions
7
+ base_url = flutterwave_object.base_url
8
+ response = get_request("#{base_url}/subscriptions")
9
+ return response
10
+ end
11
+
12
+ def cancel_subscription(id)
13
+ base_url = flutterwave_object.base_url
14
+ payload = {}
15
+ payload = payload.to_json
16
+ response = put_request("#{base_url}/subscriptions/#{id}/cancel", payload)
17
+ end
18
+
19
+ def activate_subscription(id)
20
+ base_url = flutterwave_object.base_url
21
+ payload = {}
22
+ payload = payload.to_json
23
+ response = put_request("#{base_url}/subscriptions/#{id}/activate", payload)
24
+ end
25
+ end
@@ -0,0 +1,61 @@
1
+ require_relative "base/base.rb"
2
+ require 'json'
3
+
4
+ class TokenizedCharge < Base
5
+
6
+ # method to charge with token
7
+ def tokenized_charge(data)
8
+ base_url = flutterwave_object.base_url
9
+ # only update the payload with the transaction reference if it isn't already added to the payload
10
+ if !data.key?("tx_ref")
11
+ data.merge!({"tx_ref" => Util.transaction_reference_generator})
12
+ end
13
+
14
+ required_parameters = [ "token", "currency", "country", "amount", "tx_ref", "email"]
15
+ check_passed_parameters(required_parameters, data)
16
+
17
+ response = post_request("#{base_url}/tokenized-charges", data.to_json)
18
+
19
+ return response
20
+
21
+ end
22
+
23
+ def verify_tokenized_charge(id)
24
+ base_url = flutterwave_object.base_url
25
+ response = get_request("#{base_url}/transactions/#{id}/verify")
26
+ return response
27
+ end
28
+
29
+ # method for updating token detials
30
+ def update_token(data, token)
31
+ base_url = flutterwave_object.base_url
32
+ response = put_request("#{base_url}/tokens/#{token}", data.to_json)
33
+ return response
34
+ end
35
+
36
+ # method to create bulk tokenized charges
37
+ def bulk_tokenized_charge(data)
38
+ base_url = flutterwave_object.base_url
39
+ required_parameters = ["title", "retry_strategy", "bulk_data"]
40
+ check_passed_parameters(required_parameters, data)
41
+
42
+ payload = data.to_json
43
+
44
+ response = post_request("#{base_url}/bulk-tokenized-charges/", payload)
45
+ return response
46
+ end
47
+
48
+ #method to get status of a bulk tokenized charges
49
+ def bulk_tokenized_charge_status(bulk_id)
50
+ base_url = flutterwave_object.base_url
51
+ response = get_request("#{base_url}/bulk-tokenized-charges/#{bulk_id}")
52
+ return response
53
+ end
54
+
55
+ #method to get all the bulk tokenized transactions
56
+ def bulk_tokenized_charge_transactions(bulk_id)
57
+ base_url = flutterwave_object.base_url
58
+ response = get_request("#{base_url}/bulk-tokenized-charges/#{bulk_id}/transactions")
59
+ return response
60
+ end
61
+ end
@@ -0,0 +1,47 @@
1
+ require_relative "base/base.rb"
2
+ require 'json'
3
+
4
+ class Transactions < Base
5
+ def transaction_fee(currency, amount)
6
+ base_url = flutterwave_object.base_url
7
+ required_parameters = ["amount", "currency"]
8
+ check_passed_parameters(required_parameters, data)
9
+ response = get_request("#{base_url}/transactions/fee?&amount=#{amount}&currency=#{currency}")
10
+ return response
11
+ end
12
+
13
+ def get_transactions
14
+ base_url = flutterwave_object.base_url
15
+ response = get_request("#{base_url}/transactions")
16
+ return response
17
+
18
+ end
19
+
20
+ def verify_transaction(id)
21
+ base_url = flutterwave_object.base_url
22
+ response = get_request("#{base_url}/transactions/#{id}/verify")
23
+ return response
24
+ end
25
+
26
+ def transactions_events(id)
27
+ base_url = flutterwave_object.base_url
28
+ response = get_request("#{base_url}/transactions/#{id}/events")
29
+ return response
30
+ end
31
+
32
+ def initiate_a_refund(data, id)
33
+ base_url = flutterwave_object.base_url
34
+ payload = data.to_json
35
+ response = post_request("#{base_url}/transactions/#{id}/refund", payload)
36
+ return response
37
+ end
38
+
39
+ #resend transaction webhook
40
+
41
+ def resend_transaction_webhook(payload)
42
+ base_url = flutterwave_object.base_url
43
+ response = post_request("#{base_url}/transactions/resend-hook", payload.to_json)
44
+ return response
45
+ end
46
+
47
+ end
@@ -0,0 +1,46 @@
1
+ require_relative "base/base.rb"
2
+ require 'json'
3
+
4
+ class Transfer < Base
5
+
6
+ def transfer_fee(currency,amount)
7
+ base_url = flutterwave_object.base_url
8
+ response = get_request("#{base_url}/transfers/fee?currency=#{currency}&amount=#{amount}")
9
+ return response
10
+ end
11
+
12
+ def initiate_transfer(data)
13
+ base_url = flutterwave_object.base_url
14
+ # only update the payload with the transaction reference if it isn't already added to the payload
15
+ if !data.key?("tx_ref")
16
+ data.merge!({"tx_ref" => Util.transaction_reference_generator})
17
+ end
18
+
19
+ required_parameters = ["amount", "currency", "account_bank", "account_number"]
20
+ check_passed_parameters(required_parameters, data)
21
+ payload = data.to_json
22
+ response = post_request("#{base_url}/transfers", payload)
23
+ return response
24
+ end
25
+
26
+ def initiate_bulk_transfer(data)
27
+ base_url = flutterwave_object.base_url
28
+ required_parameters = ["title", "bulk_data"]
29
+ check_passed_parameters(required_parameters, data)
30
+ payload = data.to_json
31
+ response = post_request("#{base_url}/bulk-transfers", payload)
32
+ return response
33
+ end
34
+
35
+ def get_all_transfers
36
+ base_url = flutterwave_object.base_url
37
+ response = get_request("#{base_url}/transfers")
38
+ return response
39
+ end
40
+
41
+ def get_a_transfer(id)
42
+ base_url = flutterwave_object.base_url
43
+ response = get_request("#{base_url}/transfers/#{id}")
44
+ return response
45
+ end
46
+ end
@@ -0,0 +1,27 @@
1
+ require_relative "base/base.rb"
2
+ require 'json'
3
+
4
+ class USSD < Base
5
+ def initiate_charge(data)
6
+ base_url = flutterwave_object.base_url
7
+ # only update the payload with the transaction reference if it isn't already added to the payload
8
+ if !data.key?("tx_ref")
9
+ data.merge!({"tx_ref" => Util.transaction_reference_generator})
10
+ end
11
+ # check the currency to determine the type and the required parameters
12
+ required_parameters = ["amount", "account_bank", "email", "phone_number", "tx_ref", "currency"]
13
+
14
+ check_passed_parameters(required_parameters, data)
15
+ type = "ussd"
16
+ payload = data.to_json
17
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::CHARGE_ENDPOINT}?type=#{type}", payload)
18
+ return response
19
+ end
20
+
21
+ # mthod to verify transaction
22
+ def verify_charge(id)
23
+ base_url = flutterwave_object.base_url
24
+ response = get_request("#{base_url}/transactions/#{id}/verify")
25
+ return response
26
+ end
27
+ end
@@ -0,0 +1,34 @@
1
+ require_relative "base/base.rb"
2
+ require 'json'
3
+
4
+ class VirtualAccountNumber < Base
5
+
6
+ def create_virtual_account_number(data)
7
+ base_url = flutterwave_object.base_url
8
+ required_parameters = ["email", "duration", "frequency", "tx_ref"]
9
+ check_passed_parameters(required_parameters, data)
10
+ payload = data.to_json
11
+ response = post_request("#{base_url}/virtual-account-numbers", payload)
12
+ return response
13
+ end
14
+
15
+ def create_bulk_virtual_account_number(data)
16
+ base_url = flutterwave_object.base_url
17
+ payload = data.to_json
18
+ response = post_request("#{base_url}/bulk-virtual-account-numbers", payload)
19
+ return response
20
+ end
21
+
22
+ def get_bulk_virtual_account_number(batch_id)
23
+ base_url = flutterwave_object.base_url
24
+ response = get_request("#{base_url}/bulk-virtual-account-numbers/#{batch_id}")
25
+ return response
26
+ end
27
+
28
+ def get_virtual_account_number(order_ref)
29
+ base_url = flutterwave_object.base_url
30
+ response = get_request("#{base_url}/virtual-account-numbers/#{order_ref}")
31
+ return response
32
+ end
33
+
34
+ end
@@ -0,0 +1,66 @@
1
+ require_relative "base/base.rb"
2
+ require 'json'
3
+
4
+ class VirtualCard < Base
5
+
6
+ def create_virtual_card(data)
7
+ base_url = flutterwave_object.base_url
8
+ required_parameters = ["currency", "amount", "billing_name"]
9
+ check_passed_parameters(required_parameters, data)
10
+ payload = data.to_json
11
+ response = post_request("#{base_url}/virtual-cards", payload)
12
+ return response
13
+ end
14
+
15
+ def get_all_virtual_cards
16
+ base_url = flutterwave_object.base_url
17
+ response = get_request("#{base_url}/virtual-cards")
18
+ return response
19
+ end
20
+
21
+ def get_virtual_card(id)
22
+ base_url = flutterwave_object.base_url
23
+ response = get_request("#{base_url}/virtual-cards/#{id}")
24
+ return response
25
+ end
26
+
27
+ def fund_virtual_card(id, data)
28
+ base_url = flutterwave_object.base_url
29
+ required_parameters = [ "amount"]
30
+ check_passed_parameters(required_parameters, data)
31
+ payload = data.to_json
32
+ response = post_request("#{base_url}/virtual-cards/#{id}/fund", payload)
33
+ return response
34
+ end
35
+
36
+ def terminate_virtual_card(id)
37
+ base_url = flutterwave_object.base_url
38
+ payload = {}
39
+ payload = payload.to_json
40
+ response = put_request("#{base_url}/virtual-cards/#{id}/terminate", payload)
41
+ return response
42
+ end
43
+
44
+ def get_virtual_card_transactions(id, from, to, index, size)
45
+ base_url = flutterwave_object.base_url
46
+ response = get_request("#{base_url}/virtual-cards/#{id}/transactions", {"from" => from, "to" => to, "index" => index, "size" => size})
47
+ return response
48
+ end
49
+
50
+ def withdraw_from_virtual_card(id, data)
51
+ base_url = flutterwave_object.base_url
52
+ required_parameters = [ "amount"]
53
+ check_passed_parameters(required_parameters, data)
54
+ payload = data.to_json
55
+ response = post_request("#{base_url}/virtual-cards/#{id}/withdraw", payload)
56
+ return response
57
+ end
58
+
59
+ def block_unblock_virtual_card(id, status_action)
60
+ base_url = flutterwave_object.base_url
61
+ payload = {}
62
+ payload = payload.to_json
63
+ response = put_request("#{base_url}/virtual-cards/#{id}/status/#{status_action}", payload)
64
+ return response
65
+ end
66
+ end
@@ -0,0 +1,3 @@
1
+ module FlutterwaveSdk
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,126 @@
1
+ require_relative "flutterwave_sdk/version"
2
+ require_relative "flutterwave_sdk/flutterwave_modules/base_endpoints"
3
+ require_relative "flutterwave_sdk/flutterwave_objects/base/base"
4
+ require_relative "flutterwave_sdk/flutterwave_modules/util"
5
+ require_relative "flutterwave_sdk/flutterwave_objects/card"
6
+ require_relative "flutterwave_sdk/flutterwave_objects/mobile_money"
7
+ require_relative "flutterwave_sdk/flutterwave_objects/account_payment"
8
+ require_relative "flutterwave_sdk/flutterwave_objects/bank_transfer"
9
+ require_relative "flutterwave_sdk/flutterwave_objects/ussd_payment"
10
+ require_relative "flutterwave_sdk/flutterwave_objects/qr"
11
+ require_relative "flutterwave_sdk/flutterwave_objects/tokenized_charge"
12
+ require_relative "flutterwave_sdk/flutterwave_objects/transactions"
13
+ require_relative "flutterwave_sdk/flutterwave_objects/transfer"
14
+ require_relative "flutterwave_sdk/flutterwave_objects/bank"
15
+ require_relative "flutterwave_sdk/flutterwave_objects/misc"
16
+ require_relative "flutterwave_sdk/flutterwave_objects/payment_plan"
17
+ require_relative "flutterwave_sdk/flutterwave_objects/beneficiaries"
18
+ require_relative "flutterwave_sdk/flutterwave_objects/subscriptions"
19
+ require_relative "flutterwave_sdk/flutterwave_objects/virtual_card"
20
+ require_relative "flutterwave_sdk/flutterwave_objects/subaccount"
21
+ require_relative "flutterwave_sdk/flutterwave_objects/settlements"
22
+ require_relative "flutterwave_sdk/flutterwave_objects/otp"
23
+ require_relative "flutterwave_sdk/flutterwave_objects/virtual_account_number"
24
+ require_relative "flutterwave_sdk/flutterwave_objects/bills"
25
+ require_relative "flutterwave_sdk/flutterwave_objects/preauthorise"
26
+ require_relative "flutterwave_sdk/error"
27
+
28
+ class Flutterwave
29
+
30
+ attr_accessor :public_key, :secret_key, :encryption_key, :production, :url
31
+
32
+ # method to initialize flutterwave object
33
+ def initialize(public_key=nil, secret_key=nil, encryption_key=nil, production=false)
34
+ @public_key = public_key
35
+ @secret_key = secret_key
36
+ @production = production
37
+ @encryption_key = encryption_key
38
+ flutterwave_sandbox_url = BASE_ENDPOINTS::FLUTTERWAVE_SANDBOX_URL
39
+ flutterwave_live_url = BASE_ENDPOINTS::FLUTTERWAVE_LIVE_URL
40
+
41
+ # set rave url to sandbox or live if we are in production or development
42
+ if production == false
43
+ @url = flutterwave_sandbox_url
44
+ else
45
+ @url = flutterwave_live_url
46
+ end
47
+
48
+ def base_url
49
+ return url
50
+ end
51
+
52
+ # check if we set our public , secret and encryption keys to the environment variable
53
+ if (public_key.nil?)
54
+ @public_key = ENV['FLUTTERWAVE_PUBLIC_KEY']
55
+ else
56
+ @public_key = public_key
57
+ end
58
+
59
+ if (secret_key.nil?)
60
+ @secret_key = ENV['FLUTTERWAVE_SECRET_KEY']
61
+ else
62
+ @secret_key = secret_key
63
+ end
64
+
65
+ if (encryption_key.nil?)
66
+ @encryption_key = ENV['FLUTTERWAVE_ENCRYPTION_KEY']
67
+ else
68
+ @encryption_key = encryption_key
69
+ end
70
+ warn "Warning: To ensure your rave account api keys are safe, It is best to always set your keys in the environment variable"
71
+
72
+ # raise this error if no public key is passed
73
+ unless !@public_key.nil?
74
+ raise FlutterwaveBadKeyError, "No public key supplied and couldn't find any in environment variables. Make sure to set public key as an environment variable FLUTTERWAVE_PUBLIC_KEY"
75
+ end
76
+ # raise this error if invalid public key is passed
77
+ unless @public_key[0..7] == 'FLWPUBK-' || @public_key[0..11] == 'FLWPUBK_TEST'
78
+ raise FlutterwaveBadKeyError, "Invalid public key #{@public_key}"
79
+ end
80
+
81
+ # raise this error if no secret key is passed
82
+ unless !@secret_key.nil?
83
+ raise FlutterwaveBadKeyError, "No secret key supplied and couldn't find any in environment variables. Make sure to set secret key as an environment variable FLUTTERWAVE_SECRET_KEY"
84
+ end
85
+ # raise this error if invalid secret key is passed
86
+ unless @secret_key[0..7] == 'FLWSECK-' || @secret_key[0..11] == 'FLWSECK_TEST'
87
+ raise FlutterwaveBadKeyError, "Invalid secret key #{@secret_key}"
88
+ end
89
+
90
+ # raise this error if no encryption key is passed
91
+ unless !@encryption_key.nil?
92
+ raise FlutterwaveBadKeyError, "No encryption key supplied and couldn't find any in environment variables. Make sure to set encryption key as an environment variable FLUTTERWAVE_ENCRYPTION_KEY"
93
+ end
94
+ end
95
+
96
+ #tracking activities
97
+ def flutterwave_tracking
98
+ endpoint = "https://kgelfdz7mf.execute-api.us-east-1.amazonaws.com/staging/sendevent"
99
+ public_key = @public_key
100
+
101
+
102
+ payload = {
103
+ "PBFPubKey" => public_key,
104
+ "language" => "Ruby",
105
+ "version" => "1.0",
106
+ "title" => "test message",
107
+ "message" => "test is done"
108
+ }
109
+ data = payload.to_json
110
+
111
+ response = HTTParty.post(endpoint, {
112
+ body: data,
113
+ headers: {
114
+ 'Content-Type' => 'application/json'
115
+ }
116
+ })
117
+
118
+ unless (response.code == 200 || response.code == 201)
119
+ raise RaveServerError.new(response), "HTTP Code #{response.code}: #{response.body}"
120
+ end
121
+ return response
122
+ end
123
+
124
+ end
125
+
126
+