payoneer-client 0.3 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3403735dba6cf4fdebc3909ea215bbc5a3c49058
4
- data.tar.gz: e85cc201eee353b81693000785003e79cc31445d
3
+ metadata.gz: b979e7078cae676e9250121313b692534a95d0d9
4
+ data.tar.gz: aa8d722834abe42c3c3e3ccf01c565e9564c5ed4
5
5
  SHA512:
6
- metadata.gz: bcaf96cb747a67d9952a9263257ea6c0de6d65b9890f18293f79762369bf8a911666c65b63499b28c58c9062e27465c69844ca4d3ffa9662c5209d9c928ae120
7
- data.tar.gz: 2107242700e6d088bf73596310f8142a6a10635ee6a254a6af64e8cf38940ddded833a75d46a015997e1b3282867e3283a1962a29fb3e5422d3d9b0add884c63
6
+ metadata.gz: e91dfb81f67df1ac74223f6b504da96a7fe615f7353e6602d17a5682871bb81bfa3b05aff2063b2de48441e6517077d08db03c340eeb0547c14fff5bf7376357
7
+ data.tar.gz: b7b36d1580d962929f35436554337d99151097f0718f9349e5cca330bbcdda498cc7972b924b61621e4b2bcd5de1346d56da35bae43d1507e17def86755ef181
data/.gitignore CHANGED
@@ -4,3 +4,4 @@
4
4
  /.bundle
5
5
  /coverage
6
6
  .DS_Store
7
+ .idea
data/.rubocop.yml CHANGED
@@ -24,6 +24,8 @@ Lint/EndAlignment:
24
24
 
25
25
  Style/Documentation:
26
26
  Enabled: false
27
+ Style/FormatStringToken:
28
+ Enabled: false
27
29
  Style/IndentationWidth:
28
30
  Enabled: false
