-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathflutterwave_sdk.rb
More file actions
131 lines (112 loc) · 5.25 KB
/
flutterwave_sdk.rb
File metadata and controls
131 lines (112 loc) · 5.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
require_relative "flutterwave_sdk/version"
require_relative "flutterwave_sdk/flutterwave_modules/base_endpoints"
require_relative "flutterwave_sdk/flutterwave_objects/base/base"
require_relative "flutterwave_sdk/flutterwave_modules/util"
require_relative "flutterwave_sdk/flutterwave_objects/card"
require_relative "flutterwave_sdk/flutterwave_objects/uk_and_eu_account"
require_relative "flutterwave_sdk/flutterwave_objects/mobile_money"
require_relative "flutterwave_sdk/flutterwave_objects/account_payment"
require_relative "flutterwave_sdk/flutterwave_objects/bank_transfer"
require_relative "flutterwave_sdk/flutterwave_objects/ussd_payment"
require_relative "flutterwave_sdk/flutterwave_objects/qr"
require_relative "flutterwave_sdk/flutterwave_objects/tokenized_charge"
require_relative "flutterwave_sdk/flutterwave_objects/transactions"
require_relative "flutterwave_sdk/flutterwave_objects/transfer"
require_relative "flutterwave_sdk/flutterwave_objects/bank"
require_relative "flutterwave_sdk/flutterwave_objects/misc"
require_relative "flutterwave_sdk/flutterwave_objects/payment_plan"
require_relative "flutterwave_sdk/flutterwave_objects/beneficiaries"
require_relative "flutterwave_sdk/flutterwave_objects/subscriptions"
require_relative "flutterwave_sdk/flutterwave_objects/virtual_card"
require_relative "flutterwave_sdk/flutterwave_objects/subaccount"
require_relative "flutterwave_sdk/flutterwave_objects/settlements"
require_relative "flutterwave_sdk/flutterwave_objects/otp"
require_relative "flutterwave_sdk/flutterwave_objects/virtual_account_number"
require_relative "flutterwave_sdk/flutterwave_objects/bills"
require_relative "flutterwave_sdk/flutterwave_objects/preauthorise"
require_relative "flutterwave_sdk/flutterwave_objects/enaira"
require_relative "flutterwave_sdk/flutterwave_objects/apple_payment"
require_relative "flutterwave_sdk/flutterwave_objects/fawry_payment"
require_relative "flutterwave_sdk/flutterwave_objects/google_payment"
require_relative "flutterwave_sdk/error"
class Flutterwave
attr_accessor :public_key, :secret_key, :encryption_key, :production, :url
# method to initialize flutterwave object
def initialize(public_key=nil, secret_key=nil, encryption_key=nil, production=false)
@public_key = public_key
@secret_key = secret_key
@production = production
@encryption_key = encryption_key
flutterwave_sandbox_url = BASE_ENDPOINTS::FLUTTERWAVE_SANDBOX_URL
flutterwave_live_url = BASE_ENDPOINTS::FLUTTERWAVE_LIVE_URL
# set rave url to sandbox or live if we are in production or development
if production == false
@url = flutterwave_sandbox_url
else
@url = flutterwave_live_url
end
def base_url
return url
end
# check if we set our public , secret and encryption keys to the environment variable
if (public_key.nil?)
@public_key = ENV['FLUTTERWAVE_PUBLIC_KEY']
else
@public_key = public_key
end
if (secret_key.nil?)
@secret_key = ENV['FLUTTERWAVE_SECRET_KEY']
else
@secret_key = secret_key
end
if (encryption_key.nil?)
@encryption_key = ENV['FLUTTERWAVE_ENCRYPTION_KEY']
else
@encryption_key = encryption_key
end
warn "Warning: To ensure your rave account api keys are safe, It is best to always set your keys in the environment variable"
# raise this error if no public key is passed
unless !@public_key.nil?
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"
end
# raise this error if invalid public key is passed
unless @public_key[0..7] == 'FLWPUBK-' || @public_key[0..11] == 'FLWPUBK_TEST'
raise FlutterwaveBadKeyError, "Invalid public key #{@public_key}"
end
# raise this error if no secret key is passed
unless !@secret_key.nil?
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"
end
# raise this error if invalid secret key is passed
unless @secret_key[0..7] == 'FLWSECK-' || @secret_key[0..11] == 'FLWSECK_TEST'
raise FlutterwaveBadKeyError, "Invalid secret key #{@secret_key}"
end
# raise this error if no encryption key is passed
unless !@encryption_key.nil?
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"
end
end
#tracking activities
def flutterwave_tracking
endpoint = "https://kgelfdz7mf.execute-api.us-east-1.amazonaws.com/staging/sendevent"
public_key = @public_key
payload = {
"PBFPubKey" => public_key,
"language" => "Ruby",
"version" => "1.0",
"title" => "test message",
"message" => "test is done"
}
data = payload.to_json
response = HTTParty.post(endpoint, {
body: data,
headers: {
'Content-Type' => 'application/json'
}
})
unless (response.code == 200 || response.code == 201)
raise RaveServerError.new(response), "HTTP Code #{response.code}: #{response.body}"
end
return response
end
end