xfers 1.0.1
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 +6 -0
- data/Gemfile +8 -0
- data/README.md +72 -0
- data/Rakefile +1 -0
- data/examples/bank_account_example.rb +83 -0
- data/examples/charges_example.rb +82 -0
- data/examples/connect_example.rb +47 -0
- data/examples/intents_example.rb +40 -0
- data/examples/payouts_example.rb +43 -0
- data/examples/user_example.rb +60 -0
- data/lib/xfers/api_operations.rb +75 -0
- data/lib/xfers/bank_account.rb +36 -0
- data/lib/xfers/charge.rb +44 -0
- data/lib/xfers/connect.rb +16 -0
- data/lib/xfers/errors/authentication_error.rb +4 -0
- data/lib/xfers/errors/internal_server_error.rb +4 -0
- data/lib/xfers/errors/invalid_request_error.rb +4 -0
- data/lib/xfers/errors/xfers_error.rb +17 -0
- data/lib/xfers/intent.rb +20 -0
- data/lib/xfers/payout.rb +20 -0
- data/lib/xfers/user.rb +23 -0
- data/lib/xfers/version.rb +3 -0
- data/lib/xfers.rb +63 -0
- data/xfers.gemspec +21 -0
- metadata +82 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 35b472a1dbed8803adec5ac5366ddfd4356965e9
|
4
|
+
data.tar.gz: db0e07a6c28b63d6d6349b353224fac335b492e5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2cc5b660e7e126efccdb9c7642ae8254f8167cebf299f10368231fa287382dd61b6c89464d14440e106d487c40c95981f6e2a1649ac0cb6ff7d383d9c5fa9a17
|
7
|
+
data.tar.gz: 41c503d906ad7eb16447a96f1433b70bb13d56a1ed6a3c33e4bc0bdb9e455e955dacc9e9fe927e2b18d3bff5f74a01092a9a15e58b27179dd2175eb2cc671b46
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
# Xfers Ruby Bindings
|
2
|
+
|
3
|
+
You can sign up for a Xfers account at https://xfers.com.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
You don't need this source code unless you want to modify the gem. If you just
|
8
|
+
want to use the Xfers Ruby bindings, you should run:
|
9
|
+
|
10
|
+
gem install xfers
|
11
|
+
|
12
|
+
If you want to build the gem from source:
|
13
|
+
|
14
|
+
gem build xfers.gemspec
|
15
|
+
|
16
|
+
### Requirements
|
17
|
+
|
18
|
+
* Ruby 2.0.0 or above.
|
19
|
+
* rest-client
|
20
|
+
|
21
|
+
### Bundler
|
22
|
+
|
23
|
+
If you are installing via bundler, you should be sure to use the https rubygems
|
24
|
+
source in your Gemfile, as any gems fetched over http could potentially be
|
25
|
+
compromised in transit and alter the code of gems fetched securely over https:
|
26
|
+
|
27
|
+
``` ruby
|
28
|
+
source 'https://rubygems.org'
|
29
|
+
|
30
|
+
gem 'xfers'
|
31
|
+
```
|
32
|
+
|
33
|
+
## Usage
|
34
|
+
|
35
|
+
The library needs to be configured with your account's secret key which is
|
36
|
+
available in the [Dashboard][dashboard]. Assign its value to `Xfers.api_key`
|
37
|
+
and the library will send it along automatically with every request:
|
38
|
+
|
39
|
+
``` ruby
|
40
|
+
require "xfers"
|
41
|
+
Xfers.set_api_key 'G-zsfAEScrqdU8GhWTEdjfdnb3XRdU8q1fH-nuWfSzo'
|
42
|
+
Xfers.set_sg_sandbox
|
43
|
+
|
44
|
+
# Retrieve user information
|
45
|
+
begin
|
46
|
+
resp = Xfers::User.retrieve
|
47
|
+
puts resp[:first_name]
|
48
|
+
puts resp[:last_name]
|
49
|
+
puts resp[:available_balance]
|
50
|
+
puts resp
|
51
|
+
rescue Xfers::XfersError => e
|
52
|
+
puts e.to_s
|
53
|
+
end
|
54
|
+
|
55
|
+
# Creating a charge
|
56
|
+
begin
|
57
|
+
Xfers::Charge.create(
|
58
|
+
:amount => '19.99',
|
59
|
+
:currency => 'SGD',
|
60
|
+
:order_id => 'A00834',
|
61
|
+
:description => 'Carousell user - Konsolidate'
|
62
|
+
)
|
63
|
+
rescue Xfers::XfersError => e
|
64
|
+
puts e.to_s
|
65
|
+
end
|
66
|
+
|
67
|
+
```
|
68
|
+
|
69
|
+
|
70
|
+
## Documentation
|
71
|
+
|
72
|
+
Please see http://docs.xfers.io/ for up-to-date documentation.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'xfers'
|
2
|
+
|
3
|
+
Xfers.set_api_key 'G-zsfAEScrqdU8GhWTEdjfdnb3XRdU8q1fH-nuWfSzo'
|
4
|
+
Xfers.set_sg_sandbox
|
5
|
+
|
6
|
+
begin
|
7
|
+
puts 'Adding bank account...'
|
8
|
+
params = {
|
9
|
+
'account_no'=> '12988012511',
|
10
|
+
'bank'=> 'OCBC'
|
11
|
+
}
|
12
|
+
bank_accounts = Xfers::BankAccount.add params
|
13
|
+
puts "number of bank accounts=> #{bank_accounts.length}"
|
14
|
+
bank_accounts.each { |account| puts "Bank Account=> #{account}" }
|
15
|
+
rescue Xfers::XfersError => e
|
16
|
+
puts e.to_s
|
17
|
+
end
|
18
|
+
|
19
|
+
begin
|
20
|
+
puts 'Adding bank account...'
|
21
|
+
params = {
|
22
|
+
'account_no'=> '03931234321',
|
23
|
+
'bank'=> 'DBS'
|
24
|
+
}
|
25
|
+
bank_accounts = Xfers::BankAccount.add params
|
26
|
+
puts "number of bank accounts=> #{bank_accounts.length}"
|
27
|
+
bank_accounts.each { |account| puts "Bank Account=> #{account}" }
|
28
|
+
rescue Xfers::XfersError => e
|
29
|
+
puts e.to_s
|
30
|
+
end
|
31
|
+
|
32
|
+
begin
|
33
|
+
puts 'Listing all bank accounts...'
|
34
|
+
bank_accounts = Xfers::BankAccount.list_all
|
35
|
+
puts "number of bank accounts=> #{bank_accounts.length}"
|
36
|
+
bank_accounts.each { |account| puts "Bank Account=> #{account}" }
|
37
|
+
rescue Xfers::XfersError => e
|
38
|
+
puts e.to_s
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
begin
|
43
|
+
puts 'Deleting bank account...'
|
44
|
+
resp = Xfers::BankAccount.delete '21'
|
45
|
+
puts resp
|
46
|
+
rescue Xfers::XfersError => e
|
47
|
+
puts e.to_s
|
48
|
+
end
|
49
|
+
|
50
|
+
begin
|
51
|
+
params = {
|
52
|
+
'account_no'=> '209367835',
|
53
|
+
'bank'=> 'POSB'
|
54
|
+
}
|
55
|
+
puts 'Updating bank account...'
|
56
|
+
resp = Xfers::BankAccount.update '22', params
|
57
|
+
puts resp
|
58
|
+
rescue Xfers::XfersError => e
|
59
|
+
puts e.to_s
|
60
|
+
end
|
61
|
+
|
62
|
+
begin
|
63
|
+
puts 'Withdrawing from bank account...'
|
64
|
+
params = {
|
65
|
+
'amount'=> '20',
|
66
|
+
'express'=> 'false'
|
67
|
+
}
|
68
|
+
resp = Xfers::BankAccount.withdraw '22', params
|
69
|
+
puts resp
|
70
|
+
rescue Xfers::XfersError => e
|
71
|
+
puts e.to_s
|
72
|
+
end
|
73
|
+
|
74
|
+
begin
|
75
|
+
puts 'Listing withdrawal requests...'
|
76
|
+
params = {
|
77
|
+
'filter'=> 'pending'
|
78
|
+
}
|
79
|
+
withdrawal_requests = Xfers::BankAccount.withdrawal_requests params
|
80
|
+
withdrawal_requests.each { |req| puts "Withdrawal request=> #{req}" }
|
81
|
+
rescue Xfers::XfersError => e
|
82
|
+
puts e.to_s
|
83
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'xfers'
|
2
|
+
|
3
|
+
Xfers.set_api_key 'G-zsfAEScrqdU8GhWTEdjfdnb3XRdU8q1fH-nuWfSzo'
|
4
|
+
Xfers.set_sg_sandbox
|
5
|
+
|
6
|
+
charge_id = ''
|
7
|
+
|
8
|
+
begin
|
9
|
+
puts 'Listing all charges...'
|
10
|
+
params = {
|
11
|
+
'limit'=> '5'
|
12
|
+
}
|
13
|
+
charges = Xfers::Charge.list_all params
|
14
|
+
charges.each { |charge|
|
15
|
+
puts charge
|
16
|
+
}
|
17
|
+
rescue Xfers::XfersError => e
|
18
|
+
puts e.to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
begin
|
22
|
+
puts 'Creating charge...'
|
23
|
+
params = {
|
24
|
+
'amount'=> '1.99',
|
25
|
+
'currency'=> 'SGD',
|
26
|
+
'order_id'=> 'A01231z2',
|
27
|
+
'description'=> 'Carousell user - Konsolidate'
|
28
|
+
}
|
29
|
+
resp = Xfers::Charge.create params
|
30
|
+
charge_id = resp[:id]
|
31
|
+
puts resp
|
32
|
+
rescue Xfers::XfersError => e
|
33
|
+
puts e.to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
begin
|
37
|
+
puts "Retrieving charge... #{charge_id}"
|
38
|
+
resp = Xfers::Charge.retrieve charge_id
|
39
|
+
puts resp
|
40
|
+
rescue Xfers::XfersError => e
|
41
|
+
puts e.to_s
|
42
|
+
end
|
43
|
+
|
44
|
+
begin
|
45
|
+
params = {
|
46
|
+
'currency'=> 'SGD',
|
47
|
+
'order_id'=> 'A01231z2',
|
48
|
+
'total_amount'=> '1.99',
|
49
|
+
'status'=> 'unclaimed'
|
50
|
+
}
|
51
|
+
puts "Validating charge... #{charge_id}"
|
52
|
+
resp = Xfers::Charge.validate charge_id, params
|
53
|
+
puts resp
|
54
|
+
rescue Xfers::XfersError => e
|
55
|
+
puts e.to_s
|
56
|
+
end
|
57
|
+
|
58
|
+
begin
|
59
|
+
puts "Cancelling charge... #{charge_id}"
|
60
|
+
resp = Xfers::Charge.cancel charge_id
|
61
|
+
puts resp
|
62
|
+
rescue Xfers::XfersError => e
|
63
|
+
puts e.to_s
|
64
|
+
end
|
65
|
+
|
66
|
+
begin
|
67
|
+
charge_id = 'your-charge-id'
|
68
|
+
puts "Settling charge... #{charge_id}"
|
69
|
+
resp = Xfers::Charge.settle charge_id, '512312'
|
70
|
+
puts resp
|
71
|
+
rescue Xfers::XfersError => e
|
72
|
+
puts e.to_s
|
73
|
+
end
|
74
|
+
|
75
|
+
begin
|
76
|
+
charge_id = 'your-charge-id'
|
77
|
+
puts "Refunding charge... #{charge_id}"
|
78
|
+
resp = Xfers::Charge.refund charge_id
|
79
|
+
puts resp
|
80
|
+
rescue Xfers::XfersError => e
|
81
|
+
puts e.to_s
|
82
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'xfers'
|
2
|
+
|
3
|
+
Xfers.set_api_key 'G-zsfAEScrqdU8GhWTEdjfdnb3XRdU8q1fH-nuWfSzo'
|
4
|
+
Xfers.set_sg_sandbox
|
5
|
+
XFERS_APP_API_KEY = 'AeWpKz5cdPoJFUwF53sBee_WsSoqym_hspiX3bcoB_Y'
|
6
|
+
|
7
|
+
user_api_token = ''
|
8
|
+
begin
|
9
|
+
puts 'Authorizing connect...'
|
10
|
+
params = {
|
11
|
+
'phone_no'=> '+6597288608',
|
12
|
+
'signature'=> 'a4f001729fe3accdbb0d9cfaf3b49b0678a4c91b'
|
13
|
+
}
|
14
|
+
resp = Xfers::Connect.authorize params, XFERS_APP_API_KEY
|
15
|
+
puts resp
|
16
|
+
rescue Xfers::XfersError => e
|
17
|
+
puts e.to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
begin
|
21
|
+
puts 'Getting connect token...'
|
22
|
+
params = {
|
23
|
+
'otp'=> '870100',
|
24
|
+
'phone_no'=> '+6597288608',
|
25
|
+
'signature'=> '780acd13b239a8e3d4586662e6c1b1e750805b66',
|
26
|
+
'return_url'=> 'https://mywebsite.com/api/v3/account_registration/completed'
|
27
|
+
}
|
28
|
+
resp = Xfers::Connect.get_token params, XFERS_APP_API_KEY
|
29
|
+
user_api_token = resp[:user_api_token]
|
30
|
+
puts resp
|
31
|
+
rescue Xfers::XfersError => e
|
32
|
+
puts e.to_s
|
33
|
+
end
|
34
|
+
|
35
|
+
begin
|
36
|
+
puts 'Retrieving user...'
|
37
|
+
Xfers.set_api_key user_api_token
|
38
|
+
|
39
|
+
resp = Xfers::User.retrieve
|
40
|
+
puts resp[:first_name]
|
41
|
+
puts resp[:last_name]
|
42
|
+
puts resp[:available_balance]
|
43
|
+
puts resp
|
44
|
+
rescue Xfers::XfersError => e
|
45
|
+
puts e.to_s
|
46
|
+
end
|
47
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'xfers'
|
2
|
+
|
3
|
+
Xfers.set_api_key 'G-zsfAEScrqdU8GhWTEdjfdnb3XRdU8q1fH-nuWfSzo'
|
4
|
+
Xfers.set_sg_sandbox
|
5
|
+
|
6
|
+
intent_id = ''
|
7
|
+
|
8
|
+
begin
|
9
|
+
puts 'Creating intent...'
|
10
|
+
params = {
|
11
|
+
'amount'=> '1.49',
|
12
|
+
'currency'=> 'SGD',
|
13
|
+
'bank'=> 'DBS',
|
14
|
+
'request_id'=> 'YOUR-CUSTOM-ID',
|
15
|
+
'notify_url'=> 'https://mysite.com/topup_notification'
|
16
|
+
}
|
17
|
+
resp = Xfers::Intent.create params
|
18
|
+
intent_id = resp[:id]
|
19
|
+
puts resp
|
20
|
+
rescue Xfers::XfersError => e
|
21
|
+
puts e.to_s
|
22
|
+
end
|
23
|
+
|
24
|
+
begin
|
25
|
+
puts 'Listing all intents...'
|
26
|
+
intents = Xfers::Intent.list_all
|
27
|
+
intents.each { |intent|
|
28
|
+
puts intent
|
29
|
+
}
|
30
|
+
rescue Xfers::XfersError => e
|
31
|
+
puts e.to_s
|
32
|
+
end
|
33
|
+
|
34
|
+
begin
|
35
|
+
puts 'Cancelling intent...'
|
36
|
+
resp = Xfers::Intent.cancel intent_id
|
37
|
+
puts resp
|
38
|
+
rescue Xfers::XfersError => e
|
39
|
+
puts e.to_s
|
40
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'xfers'
|
2
|
+
|
3
|
+
Xfers.set_api_key 'G-zsfAEScrqdU8GhWTEdjfdnb3XRdU8q1fH-nuWfSzo'
|
4
|
+
Xfers.set_sg_sandbox
|
5
|
+
|
6
|
+
payout_id = ''
|
7
|
+
|
8
|
+
begin
|
9
|
+
puts 'Creating payout...'
|
10
|
+
params = {
|
11
|
+
'amount'=> '0.84',
|
12
|
+
'invoice_id'=> 'SPA-MEMBERSHIP',
|
13
|
+
'recipient'=> 'demo@xfers.io'
|
14
|
+
}
|
15
|
+
resp = Xfers::Payout.create params
|
16
|
+
payout_id = resp[:id]
|
17
|
+
puts resp[:recipient]
|
18
|
+
puts resp[:invoice_id]
|
19
|
+
puts resp
|
20
|
+
rescue Xfers::XfersError => e
|
21
|
+
puts e.to_s
|
22
|
+
end
|
23
|
+
|
24
|
+
begin
|
25
|
+
puts 'Retrieving payout...'
|
26
|
+
resp = Xfers::Payout.retrieve payout_id
|
27
|
+
puts resp
|
28
|
+
rescue Xfers::XfersError => e
|
29
|
+
puts e.to_s
|
30
|
+
end
|
31
|
+
|
32
|
+
begin
|
33
|
+
puts 'Listing all payouts...'
|
34
|
+
params = {
|
35
|
+
'recipient'=> '+6597288608'
|
36
|
+
}
|
37
|
+
payouts = Xfers::Payout.list_all params
|
38
|
+
payouts.each { |payout|
|
39
|
+
puts payout
|
40
|
+
}
|
41
|
+
rescue Xfers::XfersError => e
|
42
|
+
puts e.to_s
|
43
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'xfers'
|
2
|
+
|
3
|
+
Xfers.set_api_key 'G-zsfAEScrqdU8GhWTEdjfdnb3XRdU8q1fH-nuWfSzo'
|
4
|
+
Xfers.set_sg_sandbox
|
5
|
+
|
6
|
+
begin
|
7
|
+
puts 'Retrieving user...'
|
8
|
+
resp = Xfers::User.retrieve
|
9
|
+
puts resp[:first_name]
|
10
|
+
puts resp[:last_name]
|
11
|
+
puts resp[:available_balance]
|
12
|
+
puts resp
|
13
|
+
rescue Xfers::XfersError => e
|
14
|
+
puts e.to_s
|
15
|
+
end
|
16
|
+
|
17
|
+
begin
|
18
|
+
puts 'Updating user...'
|
19
|
+
params = {
|
20
|
+
'first_name'=>'Tommy',
|
21
|
+
'last_name'=>'Tan',
|
22
|
+
'email'=>'jelly@xfers.io',
|
23
|
+
'date_of_birth'=>'1986-02-27',
|
24
|
+
'address_line_1'=>'Blk 608 Pasir Ris',
|
25
|
+
'address_line_2'=>'#08-41',
|
26
|
+
'nationality'=>'Singaporean',
|
27
|
+
'postal_code'=>'510608',
|
28
|
+
'identity_no'=>'S8692038G',
|
29
|
+
'id_front_url'=>'http://angelsgateadvisory.sg/wp-content/uploads/2015/10/Logo.jpg',
|
30
|
+
'id_back_url'=>'http://angelsgateadvisory.sg/wp-content/uploads/2015/10/Logo.jpg',
|
31
|
+
'selfie_2id_url'=>'http://angelsgateadvisory.sg/wp-content/uploads/2015/10/Logo.jpg',
|
32
|
+
'proof_of_address_url'=>'http://angelsgateadvisory.sg/wp-content/uploads/2015/10/Logo.jpg',
|
33
|
+
'meta_data'=>'foobar'
|
34
|
+
}
|
35
|
+
resp = Xfers::User.update params
|
36
|
+
puts resp[:first_name]
|
37
|
+
puts resp[:last_name]
|
38
|
+
puts resp[:available_balance]
|
39
|
+
puts resp
|
40
|
+
rescue Xfers::XfersError => e
|
41
|
+
puts e.to_s
|
42
|
+
end
|
43
|
+
|
44
|
+
begin
|
45
|
+
puts 'Getting transfer info...'
|
46
|
+
resp = Xfers::User.transfer_info
|
47
|
+
puts resp
|
48
|
+
rescue Xfers::XfersError => e
|
49
|
+
puts e.to_s
|
50
|
+
end
|
51
|
+
|
52
|
+
begin
|
53
|
+
puts 'Getting activities...'
|
54
|
+
activities = Xfers::User.activities
|
55
|
+
activities.each { |activity|
|
56
|
+
puts activity
|
57
|
+
}
|
58
|
+
rescue Xfers::XfersError => e
|
59
|
+
puts e.to_s
|
60
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module Xfers
|
2
|
+
module APIOperations
|
3
|
+
|
4
|
+
def self.create_auth_headers(connect_key)
|
5
|
+
connect_key.nil? ? {'X-XFERS-USER-API-KEY' => Xfers.get_api_key} : {'X-XFERS-APP-API-KEY' => connect_key}
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.handle_api_error(msg, status_code)
|
9
|
+
case status_code
|
10
|
+
when 400
|
11
|
+
raise InvalidRequestError.new msg, status_code
|
12
|
+
when 401
|
13
|
+
raise AuthenticationError.new msg, status_code
|
14
|
+
when 500
|
15
|
+
raise InternalServerError.new msg, status_code
|
16
|
+
else
|
17
|
+
raise XfersError.new msg, status_code
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.parse_and_symbolize(json_string)
|
22
|
+
parsed = JSON.parse(json_string)
|
23
|
+
begin
|
24
|
+
if parsed.kind_of?(Array)
|
25
|
+
arr = []
|
26
|
+
parsed.each { |item|
|
27
|
+
arr.push Hash[item.map{ |k, v| [k.to_sym, v] }]
|
28
|
+
}
|
29
|
+
arr
|
30
|
+
else
|
31
|
+
Hash[parsed.map{ |k, v| [k.to_sym, v] }]
|
32
|
+
end
|
33
|
+
rescue NoMethodError
|
34
|
+
parsed
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.get(params={}, resource_url=nil, connect_key=nil)
|
39
|
+
RestClient::Request.execute(method: :get, url: "#{Xfers.get_api_base}#{resource_url}",
|
40
|
+
payload: params, headers: create_auth_headers(connect_key)) {
|
41
|
+
|r, request, result, &block|
|
42
|
+
handle_api_error(JSON.parse(r.body), r.code) if r.code != 200
|
43
|
+
parse_and_symbolize(r.body)
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.post(params={}, resource_url=nil, connect_key=nil)
|
48
|
+
RestClient::Request.execute(method: :post, url: "#{Xfers.get_api_base}#{resource_url}",
|
49
|
+
payload: params, headers: create_auth_headers(connect_key)) {
|
50
|
+
|r, request, result, &block|
|
51
|
+
handle_api_error(JSON.parse(r.body), r.code) if r.code != 200
|
52
|
+
parse_and_symbolize(r.body)
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.put(params={}, resource_url=nil, connect_key=nil)
|
57
|
+
RestClient::Request.execute(method: :put, url: "#{Xfers.get_api_base}#{resource_url}",
|
58
|
+
payload: params, headers: create_auth_headers(connect_key)) {
|
59
|
+
|r, request, result, &block|
|
60
|
+
handle_api_error(JSON.parse(r.body), r.code) if r.code != 200
|
61
|
+
parse_and_symbolize(r.body)
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.delete(resource_url, connect_key=nil)
|
66
|
+
RestClient::Request.execute(method: :delete, url: "#{Xfers.get_api_base}#{resource_url}",
|
67
|
+
headers: create_auth_headers(connect_key)) {
|
68
|
+
|r, request, result, &block|
|
69
|
+
handle_api_error(JSON.parse(r.body), r.code) if r.code != 200
|
70
|
+
parse_and_symbolize(r.body)
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Xfers
|
2
|
+
module BankAccount
|
3
|
+
RESOUCE_URL = '/user/bank_account'
|
4
|
+
|
5
|
+
|
6
|
+
def self.list_all(connect_key=nil)
|
7
|
+
Xfers::APIOperations.get(nil, RESOUCE_URL, connect_key)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.add(params, connect_key=nil)
|
11
|
+
raise InvalidRequestError.new 'Params cannot be empty', 400 if params.nil? or params == ''
|
12
|
+
params['redirect'] = 'false'
|
13
|
+
Xfers::APIOperations.post params, RESOUCE_URL, connect_key
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.update(bank_account_id, params, connect_key=nil)
|
17
|
+
raise InvalidRequestError.new 'BankAccount id cannot be empty', 400 if bank_account_id.nil? or bank_account_id == ''
|
18
|
+
Xfers::APIOperations.put params, "#{RESOUCE_URL}/#{bank_account_id}", connect_key
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.delete(bank_account_id, connect_key=nil)
|
22
|
+
raise InvalidRequestError.new 'BankAccount id cannot be empty', 400 if bank_account_id.nil? or bank_account_id == ''
|
23
|
+
Xfers::APIOperations.delete "#{RESOUCE_URL}/#{bank_account_id}", connect_key
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.withdraw(bank_account_id, params, connect_key=nil)
|
27
|
+
raise InvalidRequestError.new 'BankAccount id and params cannot be empty', 400 if bank_account_id.nil? or params.nil?
|
28
|
+
Xfers::APIOperations.post params, "#{RESOUCE_URL}/#{bank_account_id}/withdraw", connect_key
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.withdrawal_requests(params=nil, connect_key=nil)
|
32
|
+
Xfers::APIOperations.get(params, "#{RESOUCE_URL}/withdrawal_requests", connect_key)[:withdrawal_requests]
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
data/lib/xfers/charge.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
module Xfers
|
2
|
+
module Charge
|
3
|
+
RESOUCE_URL = '/charges'
|
4
|
+
|
5
|
+
def self.retrieve(charge_id, connect_key=nil)
|
6
|
+
raise InvalidRequestError.new 'Charge id cannot be empty', 400 if charge_id.nil? or charge_id == ''
|
7
|
+
Xfers::APIOperations.get nil, "#{RESOUCE_URL}/#{charge_id}", connect_key
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.list_all(params=nil, connect_key=nil)
|
11
|
+
Xfers::APIOperations.get(params, RESOUCE_URL, connect_key)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.create(params, connect_key=nil)
|
15
|
+
raise InvalidRequestError.new 'Params cannot be empty', 400 if params.nil? or params == ''
|
16
|
+
params['redirect'] = 'false'
|
17
|
+
Xfers::APIOperations.post params, RESOUCE_URL, connect_key
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.refund(charge_id, connect_key=nil)
|
21
|
+
raise InvalidRequestError.new 'Charge id cannot be empty', 400 if charge_id.nil? or charge_id == ''
|
22
|
+
Xfers::APIOperations.post nil, "#{RESOUCE_URL}/#{charge_id}/refunds", connect_key
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.validate(charge_id, params, connect_key=nil)
|
26
|
+
raise InvalidRequestError.new 'Charge id cannot be empty', 400 if charge_id.nil? or charge_id == ''
|
27
|
+
Xfers::APIOperations.post params, "#{RESOUCE_URL}/#{charge_id}/validate", connect_key
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.cancel(charge_id, connect_key=nil)
|
31
|
+
raise InvalidRequestError.new 'Charge id cannot be empty', 400 if charge_id.nil? or charge_id == ''
|
32
|
+
Xfers::APIOperations.post nil, "#{RESOUCE_URL}/#{charge_id}/cancel", connect_key
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.settle(charge_id, settlement_code=nil, connect_key=nil)
|
36
|
+
raise InvalidRequestError.new 'Charge id cannot be empty', 400 if charge_id.nil? or charge_id == ''
|
37
|
+
params = nil
|
38
|
+
params = {'settlement_code'=> settlement_code} unless settlement_code.nil?
|
39
|
+
|
40
|
+
Xfers::APIOperations.post params, "#{RESOUCE_URL}/#{charge_id}", connect_key
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Xfers
|
2
|
+
module Connect
|
3
|
+
RESOUCE_URL = '/authorize'
|
4
|
+
|
5
|
+
def self.authorize(params, connect_key=nil)
|
6
|
+
raise InvalidRequestError.new 'Params cannot be empty', 400 if params.nil? or params == ''
|
7
|
+
Xfers::APIOperations.post params, "#{RESOUCE_URL}/signup_login", connect_key
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.get_token(params, connect_key=nil)
|
11
|
+
raise InvalidRequestError.new 'Params cannot be empty', 400 if params.nil? or params == ''
|
12
|
+
Xfers::APIOperations.get params, "#{RESOUCE_URL}/get_token", connect_key
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Xfers
|
2
|
+
class XfersError < StandardError
|
3
|
+
attr_reader :message
|
4
|
+
attr_reader :http_status
|
5
|
+
|
6
|
+
def initialize(message=nil, http_status=nil)
|
7
|
+
@message = message
|
8
|
+
@http_status = http_status
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_s
|
12
|
+
status_string = @http_status.nil? ? '' : "(Status #{@http_status}) "
|
13
|
+
"#{status_string}#{@message}"
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
data/lib/xfers/intent.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Xfers
|
2
|
+
module Intent
|
3
|
+
RESOUCE_URL = '/intents'
|
4
|
+
|
5
|
+
def self.list_all(connect_key=nil)
|
6
|
+
Xfers::APIOperations.get(nil, RESOUCE_URL, connect_key)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.create(params, connect_key=nil)
|
10
|
+
raise InvalidRequestError.new 'Params cannot be empty', 400 if params.nil? or params == ''
|
11
|
+
Xfers::APIOperations.post params, RESOUCE_URL, connect_key
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.cancel(intent_id, connect_key=nil)
|
15
|
+
raise InvalidRequestError.new 'Intent id cannot be empty', 400 if intent_id.nil? or intent_id == ''
|
16
|
+
Xfers::APIOperations.post nil, "#{RESOUCE_URL}/#{intent_id}/cancel", connect_key
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
data/lib/xfers/payout.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Xfers
|
2
|
+
module Payout
|
3
|
+
RESOUCE_URL = '/payouts'
|
4
|
+
|
5
|
+
def self.retrieve(payout_id, connect_key=nil)
|
6
|
+
raise InvalidRequestError.new 'Payout id cannot be empty', 400 if payout_id.nil? or payout_id == ''
|
7
|
+
Xfers::APIOperations.get nil, "#{RESOUCE_URL}/#{payout_id}", connect_key
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.create(params, connect_key=nil)
|
11
|
+
raise InvalidRequestError.new 'Params cannot be empty', 400 if params.nil? or params == ''
|
12
|
+
Xfers::APIOperations.post params, RESOUCE_URL, connect_key
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.list_all(params=nil, connect_key=nil)
|
16
|
+
Xfers::APIOperations.get(params, RESOUCE_URL, connect_key)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
data/lib/xfers/user.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Xfers
|
2
|
+
module User
|
3
|
+
RESOUCE_URL = '/user'
|
4
|
+
|
5
|
+
def self.retrieve(connect_key=nil)
|
6
|
+
Xfers::APIOperations.get nil, RESOUCE_URL, connect_key
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.update(params, connect_key=nil)
|
10
|
+
raise InvalidRequestError.new 'Params cannot be empty', 400 if params.nil?
|
11
|
+
Xfers::APIOperations.put params, RESOUCE_URL, connect_key
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.transfer_info(connect_key=nil)
|
15
|
+
Xfers::APIOperations.get nil, "#{RESOUCE_URL}/transfer_info", connect_key
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.activities(connect_key=nil)
|
19
|
+
Xfers::APIOperations.get(nil, "#{RESOUCE_URL}/activities", connect_key)[:activities]
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
data/lib/xfers.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'rest-client'
|
3
|
+
|
4
|
+
# Version
|
5
|
+
require 'xfers/version'
|
6
|
+
|
7
|
+
# API operations
|
8
|
+
require 'xfers/api_operations'
|
9
|
+
|
10
|
+
# Resources
|
11
|
+
require 'xfers/user'
|
12
|
+
require 'xfers/payout'
|
13
|
+
require 'xfers/intent'
|
14
|
+
require 'xfers/connect'
|
15
|
+
require 'xfers/charge'
|
16
|
+
require 'xfers/bank_account'
|
17
|
+
|
18
|
+
|
19
|
+
# Errors
|
20
|
+
require 'xfers/errors/xfers_error'
|
21
|
+
require 'xfers/errors/internal_server_error'
|
22
|
+
require 'xfers/errors/invalid_request_error'
|
23
|
+
require 'xfers/errors/authentication_error'
|
24
|
+
|
25
|
+
module Xfers
|
26
|
+
|
27
|
+
SG_SANDBOX_BASE = 'https://sandbox.xfers.io/api/v3'
|
28
|
+
SG_PRODUCTION_BASE = 'https://www.xfers.io/api/v3'
|
29
|
+
ID_SANDBOX_BASE = 'https://sandbox-id.xfers.com/api/v3'
|
30
|
+
ID_PRODUCTION_BASE = 'https://id.xfers.com/api/v3'
|
31
|
+
|
32
|
+
@@api_key = ''
|
33
|
+
@@api_base = ''
|
34
|
+
|
35
|
+
def self.set_sg_sandbox
|
36
|
+
@@api_base = SG_SANDBOX_BASE
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.set_sg_production
|
40
|
+
@@api_base = SG_PRODUCTION_BASE
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.set_id_sandbox
|
44
|
+
@@api_base = ID_SANDBOX_BASE
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.set_id_production
|
48
|
+
@@api_base = ID_PRODUCTION_BASE
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.set_api_key(api_key)
|
52
|
+
@@api_key = api_key
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.get_api_key
|
56
|
+
@@api_key
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.get_api_base
|
60
|
+
@@api_base
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
data/xfers.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
$:.unshift(File.join(File.dirname(__FILE__), 'lib'))
|
2
|
+
|
3
|
+
require 'xfers/version'
|
4
|
+
|
5
|
+
spec = Gem::Specification.new do |gem|
|
6
|
+
gem.name = 'xfers'
|
7
|
+
gem.version = Xfers::VERSION
|
8
|
+
gem.required_ruby_version = '>= 2.0.0'
|
9
|
+
gem.summary = 'Ruby bindings for the Xfers API'
|
10
|
+
gem.description = 'Xfers is the easiest way to accept payments online in South East Asia. See https://xfers.com for details.'
|
11
|
+
gem.author = 'Xfers'
|
12
|
+
gem.email = 'support@xfers.io'
|
13
|
+
gem.homepage = 'http://docs.xfers.io'
|
14
|
+
gem.license = 'MIT'
|
15
|
+
|
16
|
+
gem.add_runtime_dependency('rest-client', '~> 2.0')
|
17
|
+
|
18
|
+
gem.files = `git ls-files`.split("\n")
|
19
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
gem.require_paths = ['lib']
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xfers
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Xfers
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-09-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rest-client
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
description: Xfers is the easiest way to accept payments online in South East Asia. See
|
28
|
+
https://xfers.com for details.
|
29
|
+
email: support@xfers.io
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- ".gitignore"
|
35
|
+
- Gemfile
|
36
|
+
- README.md
|
37
|
+
- Rakefile
|
38
|
+
- examples/bank_account_example.rb
|
39
|
+
- examples/charges_example.rb
|
40
|
+
- examples/connect_example.rb
|
41
|
+
- examples/intents_example.rb
|
42
|
+
- examples/payouts_example.rb
|
43
|
+
- examples/user_example.rb
|
44
|
+
- lib/xfers.rb
|
45
|
+
- lib/xfers/api_operations.rb
|
46
|
+
- lib/xfers/bank_account.rb
|
47
|
+
- lib/xfers/charge.rb
|
48
|
+
- lib/xfers/connect.rb
|
49
|
+
- lib/xfers/errors/authentication_error.rb
|
50
|
+
- lib/xfers/errors/internal_server_error.rb
|
51
|
+
- lib/xfers/errors/invalid_request_error.rb
|
52
|
+
- lib/xfers/errors/xfers_error.rb
|
53
|
+
- lib/xfers/intent.rb
|
54
|
+
- lib/xfers/payout.rb
|
55
|
+
- lib/xfers/user.rb
|
56
|
+
- lib/xfers/version.rb
|
57
|
+
- xfers.gemspec
|
58
|
+
homepage: http://docs.xfers.io
|
59
|
+
licenses:
|
60
|
+
- MIT
|
61
|
+
metadata: {}
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 2.0.0
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirements: []
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 2.4.3
|
79
|
+
signing_key:
|
80
|
+
specification_version: 4
|
81
|
+
summary: Ruby bindings for the Xfers API
|
82
|
+
test_files: []
|