payoneer_api 0.0.1 → 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 +4 -4
- data/lib/payoneer_api.rb +3 -0
- data/lib/payoneer_api/client.rb +23 -11
- data/lib/payoneer_api/core_ext/hash.rb +44 -0
- data/lib/payoneer_api/version.rb +2 -2
- data/spec/fixtures/vcr_cassettes/PayoneerApi_Client/_new_payee_prefilled_signup_url/returns_a_url_to_the_prefilled_registration_page.yml +51 -0
- data/spec/fixtures/vcr_cassettes/PayoneerApi_Client/_new_payee_signup_url/returns_a_url_to_the_registration_page_implicit_credentials_through_environment_variables_.yml +49 -0
- data/spec/fixtures/vcr_cassettes/PayoneerApi_Client/_payee_prefilled_signup_url/with_incorrect_login_credentials/returns_a_parsed_error_notification.yml +50 -0
- data/spec/payoneer_api/client_spec.rb +29 -0
- metadata +8 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 33e43fd7651b0a58cdd851610958734328104830
|
|
4
|
+
data.tar.gz: d7ae4ae60dd310df87921b0f0c083ebdcd3443e4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 20b193951555db211b5ecd9896e060cc14c02ac175efaedb1fa4fe8e68aa250273b904a7096176de67c29c8fffdd7ab63a852006d2b2a7fedc0658300d9a9c6c
|
|
7
|
+
data.tar.gz: 6cdef89c4d3669568b7d948a6d9a2ce7c002e407d8adc323e727bab81246cb2c33a07c445e7f90d293330bdd17eaf692b5e789b4032e77138c45c2241cb691d7
|
data/lib/payoneer_api.rb
CHANGED
data/lib/payoneer_api/client.rb
CHANGED
|
@@ -4,13 +4,22 @@ module PayoneerApi
|
|
|
4
4
|
PRODUCTION_API_URL = 'https://api.payoneer.com/payouts/HttpAPI/API.aspx?'
|
|
5
5
|
API_PORT = '443'
|
|
6
6
|
|
|
7
|
-
def self.
|
|
8
|
-
new(
|
|
7
|
+
def self.new_payee_signup_url(member_name, options = {})
|
|
8
|
+
new(options).payee_signup_url(member_name)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.new_payee_prefilled_signup_url(member_name, options = {})
|
|
12
|
+
attributes = options.slice!(:partner_id, :username, :password)
|
|
13
|
+
new(options).payee_prefilled_signup_url(member_name, attributes)
|
|
9
14
|
end
|
|
10
15
|
|
|
11
16
|
def initialize(options = {})
|
|
12
17
|
@partner_id, @username, @password = options[:partner_id], options[:username], options[:password]
|
|
18
|
+
@partner_id ||= ENV['PAYONEER_PARTNER_ID']
|
|
19
|
+
@username ||= ENV['PAYONEER_USERNAME']
|
|
20
|
+
@password ||= ENV['PAYONEER_PASSWORD']
|
|
13
21
|
@environment = options[:environment]
|
|
22
|
+
@environment ||= ENV['PAYONEER_ENVIRONMENT']
|
|
14
23
|
if @environment.nil? && defined?(Rails)
|
|
15
24
|
Rails.env.production? ? 'production' : 'sandbox'
|
|
16
25
|
end
|
|
@@ -47,13 +56,11 @@ module PayoneerApi
|
|
|
47
56
|
end
|
|
48
57
|
|
|
49
58
|
def api_error_description(response)
|
|
50
|
-
return
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
return body_hash.to_s
|
|
56
|
-
end
|
|
59
|
+
return unless response and response.body
|
|
60
|
+
result = Nokogiri::XML.parse(response.body)
|
|
61
|
+
error_message = result.css('PayoneerResponse Description').first
|
|
62
|
+
return error_message if error_message
|
|
63
|
+
result.to_s
|
|
57
64
|
end
|
|
58
65
|
|
|
59
66
|
def get_api_call(args_hash)
|
|
@@ -133,11 +140,16 @@ module PayoneerApi
|
|
|
133
140
|
end
|
|
134
141
|
end
|
|
135
142
|
end
|
|
136
|
-
builder.to_xml#.tap { |x| puts x.
|
|
143
|
+
builder.to_xml#.tap { |x| puts x.to_s if sandbox? }
|
|
137
144
|
end
|
|
138
145
|
|
|
139
146
|
def api_url
|
|
140
|
-
|
|
147
|
+
sandbox? ? SANDBOX_API_URL : PRODUCTION_API_URL
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def sandbox?
|
|
151
|
+
return true unless @environment
|
|
152
|
+
@environment.to_s != 'production'
|
|
141
153
|
end
|
|
142
154
|
end
|
|
143
155
|
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Taken from activesupport
|
|
2
|
+
|
|
3
|
+
class Hash
|
|
4
|
+
# Slice a hash to include only the given keys. This is useful for
|
|
5
|
+
# limiting an options hash to valid keys before passing to a method:
|
|
6
|
+
#
|
|
7
|
+
# def search(criteria = {})
|
|
8
|
+
# criteria.assert_valid_keys(:mass, :velocity, :time)
|
|
9
|
+
# end
|
|
10
|
+
#
|
|
11
|
+
# search(options.slice(:mass, :velocity, :time))
|
|
12
|
+
#
|
|
13
|
+
# If you have an array of keys you want to limit to, you should splat them:
|
|
14
|
+
#
|
|
15
|
+
# valid_keys = [:mass, :velocity, :time]
|
|
16
|
+
# search(options.slice(*valid_keys))
|
|
17
|
+
def slice(*keys)
|
|
18
|
+
keys.map! { |key| convert_key(key) } if respond_to?(:convert_key, true)
|
|
19
|
+
keys.each_with_object(self.class.new) { |k, hash| hash[k] = self[k] if has_key?(k) }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Replaces the hash with only the given keys.
|
|
23
|
+
# Returns a hash containing the removed key/value pairs.
|
|
24
|
+
#
|
|
25
|
+
# { a: 1, b: 2, c: 3, d: 4 }.slice!(:a, :b)
|
|
26
|
+
# # => {:c=>3, :d=>4}
|
|
27
|
+
def slice!(*keys)
|
|
28
|
+
keys.map! { |key| convert_key(key) } if respond_to?(:convert_key, true)
|
|
29
|
+
omit = slice(*self.keys - keys)
|
|
30
|
+
hash = slice(*keys)
|
|
31
|
+
hash.default = default
|
|
32
|
+
hash.default_proc = default_proc if default_proc
|
|
33
|
+
replace(hash)
|
|
34
|
+
omit
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Removes and returns the key/value pairs matching the given keys.
|
|
38
|
+
#
|
|
39
|
+
# { a: 1, b: 2, c: 3, d: 4 }.extract!(:a, :b) # => {:a=>1, :b=>2}
|
|
40
|
+
# { a: 1, b: 2 }.extract!(:a, :x) # => {:a=>1}
|
|
41
|
+
def extract!(*keys)
|
|
42
|
+
keys.each_with_object(self.class.new) { |key, result| result[key] = delete(key) if has_key?(key) }
|
|
43
|
+
end
|
|
44
|
+
end
|
data/lib/payoneer_api/version.rb
CHANGED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
http_interactions:
|
|
3
|
+
- request:
|
|
4
|
+
method: post
|
|
5
|
+
uri: https://api.sandbox.payoneer.com/Payouts/HttpApi/API.aspx
|
|
6
|
+
body:
|
|
7
|
+
encoding: US-ASCII
|
|
8
|
+
string: mname=GetTokenXML&p1=Room5620&p2=12Gauh3uSe&p3=100035620&p4=1&xml=%3C%3Fxml+version%3D%221.0%22+encoding%3D%22UTF-8%22%3F%3E%0A%3CPayoneerDetails%3E%0A++%3CDetails%3E%0A++++%3CuserName%3ERoom5620%3C%2FuserName%3E%0A++++%3Cpassword%3E12Gauh3uSe%3C%2Fpassword%3E%0A++++%3Cprid%3E100035620%3C%2Fprid%3E%0A++++%3Capuid%3E1%3C%2Fapuid%3E%0A++%3C%2FDetails%3E%0A++%3CPersonalDetails%3E%0A++++%3Caddress1%2F%3E%0A++%3C%2FPersonalDetails%3E%0A%3C%2FPayoneerDetails%3E%0A
|
|
9
|
+
headers:
|
|
10
|
+
Accept-Encoding:
|
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
|
12
|
+
Accept:
|
|
13
|
+
- '*/*'
|
|
14
|
+
User-Agent:
|
|
15
|
+
- Ruby
|
|
16
|
+
Content-Type:
|
|
17
|
+
- application/x-www-form-urlencoded
|
|
18
|
+
response:
|
|
19
|
+
status:
|
|
20
|
+
code: 200
|
|
21
|
+
message: OK
|
|
22
|
+
headers:
|
|
23
|
+
Cache-Control:
|
|
24
|
+
- no-cache, no-store, must-revalidate
|
|
25
|
+
Pragma:
|
|
26
|
+
- no-cache
|
|
27
|
+
Content-Type:
|
|
28
|
+
- text/html; charset=utf-8
|
|
29
|
+
Expires:
|
|
30
|
+
- '-1'
|
|
31
|
+
Set-Cookie:
|
|
32
|
+
- ASP.NET_SessionId=xrr5vet2zjf1nh330dbhx2y1; domain=.sandbox.payoneer.com;
|
|
33
|
+
path=/; secure; HttpOnly
|
|
34
|
+
- pid=100035620; domain=.sandbox.payoneer.com; expires=Fri, 01-May-2015 05:52:51
|
|
35
|
+
GMT; path=/; secure
|
|
36
|
+
P3p:
|
|
37
|
+
- CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
|
|
38
|
+
X-Powered-By:
|
|
39
|
+
- ASP.NET
|
|
40
|
+
Date:
|
|
41
|
+
- Fri, 02 May 2014 05:52:52 GMT
|
|
42
|
+
Content-Length:
|
|
43
|
+
- '185'
|
|
44
|
+
Connection:
|
|
45
|
+
- Keep-Alive
|
|
46
|
+
body:
|
|
47
|
+
encoding: UTF-8
|
|
48
|
+
string: <?xml version="1.0" encoding="UTF-8"?><PayoneerToken><Token>http://payouts.sandbox.payoneer.com/partners/lp.aspx?token=b8e8eab41931475cb4b66b54996a7cb1A9A9579049</Token></PayoneerToken>
|
|
49
|
+
http_version:
|
|
50
|
+
recorded_at: Fri, 02 May 2014 05:52:50 GMT
|
|
51
|
+
recorded_with: VCR 2.9.0
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
http_interactions:
|
|
3
|
+
- request:
|
|
4
|
+
method: get
|
|
5
|
+
uri: https://api.sandbox.payoneer.com/Payouts/HttpApi/API.aspx?mname=GetToken&p1=Room5620&p2=12Gauh3uSe&p3=100035620&p4=1
|
|
6
|
+
body:
|
|
7
|
+
encoding: US-ASCII
|
|
8
|
+
string: ''
|
|
9
|
+
headers:
|
|
10
|
+
Accept-Encoding:
|
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
|
12
|
+
Accept:
|
|
13
|
+
- '*/*'
|
|
14
|
+
User-Agent:
|
|
15
|
+
- Ruby
|
|
16
|
+
response:
|
|
17
|
+
status:
|
|
18
|
+
code: 200
|
|
19
|
+
message: OK
|
|
20
|
+
headers:
|
|
21
|
+
Cache-Control:
|
|
22
|
+
- no-cache, no-store, must-revalidate
|
|
23
|
+
Pragma:
|
|
24
|
+
- no-cache
|
|
25
|
+
Content-Type:
|
|
26
|
+
- text/html; charset=utf-8
|
|
27
|
+
Expires:
|
|
28
|
+
- '-1'
|
|
29
|
+
Set-Cookie:
|
|
30
|
+
- ASP.NET_SessionId=vswidgodnjjgszj1rybaxt5d; domain=.sandbox.payoneer.com;
|
|
31
|
+
path=/; secure; HttpOnly
|
|
32
|
+
- pid=100035620; domain=.sandbox.payoneer.com; expires=Fri, 01-May-2015 05:52:43
|
|
33
|
+
GMT; path=/; secure
|
|
34
|
+
P3p:
|
|
35
|
+
- CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
|
|
36
|
+
X-Powered-By:
|
|
37
|
+
- ASP.NET
|
|
38
|
+
Date:
|
|
39
|
+
- Fri, 02 May 2014 05:52:49 GMT
|
|
40
|
+
Content-Length:
|
|
41
|
+
- '101'
|
|
42
|
+
Connection:
|
|
43
|
+
- Keep-Alive
|
|
44
|
+
body:
|
|
45
|
+
encoding: UTF-8
|
|
46
|
+
string: http://payouts.sandbox.payoneer.com/partners/lp.aspx?token=b8e8eab41931475cb4b66b54996a7cb1A9A9579049
|
|
47
|
+
http_version:
|
|
48
|
+
recorded_at: Fri, 02 May 2014 05:52:48 GMT
|
|
49
|
+
recorded_with: VCR 2.9.0
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
http_interactions:
|
|
3
|
+
- request:
|
|
4
|
+
method: post
|
|
5
|
+
uri: https://api.sandbox.payoneer.com/Payouts/HttpApi/API.aspx
|
|
6
|
+
body:
|
|
7
|
+
encoding: US-ASCII
|
|
8
|
+
string: mname=GetTokenXML&p1=bogus&p2=bogus&p3=bogus&p4=1&xml=%3C%3Fxml+version%3D%221.0%22+encoding%3D%22UTF-8%22%3F%3E%0A%3CPayoneerDetails%3E%0A++%3CDetails%3E%0A++++%3CuserName%3Ebogus%3C%2FuserName%3E%0A++++%3Cpassword%3Ebogus%3C%2Fpassword%3E%0A++++%3Cprid%3Ebogus%3C%2Fprid%3E%0A++++%3Capuid%3E1%3C%2Fapuid%3E%0A++%3C%2FDetails%3E%0A++%3CPersonalDetails%3E%0A++++%3Caddress1%2F%3E%0A++%3C%2FPersonalDetails%3E%0A%3C%2FPayoneerDetails%3E%0A
|
|
9
|
+
headers:
|
|
10
|
+
Accept-Encoding:
|
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
|
12
|
+
Accept:
|
|
13
|
+
- '*/*'
|
|
14
|
+
User-Agent:
|
|
15
|
+
- Ruby
|
|
16
|
+
Content-Type:
|
|
17
|
+
- application/x-www-form-urlencoded
|
|
18
|
+
response:
|
|
19
|
+
status:
|
|
20
|
+
code: 200
|
|
21
|
+
message: OK
|
|
22
|
+
headers:
|
|
23
|
+
Cache-Control:
|
|
24
|
+
- no-cache, no-store, must-revalidate
|
|
25
|
+
Pragma:
|
|
26
|
+
- no-cache
|
|
27
|
+
Content-Type:
|
|
28
|
+
- text/html; charset=utf-8
|
|
29
|
+
Expires:
|
|
30
|
+
- '-1'
|
|
31
|
+
Set-Cookie:
|
|
32
|
+
- ASP.NET_SessionId=ozwwufn2rwhhfq4hxw4fzqum; domain=.sandbox.payoneer.com;
|
|
33
|
+
path=/; secure; HttpOnly
|
|
34
|
+
P3p:
|
|
35
|
+
- CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
|
|
36
|
+
X-Powered-By:
|
|
37
|
+
- ASP.NET
|
|
38
|
+
Date:
|
|
39
|
+
- Fri, 02 May 2014 04:52:05 GMT
|
|
40
|
+
Content-Length:
|
|
41
|
+
- '220'
|
|
42
|
+
Connection:
|
|
43
|
+
- Keep-Alive
|
|
44
|
+
body:
|
|
45
|
+
encoding: UTF-8
|
|
46
|
+
string: <?xml version='1.0' encoding='ISO-8859-1' ?><PayoneerResponse><Result>A00B556F</Result><Description>Unauthorized
|
|
47
|
+
Access or invalid parameters, please check your IP address and parameters.</Description></PayoneerResponse>
|
|
48
|
+
http_version:
|
|
49
|
+
recorded_at: Fri, 02 May 2014 04:52:04 GMT
|
|
50
|
+
recorded_with: VCR 2.9.0
|
|
@@ -9,6 +9,20 @@ describe PayoneerApi::Client do
|
|
|
9
9
|
)
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
+
describe '.new_payee_signup_url', vcr: true do
|
|
13
|
+
it 'returns a url to the registration page (implicit credentials through environment variables)' do
|
|
14
|
+
response = PayoneerApi::Client.new_payee_signup_url('1')
|
|
15
|
+
expect(URI.parse(response).host).to eq('payouts.sandbox.payoneer.com')
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe '.new_payee_prefilled_signup_url', vcr: true do
|
|
20
|
+
it 'returns a url to the prefilled registration page' do
|
|
21
|
+
response = PayoneerApi::Client.new_payee_prefilled_signup_url('1', {})
|
|
22
|
+
expect(URI.parse(response).host).to eq('payouts.sandbox.payoneer.com')
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
12
26
|
describe '#payee_signup_url', vcr: true do
|
|
13
27
|
it 'returns a url to the registration page' do
|
|
14
28
|
response = client.payee_signup_url('1')
|
|
@@ -17,6 +31,21 @@ describe PayoneerApi::Client do
|
|
|
17
31
|
end
|
|
18
32
|
|
|
19
33
|
describe '#payee_prefilled_signup_url', vcr: true do
|
|
34
|
+
context 'with incorrect login credentials' do
|
|
35
|
+
it 'returns a parsed error notification' do
|
|
36
|
+
client = PayoneerApi::Client.new(
|
|
37
|
+
partner_id: 'bogus',
|
|
38
|
+
username: 'bogus',
|
|
39
|
+
password: 'bogus',
|
|
40
|
+
environment: 'sandbox'
|
|
41
|
+
)
|
|
42
|
+
expect {
|
|
43
|
+
client.payee_prefilled_signup_url('1', {})
|
|
44
|
+
}.to raise_error(PayoneerApi::PayoneerException,
|
|
45
|
+
'Unauthorized Access or invalid parameters, please check your IP address and parameters.')
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
20
49
|
context 'with all correct params passed in' do
|
|
21
50
|
let(:params) {{
|
|
22
51
|
redirect_url: 'http://test.com/redirect',
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: payoneer_api
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0
|
|
4
|
+
version: 0.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Donald Piret
|
|
@@ -104,11 +104,15 @@ files:
|
|
|
104
104
|
- README.md
|
|
105
105
|
- lib/payoneer_api.rb
|
|
106
106
|
- lib/payoneer_api/client.rb
|
|
107
|
+
- lib/payoneer_api/core_ext/hash.rb
|
|
107
108
|
- lib/payoneer_api/payoneer_exception.rb
|
|
108
109
|
- lib/payoneer_api/version.rb
|
|
109
110
|
- payoneer_api.gemspec
|
|
111
|
+
- spec/fixtures/vcr_cassettes/PayoneerApi_Client/_new_payee_prefilled_signup_url/returns_a_url_to_the_prefilled_registration_page.yml
|
|
112
|
+
- spec/fixtures/vcr_cassettes/PayoneerApi_Client/_new_payee_signup_url/returns_a_url_to_the_registration_page_implicit_credentials_through_environment_variables_.yml
|
|
110
113
|
- spec/fixtures/vcr_cassettes/PayoneerApi_Client/_payee_prefilled_signup_url/with_all_correct_params_passed_in/includes_a_token_parameter_in_this_url.yml
|
|
111
114
|
- spec/fixtures/vcr_cassettes/PayoneerApi_Client/_payee_prefilled_signup_url/with_all_correct_params_passed_in/returns_a_url_to_the_prefilled_registration_page.yml
|
|
115
|
+
- spec/fixtures/vcr_cassettes/PayoneerApi_Client/_payee_prefilled_signup_url/with_incorrect_login_credentials/returns_a_parsed_error_notification.yml
|
|
112
116
|
- spec/fixtures/vcr_cassettes/PayoneerApi_Client/_payee_signup_url/returns_a_url_to_the_registration_page.yml
|
|
113
117
|
- spec/payoneer_api/client_spec.rb
|
|
114
118
|
- spec/spec_helper.rb
|
|
@@ -137,8 +141,11 @@ signing_key:
|
|
|
137
141
|
specification_version: 4
|
|
138
142
|
summary: Ruby wrapper for Payoneer API
|
|
139
143
|
test_files:
|
|
144
|
+
- spec/fixtures/vcr_cassettes/PayoneerApi_Client/_new_payee_prefilled_signup_url/returns_a_url_to_the_prefilled_registration_page.yml
|
|
145
|
+
- spec/fixtures/vcr_cassettes/PayoneerApi_Client/_new_payee_signup_url/returns_a_url_to_the_registration_page_implicit_credentials_through_environment_variables_.yml
|
|
140
146
|
- spec/fixtures/vcr_cassettes/PayoneerApi_Client/_payee_prefilled_signup_url/with_all_correct_params_passed_in/includes_a_token_parameter_in_this_url.yml
|
|
141
147
|
- spec/fixtures/vcr_cassettes/PayoneerApi_Client/_payee_prefilled_signup_url/with_all_correct_params_passed_in/returns_a_url_to_the_prefilled_registration_page.yml
|
|
148
|
+
- spec/fixtures/vcr_cassettes/PayoneerApi_Client/_payee_prefilled_signup_url/with_incorrect_login_credentials/returns_a_parsed_error_notification.yml
|
|
142
149
|
- spec/fixtures/vcr_cassettes/PayoneerApi_Client/_payee_signup_url/returns_a_url_to_the_registration_page.yml
|
|
143
150
|
- spec/payoneer_api/client_spec.rb
|
|
144
151
|
- spec/spec_helper.rb
|