epayments_client 0.0.2 → 0.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: ed82dd84528bda8dc6a0792b3a502eb928c0de51
4
- data.tar.gz: b099d1c89c0267230b44a01f4c19bb8367463f12
3
+ metadata.gz: c35a5eef6cfafb897a4c36b12752e463ca0942c1
4
+ data.tar.gz: 7a40305a15a01f0b7277fc2fa9a8b92e407b1b98
5
5
  SHA512:
6
- metadata.gz: 84c9a62d909159bc534e3bb2de8157dd5d7d70c1845489579b3ca5892d658b27d27322e40afbeeb28a05827d166c78e0926af78a9345120bbc3af76be845f735
7
- data.tar.gz: 2e9f3a09b3cc47bba5170a1bf86c653427ae15b5edf069044516d8cd5ea6488c269b1b69ca4fe15af66690a39a5093934f0b9e3feb3c498ec24a8623cd4c75da
6
+ metadata.gz: ba76617f38c931cbddf68f3ef86da9e7cbb2f7205ec323739d0e6a5825962a6afd9110db26ca3a02984a8c2d11ae38f4732de7d8e873aacff433fd8c0486dac5
7
+ data.tar.gz: 97bf29473eae9b27151619514c2a8f10956033d0d8975c15f37e3bae394e01a8be88862db0e19328323ae37472cdc9153d92da510cdf82a60195b250a868a8f6
@@ -0,0 +1,11 @@
1
+ module Epa
2
+ class Client
3
+ def initialize(id, secret, api_type = :soap, options= {})
4
+ @client = "Epa::#{api_type.to_s.camelize}::Client".constantize.new(id, secret, options)
5
+ end
6
+
7
+ def method_missing(method, *arguments, &block)
8
+ @client.send method, *arguments
9
+ end
10
+ end
11
+ end
@@ -94,17 +94,6 @@ module Epa
94
94
  response["transactions"]
95
95
  end
96
96
 
97
- private
98
-
99
- def headers
100
- @token ||= get_token
101
- {
102
- 'Authorization' => "Bearer #{@token}",
103
- 'Accept' => 'application/json',
104
- 'Content-Type' => 'application/json'
105
- }
106
- end
107
-
108
97
  def call_json_api(path, method = 'get', payload = "", headers = {})
109
98
  uri = URI(API_URL)
110
99
  uri.path = path
@@ -123,6 +112,17 @@ module Epa
123
112
  json_response
124
113
  end
125
114
 
115
+ private
116
+
117
+ def headers
118
+ @token ||= get_token
119
+ {
120
+ 'Authorization' => "Bearer #{@token}",
121
+ 'Accept' => 'application/json',
122
+ 'Content-Type' => 'application/json'
123
+ }
124
+ end
125
+
126
126
  def guess_code(code, message)
127
127
  numbers = message.scan(/\d\,\d\,\d/).first
128
128
  numbers.split(/\,/).map { |i| code[i.to_i - 1] }.join