29
31
  Style/ElseAlignment:
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2
4
+ # branches:
5
+ # only:
6
+ # - master
7
+ script:
8
+ - bundle exec rubocop
9
+ - bundle exec rake
10
+ cache: bundler
data/README.md CHANGED
@@ -1,10 +1,15 @@
1
- ### Install
1
+ [![Build Status](https://travis-ci.org/tophatter/payoneer-api-ruby.svg?branch=master)](https://travis-ci.org/tophatter/payoneer-api-ruby)
2
+ [![Coverage Status](https://coveralls.io/repos/github/tophatter/payoneer-api-ruby/badge.svg?branch=master)](https://coveralls.io/github/tophatter/payoneer-api-ruby?branch=master)
3
+
4
+ ### Payoneer SDK for Ruby:
5
+
6
+ #### Install:
2
7
 
3
8
  ```
4
9
  gem install payoneer-client
5
10
  ```
6
11
 
7
- ### Usage
12
+ #### Usage:
8
13
 
9
14
  ```ruby
10
15
  client = Payoneer::Client.new(
@@ -58,8 +63,59 @@ client.payee_details('fake-payee-id').body
58
63
  "AccountNumber"=>"123456789",
59
64
  "RoutingNumber"=>"121042882",
60
65
  "AccountType"=>"S"}}
66
+
67
+ ```
68
+
69
+ ##### Performing a normal payout:
70
+ ```ruby
71
+ response = client.payout(
72
+ program_id: 'fake-partner-id',
73
+ payment_id: 43,
74
+ amount: 100.0,
75
+ payee_id: 42,
76
+ description: "Foo Bar's order"
77
+ )
78
+
79
+ response.body
80
+ => {
81
+ "Description" => "",
82
+ "PaymentID" => "1234",
83
+ "Status" => "000",
84
+ "PayoneerID" => "42"
85
+ }
86
+ ````
87
+
88
+ ##### Performing a payout with expanded params:
89
+ If the orders type is `"url"`, `credentials` must be a dictionary containing one of the following:
90
+ - `type: "AUTHORIZATION"` with a required `token` field
91
+ - `type: "PASSWORD"` with required `user_name` and `password` fields
92
+ ```ruby
93
+ response = client.expanded_payout(
94
+ payee_id: 42,
95
+ client_reference_id: 43,
96
+ amount: 100.0,
97
+ currency: 'USD',
98
+ description: "Foo Bar's order",
99
+ seller_id: 44,
100
+ seller_name: "Foo Bar",
101
+ seller_url: "foo@bar.com",
102
+ seller_type: 'ECOMMERCE',
103
+ path: 'orders@path.com',
104
+ credentials: { type: 'AUTHORIZATION', token: 'fake_token'}
105
+ )
106
+
107
+ response.body
108
+ => {
109
+ "audit_id" => 123456789,
110
+ "code" => 0,
111
+ "description" => "Success",
112
+ "payout_id" => "1234",
113
+ "amount" => 100.0,
114
+ "currency" => "USD",
115
+ "PaymentID" => "1234"
116
+ }
61
117
  ```
62
118
 
63
- ### Development
119
+ #### Console:
64
120
 
65
- After checking out the repo, run `bin/payoneer-console` for an interactive prompt that will allow you to experiment.
121
+ After checking out the repo, run `bin/payoneer-console` for an interactive console that will allow you to experiment.
@@ -39,6 +39,47 @@ module Payoneer
39
39
  )
40
40
  end
41
41
 
42
+ # Includes additional items as needed to be Payoneer SAFE compliant
43
+ def expanded_payout(payee_id:, client_reference_id:, amount:, currency:, description:, payout_date: Time.now, seller_id:, seller_name:, seller_url:, seller_type: 'ECOMMERCE', orders_type: 'url', path:, credentials:)
44
+ params = {
45
+ payee_id: payee_id,
46
+ client_reference_id: client_reference_id,
47
+ amount: amount,
48
+ currency: currency,
49
+ description: description,
50
+ payout_date: payout_date.strftime('%Y-%m-%d'),
51
+ orders_report: {
52
+ merchant: {
53
+ id: seller_id,
54
+ store: {
55
+ name: seller_name,
56
+ url: seller_url,
57
+ type: seller_type
58
+ }
59
+ },
60
+ orders: {
61
+ type: orders_type,
62
+ path: path,
63
+ credentials: credentials
64
+ }
65
+ }
66
+ }
67
+
68
+ encoded_credentials = 'Basic ' + Base64.encode64("#{configuration.username}:#{configuration.api_password}").chomp
69
+ response = RestClient.post "#{configuration.json_base_uri}/payouts", params.to_json, content_type: 'application/json', accept: :json, Authorization: encoded_credentials
70
+ raise ResponseError.new(code: response.code, body: response.body) if response.code != 200
71
+
72
+ hash = JSON.parse(response.body)
73
+ hash['PaymentID'] = hash['payout_id'] # Keep consistent with the normal payout response body
74
+
75
+ if hash.key?('Code')
76
+ Response.new(hash['Code'], hash['Description'])
77
+ else
78
+ hash = block_given? ? yield(hash) : hash
79
+ Response.new(Response::OK_STATUS_CODE, hash)
80
+ end
81
+ end
82
+
42
83
  def payout_details(payee_id:, payment_id:)
43
84
  post('GetPaymentStatus', p4: payee_id, p5: payment_id)
44
85
  end
@@ -46,7 +87,7 @@ module Payoneer
46
87
  private
47
88
 
48
89
  def post(method_name, params = {})
49
- response = RestClient.post(configuration.base_uri, {
90
+ response = RestClient.post(configuration.xml_base_uri, {
50
91
  mname: method_name,
51
92
  p1: configuration.username,
52
93
  p2: configuration.api_password,
@@ -61,12 +102,7 @@ module Payoneer
61
102
  if hash.key?('Code')
62
103
  Response.new(hash['Code'], hash['Description'])
63
104
  else
64
- hash = if block_given?
65
- yield(hash)
66
- else
67
- hash
68
- end
69
-
105
+ hash = block_given? ? yield(hash) : hash
70
106
  Response.new(Response::OK_STATUS_CODE, hash)
71
107
  end
72
108
  end
@@ -18,8 +18,12 @@ module Payoneer
18
18
  @host || 'api.payoneer.com'
19
19
  end
20
20
 
21
- def base_uri
22
- @base_uri || "#{protocol}://#{host}/Payouts/HttpApi/API.aspx"
21
+ def xml_base_uri
22
+ @xml_base_uri || "#{protocol}://#{host}/Payouts/HttpApi/API.aspx"
23
+ end
24
+
25
+ def json_base_uri
26
+ @json_base_uri || "#{protocol}://#{host}/v2/programs/#{@partner_id}"
23
27
  end
24
28
  end
25
29
  end
@@ -12,9 +12,5 @@ module Payoneer
12
12
  def ok?
13
13
  code == OK_STATUS_CODE
14
14
  end
15
-
16
- def ==(other)
17
- code == other.code && body == other.body
18
- end
19
15
  end
20
16
  end
@@ -3,7 +3,7 @@
3
3
  # gem push payoneer-client-{VERSION}.gem
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'payoneer-client'
6
- s.version = '0.3'
6
+ s.version = '0.4'
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.licenses = ['MIT']
9
9
  s.authors = ['Chris Estreich']
@@ -14,10 +14,10 @@ Gem::Specification.new do |s|
14
14
 
15
15
  s.extra_rdoc_files = ['README.md']
16
16
 
17
- s.required_ruby_version = '~> 2.0'
17
+ s.required_ruby_version = '~> 2.2'
18
18
 
19
- s.add_dependency 'rest-client', '~> 1.6'
20
19
  s.add_dependency 'activesupport', '~> 4.2'
20
+ s.add_dependency 'rest-client', '~> 1.6'
21
21
 
22
22
  s.files = `git ls-files`.split("\n")
23
23
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
data/spec/client_spec.rb CHANGED
@@ -83,4 +83,59 @@ describe Payoneer::Client do
83
83
  expect(response.body).to include('FirstName' => 'Foo', 'LastName' => 'Bar')
84
84
  end
85
85
  end
86
+
87
+ describe '#expanded_payout' do
88
+ let(:payee_id) { 42 }
89
+ let(:client_reference_id) { 43 }
90
+ let(:amount) { 100 }
91
+ let(:currency) { 'USD' }
92
+ let(:description) { (Time.now - 10.days).strftime('%Y-%m-%d') }
93
+ let(:seller_id) { 44 }
94
+ let(:seller_name) { 'Fake Seller' }
95
+ let(:seller_url) { 'http://tophatter.dev/users/1' }
96
+ let(:path) { 'fake_s3@path.com' }
97
+ let(:credentials) { { type: 'AUTHORIZATION', token: 'fake' } }
98
+ let(:endpoint) { "#{configuration.json_base_uri}/payouts" }
99
+ let(:headers) { { content_type: 'application/json', accept: :json, Authorization: 'Basic ' + Base64.encode64("#{configuration.username}:#{configuration.api_password}").chomp } }
100
+ let(:response) do
101
+ mock = double
102
+ allow(mock).to receive(:code).and_return(200)
103
+ allow(mock).to receive(:body).and_return(params.to_json)
104
+ mock
105
+ end
106
+
107
+ let(:params) do
108
+ { payee_id: payee_id,
109
+ client_reference_id: client_reference_id,
110
+ amount: amount,
111
+ currency: 'USD',
112
+ description: description,
113
+ payout_date: Time.now.strftime('%Y-%m-%d'),
114
+ orders_report: {
115
+ merchant: {
116
+ id: seller_id,
117
+ store: {
118
+ name: seller_name,
119
+ url: seller_url,
120
+ type: 'ECOMMERCE'
121
+ }
122
+ },
123
+ orders: {
124
+ type: 'url',
125
+ path: path,
126
+ credentials: credentials
127
+ }
128
+ } }
129
+ end
130
+
131
+ it 'generates the correct response' do
132
+ expect(RestClient).to receive(:post).exactly(1).times.with(endpoint, params.to_json, headers).and_return(response)
133
+ response = client.expanded_payout(payee_id: payee_id, client_reference_id: client_reference_id, amount: amount, description: description, currency: currency, seller_id: seller_id, seller_name: seller_name, seller_url: seller_url, path: path, credentials: credentials)
134
+ expect(response.ok?).to be_truthy
135
+ expect(response.body).to include('payee_id' => payee_id, 'amount' => amount)
136
+ expect(response.body).to include('orders_report')
137
+ expect(response.body['orders_report']).to include('orders')
138
+ expect(response.body['orders_report']['orders']).to include('path' => path)
139
+ end
140
+ end
86
141
  end
data/spec/spec_helper.rb CHANGED
@@ -4,5 +4,5 @@ Coveralls.wear!
4
4
  require 'payoneer'
5
5
  require 'awesome_print'
6
6
 
7
- gemspec = Gem::Specification.find_by_name('payoneer')
7
+ gemspec = Gem::Specification.find_by_name('payoneer-client')
8
8
  Dir["#{gemspec.gem_dir}/spec/support/**/*.rb"].each { |f| require f }
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: payoneer-client
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.3'
4
+ version: '0.4'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Estreich
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-10 00:00:00.000000000 Z
11
+ date: 2018-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rest-client
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.6'
19
+ version: '4.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.6'
26
+ version: '4.2'
27
27
  - !ruby/object:Gem::Dependency
28
- name: activesupport
28
+ name: rest-client
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '4.2'
33
+ version: '1.6'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '4.2'
40
+ version: '1.6'
41
41
  description: Payoneer SDK for ruby.
42
42
  email:
43
43
  - chris@tophatter.com
@@ -51,6 +51,7 @@ files:
51
51
  - ".gitignore"
52
52
  - ".rspec"
53
53
  - ".rubocop.yml"
54
+ - ".travis.yml"
54
55
  - Gemfile
55
56
  - LICENSE.md
56
57
  - README.md
@@ -77,7 +78,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
77
78
  requirements:
78
79
  - - "~>"
79
80
  - !ruby/object:Gem::Version
80
- version: '2.0'
81
+ version: '2.2'
81
82
  required_rubygems_version: !ruby/object:Gem::Requirement
82
83
  requirements:
83
84
  - - ">="
@@ -85,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
86
  version: '0'
86
87
  requirements: []
87
88
  rubyforge_project:
88
- rubygems_version: 2.6.12
89
+ rubygems_version: 2.6.13
89
90
  signing_key:
90
91
  specification_version: 4
91
92
  summary: Payoneer SDK for ruby.