flutterwave_sdk 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +32 -0
- data/.rspec +3 -0
- data/.travis.yml +6 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +34 -0
- data/LICENSE.txt +21 -0
- data/README.md +1282 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/flutterwave_sdk.gemspec +28 -0
- data/lib/flutterwave_sdk/error.rb +15 -0
- data/lib/flutterwave_sdk/flutterwave_modules/base_endpoints.rb +5 -0
- data/lib/flutterwave_sdk/flutterwave_modules/util.rb +26 -0
- data/lib/flutterwave_sdk/flutterwave_objects/account_payment.rb +55 -0
- data/lib/flutterwave_sdk/flutterwave_objects/bank.rb +17 -0
- data/lib/flutterwave_sdk/flutterwave_objects/bank_transfer.rb +30 -0
- data/lib/flutterwave_sdk/flutterwave_objects/base/base.rb +109 -0
- data/lib/flutterwave_sdk/flutterwave_objects/base/card_base.rb +49 -0
- data/lib/flutterwave_sdk/flutterwave_objects/beneficiaries.rb +34 -0
- data/lib/flutterwave_sdk/flutterwave_objects/bills.rb +86 -0
- data/lib/flutterwave_sdk/flutterwave_objects/card.rb +55 -0
- data/lib/flutterwave_sdk/flutterwave_objects/misc.rb +37 -0
- data/lib/flutterwave_sdk/flutterwave_objects/mobile_money.rb +49 -0
- data/lib/flutterwave_sdk/flutterwave_objects/otp.rb +22 -0
- data/lib/flutterwave_sdk/flutterwave_objects/payment_plan.rb +42 -0
- data/lib/flutterwave_sdk/flutterwave_objects/preauthorise.rb +26 -0
- data/lib/flutterwave_sdk/flutterwave_objects/qr.rb +28 -0
- data/lib/flutterwave_sdk/flutterwave_objects/settlements.rb +17 -0
- data/lib/flutterwave_sdk/flutterwave_objects/subaccount.rb +40 -0
- data/lib/flutterwave_sdk/flutterwave_objects/subscriptions.rb +25 -0
- data/lib/flutterwave_sdk/flutterwave_objects/tokenized_charge.rb +61 -0
- data/lib/flutterwave_sdk/flutterwave_objects/transactions.rb +47 -0
- data/lib/flutterwave_sdk/flutterwave_objects/transfer.rb +46 -0
- data/lib/flutterwave_sdk/flutterwave_objects/ussd_payment.rb +27 -0
- data/lib/flutterwave_sdk/flutterwave_objects/virtual_account_number.rb +34 -0
- data/lib/flutterwave_sdk/flutterwave_objects/virtual_card.rb +66 -0
- data/lib/flutterwave_sdk/version.rb +3 -0
- data/lib/flutterwave_sdk.rb +126 -0
- 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}¤cy=#{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,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
|
+
|