@@ -0,0 +1,162 @@
1
+ require 'savon'
2
+ require 'active_support/all'
3
+
4
+ module Epa
5
+ module Soap
6
+ class Client
7
+
8
+ attr_accessor :client_id, :secret_key, :config, :client
9
+
10
+ DEFAULTS = {
11
+ namespace_identifier: :tem,
12
+ env_namespace: :soapenv,
13
+ ssl_verify_mode: :none,
14
+ wsdl: 'https://www.epayments.com/api_v1.3/APIService.svc?wsdl',
15
+ log: false,
16
+ adapter: :net_http
17
+ }
18
+
19
+ def initialize(client_id, secret_key, options = {})
20
+ @client_id = client_id
21
+ @secret_key = secret_key
22
+ @config = DEFAULTS.merge options
23
+ end
24
+
25
+ def client
26
+ @client = Savon.client wsdl: config[:wsdl],
27
+ namespace_identifier: config[:namespace_identifier],
28
+ env_namespace: config[:env_namespace],
29
+ ssl_verify_mode: config[:ssl_verify_mode],
30
+ log: config[:log],
31
+ adapter: config[:adapter]
32
+ end
33
+
34
+ # available operations for Epayments API
35
+ def operations
36
+ client.operations
37
+ end
38
+
39
+ def get_balances
40
+ payload = {
41
+ external_partner_id: client_id
42
+ }
43
+
44
+ call_soap_api __method__, payload, [:balances, :e_wallet_balance]
45
+ end
46
+
47
+ def get_balance(currency, wallet)
48
+ payload = {
49
+ external_partner_id: client_id,
50
+ currency: currency,
51
+ e_wallet: wallet
52
+ }
53
+
54
+ call_soap_api __method__, payload, :balance
55
+ end
56
+
57
+ def balance(currency = 'USD', e_wallet = nil)
58
+ wallet = if e_wallet
59
+ get_balances.detect{|b| b[:currency] == currency && b[:e_wallet_number] == e_wallet}
60
+ else
61
+ get_balances.detect{|b| b[:currency] == currency}
62
+ end
63
+ wallet[:balance].to_f if wallet
64
+ end
65
+
66
+ def internal_payment(options)
67
+ payload = {
68
+ external_partner_id: client_id,
69
+ from_wallet_id: options[:from_wallet_id],
70
+ to_wallet_id: options[:to_wallet_id],
71
+ amount: options[:amount],
72
+ currency: options[:currency],
73
+ payment_id: options[:payment_id],
74
+ details: options[:details]
75
+ }
76
+
77
+ call_soap_api __method__, payload, :transaction_id
78
+ end
79
+
80
+ def transfer_funds(options)
81
+ internal_payment from_wallet_id: options[:from],
82
+ to_wallet_id: options[:to],
83
+ amount: options[:amount],
84
+ currency: options[:currency] || 'USD',
85
+ payment_id: options[:payment_id] || rand(2**32),
86
+ details: options[:details]
87
+ end
88
+
89
+ def get_incoming_transactions options
90
+ payload = {
91
+ external_partner_id: client_id,
92
+ date_from: options[:date_from],
93
+ date_to: options[:date_to],
94
+ currency: options[:currency] || 'USD'
95
+ }
96
+
97
+ call_soap_api __method__, payload, [:transactions, :incoming_transaction]
98
+ end
99
+
100
+ def get_transaction(options)
101
+ payload = {
102
+ external_partner_id: client_id,
103
+ e_wallet: options[:e_wallet],
104
+ transaction_id: options[:transaction_id]
105
+ }
106
+ call_soap_api __method__, payload, :transaction
107
+ end
108
+
109
+ def call_soap_api operation, params, return_key = nil
110
+ response = client.call operation, :message => prepare_body(params)
111
+ result = response.body[:"#{operation}_response"][:"#{operation}_result"]
112
+ if result[:response_code] == 'Ok'
113
+ return result if return_key.nil?
114
+ if return_key.is_a? Array
115
+ return_key.each { |value| result = result.[](value) }
116
+ result
117
+ else
118
+ result[return_key]
119
+ end
120
+ else
121
+ raise ApiError, result[:response_code]
122
+ end
123
+ end
124
+
125
+ private
126
+
127
+ # generates signature
128
+ def sign params
129
+ signature = params.values.map { |v| format_before_sign(v) }.join('') + secret_key
130
+ Digest::MD5.hexdigest(signature).upcase
131
+ end
132
+
133
+ # formats values to meet signature formatting requirements
134
+ def format_before_sign value
135
+ case value
136
+ when Time
137
+ value.strftime("%Y.%m.%d")
138
+ when Float
139
+ '%.2f' % value
140
+ else
141
+ value.to_s
142
+ end
143
+ end
144
+
145
+ # generates body of SOAP request
146
+ def prepare_body params
147
+ body_params = ActiveSupport::OrderedHash.new
148
+ params.each do |k, v|
149
+ value = if v.respond_to? :strftime
150
+ v.strftime("%Y-%m-%dT%T")
151
+ else
152
+ v.to_s
153
+ end
154
+ body_params[config[:namespace_identifier].to_s + ':' + k.to_s.camelize(:lower)] = value
155
+ end
156
+ body_params[config[:namespace_identifier].to_s + ":sign"] = sign(params)
157
+ body_params
158
+ end
159
+
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,6 @@
1
+ module Epa
2
+ module Soap
3
+ class ApiError < StandardError
4
+ end
5
+ end
6
+ end
@@ -1,2 +1,5 @@
1
+ require 'epa/client'
1
2
  require 'epa/json/client'
2
- require 'epa/json/exceptions'
3
+ require 'epa/json/exceptions'
4
+ require 'epa/soap/client'
5
+ require 'epa/soap/exceptions'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: epayments_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artem Harmaty
@@ -16,25 +16,43 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 3.0.0
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: '0'
27
- description: Ruby wrapper for epayments JSON API
26
+ version: 3.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: savon
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.5.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 2.5.0
41
+ description: Ruby wrapper for epayments JSON and SOAP API
28
42
  email: harmaty@gmail.com
29
43
  executables: []
30
44
  extensions: []
31
45
  extra_rdoc_files: []
32
46
  files:
47
+ - lib/epa/client.rb
33
48
  - lib/epa/json/client.rb
34
49
  - lib/epa/json/exceptions.rb
50
+ - lib/epa/soap/client.rb
51
+ - lib/epa/soap/exceptions.rb
35
52
  - lib/epayments_client.rb
36
53
  homepage: https://github.com/harmaty/epayments_client
37
- licenses: []
54
+ licenses:
55
+ - MIT
38
56
  metadata: {}
39
57
  post_install_message:
40
58
  rdoc_options: []