ipay-rails 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 +7 -0
- data/lib/ipay.rb +8 -0
- data/lib/ipay/client.rb +47 -0
- data/lib/ipay/formatters/underscore_formatter.rb +15 -0
- data/lib/ipay/orders.rb +83 -0
- data/lib/ipay/record.rb +9 -0
- data/lib/ipay/request.rb +99 -0
- data/lib/ipay/response.rb +19 -0
- data/lib/ipay/setup.rb +26 -0
- data/lib/ipay/utilities/array.rb +13 -0
- data/lib/ipay/utilities/hash.rb +34 -0
- data/lib/ipay/utilities/string.rb +9 -0
- data/lib/ipay/version.rb +3 -0
- metadata +167 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 35ba17ba2403ae0545acb523d6b4fcffffa578599e18b950b2eea3efdf4a81d8
|
4
|
+
data.tar.gz: f135122f5fde950e484eba758fcac8c715166f7859f92bde3b82cfc6012e6112
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6b90e6fa9bd1975988f53907860cde417eb1b4aca8b911d340f2fc9ddd8429197b21576a50cb34e5fb9b58ea1b66d0e46f062dbdb007ebc7ddd41c7e12276fb6
|
7
|
+
data.tar.gz: 3149b219da39c2486df588218250a7215d11d8692c742b3fab6a3e3ae9d1ef5a1ae988629ef25f09a89b630c52e086a2942487e32546f46435c373eb45cf0ebe
|
data/lib/ipay.rb
ADDED
data/lib/ipay/client.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'ipay/utilities/hash'
|
2
|
+
require 'ipay/utilities/array'
|
3
|
+
require 'ipay/utilities/string'
|
4
|
+
require 'ipay/setup'
|
5
|
+
require 'ipay/request'
|
6
|
+
|
7
|
+
module Ipay
|
8
|
+
class Client
|
9
|
+
def initialize(username=nil, apikey=nil, debug=false)
|
10
|
+
@setup = Ipay::Setup.new(username, apikey, debug)
|
11
|
+
end
|
12
|
+
|
13
|
+
def get(url, params = {}, options = { format: :formated })
|
14
|
+
request = Ipay::Request.new(@setup.host, @setup.path)
|
15
|
+
request.get(url, params, options)
|
16
|
+
end
|
17
|
+
|
18
|
+
def post(url, params = {}, options = { format: :formated })
|
19
|
+
request = Ipay::Request.new(@setup.host, @setup.path)
|
20
|
+
request.post(url, params, options)
|
21
|
+
end
|
22
|
+
|
23
|
+
def put(url, params={}, options = { format: :formated })
|
24
|
+
request = Ipay::Request.new(@setup.host, @setup.path)
|
25
|
+
request.put(url, params, options)
|
26
|
+
end
|
27
|
+
|
28
|
+
def delete(url, params={}, options = { format: :formated })
|
29
|
+
request = Ipay::Request.new(@setup.host, @setup.path)
|
30
|
+
request.delete(url, params, options)
|
31
|
+
end
|
32
|
+
|
33
|
+
def register_order(params = {}, options = { format: :formated })
|
34
|
+
request = Ipay::Request.new(@setup.host, @setup.path)
|
35
|
+
params[:userName] = @setup.username
|
36
|
+
params[:password] = @setup.password
|
37
|
+
request.post_register_order('register.do', params, options)
|
38
|
+
end
|
39
|
+
|
40
|
+
def get_order_status(params = {}, options = { format: :formated })
|
41
|
+
request = Ipay::Request.new(@setup.host, @setup.path)
|
42
|
+
params[:userName] = @setup.username
|
43
|
+
params[:password] = @setup.password
|
44
|
+
request.get('getOrderStatusExtended.do', params, options)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Ipay
|
2
|
+
module Formatters
|
3
|
+
class UnderscoreFormatter
|
4
|
+
attr_accessor :original_content, :formatted_content
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@original_content = ''
|
8
|
+
end
|
9
|
+
def call(options={})
|
10
|
+
original_content = options[:content]
|
11
|
+
@formatted_content = original_content.deep_underscore_keys
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/ipay/orders.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
module Ipay
|
2
|
+
class Orders < Ipay::Record
|
3
|
+
# @param id [ Integer ]
|
4
|
+
# @return [ Hash ]
|
5
|
+
def find(id)
|
6
|
+
client.get("invoices/#{id}")
|
7
|
+
end
|
8
|
+
|
9
|
+
# Returs all invoices
|
10
|
+
# @param params [ Hash ]
|
11
|
+
# - start [ Integer ]
|
12
|
+
# - limit [ Integer ]
|
13
|
+
# - order_direction [ String ]
|
14
|
+
# - order_field [ string ]
|
15
|
+
# - metadata [ Boolean ]
|
16
|
+
# - id [ Integer ]
|
17
|
+
# - date [ String ]
|
18
|
+
# - due_date [ String ]
|
19
|
+
# - status [ String ]
|
20
|
+
# - client_name [ String ]
|
21
|
+
# - client_identification [ String ]
|
22
|
+
# - number_template_full_number
|
23
|
+
# @return [ Array ]
|
24
|
+
def list(params = {})
|
25
|
+
client.get('invoices', params)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Creates a invoice
|
29
|
+
# @param params [ Hash ]
|
30
|
+
# - date [ String ]
|
31
|
+
# - due_date [ String ]
|
32
|
+
# - price_list [ Array ]
|
33
|
+
# - currency [ Array ]
|
34
|
+
# - payments [ Array ]
|
35
|
+
# - client [ Integer ] or [ Hash ]
|
36
|
+
# - items [ Array ]
|
37
|
+
# - observations [ Array ]
|
38
|
+
# - anotations [ Array ]
|
39
|
+
# - terms_conditions [ Array ]
|
40
|
+
# - status [ String ]
|
41
|
+
# - number_template [ String ]
|
42
|
+
# - retenctions [ Array ]
|
43
|
+
# - seller [ String ]
|
44
|
+
# @return [ Hash ]
|
45
|
+
def create(params)
|
46
|
+
#sanitize_params = params.deep_camel_case_lower_keys
|
47
|
+
client.post('register.do', params)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Creates a invoice
|
51
|
+
# @param params [ Hash ]
|
52
|
+
# - date [ String ]
|
53
|
+
# - due_date [ String ]
|
54
|
+
# - price_list [ Array ]
|
55
|
+
# - currency [ Array ]
|
56
|
+
# - payments [ Array ]
|
57
|
+
# - client [ Integer ] or [ Hash ]
|
58
|
+
# - items [ Array ]
|
59
|
+
# - observations [ Array ]
|
60
|
+
# - anotations [ Array ]
|
61
|
+
# - terms_conditions [ Array ]
|
62
|
+
# - status [ String ]
|
63
|
+
# - number_template [ String ]
|
64
|
+
# - retenctions [ Array ]
|
65
|
+
# - seller [ String ]
|
66
|
+
# @return [ Hash ]
|
67
|
+
def update(id, params)
|
68
|
+
sanitize_params = params.deep_camel_case_lower_keys
|
69
|
+
client.put("invoices/#{id}", sanitize_params)
|
70
|
+
end
|
71
|
+
|
72
|
+
# @param id [ Integer ]
|
73
|
+
# @param params [ Hash ]
|
74
|
+
# - emails [ Array ]
|
75
|
+
# - send_copy_to_user [ Boolean ]
|
76
|
+
# - invoiceType [ String ]
|
77
|
+
# @return [ Hash ]
|
78
|
+
def send_by_email(id, params)
|
79
|
+
sanitize_params = params.deep_camel_case_lower_keys
|
80
|
+
client.post("invoices/#{id}/email", sanitize_params)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
data/lib/ipay/record.rb
ADDED
data/lib/ipay/request.rb
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'ipay/response'
|
2
|
+
module Ipay
|
3
|
+
class Request
|
4
|
+
attr_accessor :path, :session
|
5
|
+
|
6
|
+
def initialize(host, path)
|
7
|
+
@path = path
|
8
|
+
@session = Faraday.new url: host
|
9
|
+
end
|
10
|
+
|
11
|
+
def get(url, params = {}, options = { format: :formated })
|
12
|
+
params = URI.encode_www_form(params)
|
13
|
+
|
14
|
+
response = @session.get do |req|
|
15
|
+
req.url "#{@path}#{url}?#{params}"
|
16
|
+
end
|
17
|
+
response_of_request(response, options)
|
18
|
+
end
|
19
|
+
|
20
|
+
def post(url, params = {}, options = { format: :formated })
|
21
|
+
params = JSON.generate(params)
|
22
|
+
response = @session.post do |req|
|
23
|
+
req.url "#{ @path }#{ url }"
|
24
|
+
req.headers['Content-Type'] = 'application/json'
|
25
|
+
req.headers['Accept'] = 'application/json'
|
26
|
+
req.body = params
|
27
|
+
end
|
28
|
+
response_of_request(response, options)
|
29
|
+
end
|
30
|
+
|
31
|
+
def put(url, params={}, options = { format: :formated })
|
32
|
+
params = JSON.generate(params)
|
33
|
+
response = @session.put do |req|
|
34
|
+
req.url "#{ @path }#{ url }"
|
35
|
+
req.body = params
|
36
|
+
end
|
37
|
+
response_of_request(response, options)
|
38
|
+
end
|
39
|
+
|
40
|
+
def delete(url, params={}, options = { format: :formated })
|
41
|
+
params = JSON.generate(params)
|
42
|
+
response = @session.delete do |req|
|
43
|
+
req.url "#{ @path }#{ url }"
|
44
|
+
req.body = params
|
45
|
+
end
|
46
|
+
response_of_request(response, options)
|
47
|
+
end
|
48
|
+
|
49
|
+
def post_register_order(url, params = {}, options = { format: :formated })
|
50
|
+
iva_amount = params[:iva_amount]
|
51
|
+
params.delete(:iva_amount)
|
52
|
+
response = @session.post do |req|
|
53
|
+
req.url "#{ @path }#{ url }"
|
54
|
+
req.headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
55
|
+
req.headers['Accept'] = 'application/json'
|
56
|
+
req.body = URI.encode_www_form(params) + "&jsonParams={ \"installments\": 1, \"IVA.amount\": #{iva_amount} }"
|
57
|
+
end
|
58
|
+
response_of_request(response, options)
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def response_of_request(response, options = { format: :formated })
|
64
|
+
cast_error(response, options) unless response.status == 200 || response.status == 201
|
65
|
+
|
66
|
+
raise_invalid_format options[:format]
|
67
|
+
|
68
|
+
return response if options[:format] == :raw
|
69
|
+
|
70
|
+
Ipay::Response.new(response.body).call
|
71
|
+
end
|
72
|
+
|
73
|
+
def cast_error(response, options = { format: :formated })
|
74
|
+
raise_invalid_format options[:format]
|
75
|
+
|
76
|
+
return response if options[:format] == :raw
|
77
|
+
|
78
|
+
message = response.body.empty? ? response.body : Ipay::Response.new(response.body).call['message']
|
79
|
+
|
80
|
+
error_map = {
|
81
|
+
500 => 'Sever error! Something were wrong in the server.',
|
82
|
+
400 => "Bad request!, #{ message }",
|
83
|
+
401 => 'Authentication error!',
|
84
|
+
402 => 'Required payment!',
|
85
|
+
403 => 'Restricted access!',
|
86
|
+
404 => 'Not found!',
|
87
|
+
405 => 'Operation does not allowed!',
|
88
|
+
}
|
89
|
+
raise StandardError, "Status: #{ response.status }. Error: #{ error_map[response.status] }"
|
90
|
+
end
|
91
|
+
|
92
|
+
def raise_invalid_format(format)
|
93
|
+
return if %i[formated raw].include?(format)
|
94
|
+
return if format.nil?
|
95
|
+
|
96
|
+
raise StandardError, "#{format} is not a valid format, valid_formats[:formated, :raw]"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'ipay/formatters/underscore_formatter'
|
2
|
+
module Ipay
|
3
|
+
class Response
|
4
|
+
attr_reader :body, :formatter
|
5
|
+
|
6
|
+
def initialize(body, formatter_class_name='UnderscoreFormatter')
|
7
|
+
@body = JSON.parse(body)
|
8
|
+
@formatter = Object.const_get("Ipay::Formatters::#{ formatter_class_name }").new
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(options={})
|
12
|
+
if options[:none]
|
13
|
+
JSON.parse(body)
|
14
|
+
else
|
15
|
+
formatter.call(content: body)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/ipay/setup.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
require 'base64'
|
4
|
+
|
5
|
+
module Ipay
|
6
|
+
class Setup
|
7
|
+
attr_accessor :host, :path, :password, :username, :debug
|
8
|
+
|
9
|
+
def initialize(username=nil, password=nil, debug=false)
|
10
|
+
@host = 'https://eco.credibanco.com/'
|
11
|
+
if debug
|
12
|
+
@host = 'https://ecouat.credibanco.com/'
|
13
|
+
end
|
14
|
+
|
15
|
+
@path = 'payment/rest/'
|
16
|
+
|
17
|
+
@debug = debug
|
18
|
+
|
19
|
+
raise Error, 'You must provide a iPay Password' if not password
|
20
|
+
raise Error, 'You must provide a iPay USERNAME' if not username
|
21
|
+
@password = password
|
22
|
+
@username = username
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class Array
|
2
|
+
def deep_camel_case_lower_keys
|
3
|
+
[].tap { |array|
|
4
|
+
self.each { |item| array << item.deep_camel_case_lower_keys if item.is_a? Hash }
|
5
|
+
}
|
6
|
+
end
|
7
|
+
|
8
|
+
def deep_underscore_keys
|
9
|
+
[].tap { |array|
|
10
|
+
self.each { |item| array << item.deep_underscore_keys if item.is_a? Hash }
|
11
|
+
}
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class Hash
|
2
|
+
def deep_camel_case_lower_keys(hash=self)
|
3
|
+
{}.tap { |h|
|
4
|
+
hash.each { |key, value| h[camel_case_lower_key(key)] = map_value(value, :deep_camel_case_lower_keys) }
|
5
|
+
}
|
6
|
+
end
|
7
|
+
|
8
|
+
def deep_underscore_keys(hash=self)
|
9
|
+
{}.tap { |h|
|
10
|
+
hash.each { |key, value| h[underscore_key(key)] = map_value(value, :deep_underscore_keys) }
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def underscore_key(key)
|
17
|
+
key.to_s.underscore.to_sym
|
18
|
+
end
|
19
|
+
|
20
|
+
def camel_case_lower_key(key)
|
21
|
+
key.to_s.split('_').inject([]){ |buffer, e| buffer.push(buffer.empty? ? e : e.capitalize) }.join.to_sym
|
22
|
+
end
|
23
|
+
|
24
|
+
def map_value(thing, method)
|
25
|
+
case thing
|
26
|
+
when Hash
|
27
|
+
__send__(method, thing)
|
28
|
+
when Array
|
29
|
+
thing.map { |v| map_value(v, method) }
|
30
|
+
else
|
31
|
+
thing
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/ipay/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ipay-rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '1.0'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Caxtor
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-12-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faraday
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.1.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.1.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: jazz_fingers
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: json
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.2'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.2'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '13.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '13.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 3.9.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 3.9.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: vcr
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '5.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '5.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: webmock
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '3.7'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '3.7'
|
125
|
+
description: REST API Client for iPay payment gateway
|
126
|
+
email:
|
127
|
+
- caxtorapp@gmail.com
|
128
|
+
executables: []
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files: []
|
131
|
+
files:
|
132
|
+
- lib/ipay.rb
|
133
|
+
- lib/ipay/client.rb
|
134
|
+
- lib/ipay/formatters/underscore_formatter.rb
|
135
|
+
- lib/ipay/orders.rb
|
136
|
+
- lib/ipay/record.rb
|
137
|
+
- lib/ipay/request.rb
|
138
|
+
- lib/ipay/response.rb
|
139
|
+
- lib/ipay/setup.rb
|
140
|
+
- lib/ipay/utilities/array.rb
|
141
|
+
- lib/ipay/utilities/hash.rb
|
142
|
+
- lib/ipay/utilities/string.rb
|
143
|
+
- lib/ipay/version.rb
|
144
|
+
homepage:
|
145
|
+
licenses:
|
146
|
+
- MIT
|
147
|
+
metadata: {}
|
148
|
+
post_install_message:
|
149
|
+
rdoc_options: []
|
150
|
+
require_paths:
|
151
|
+
- lib
|
152
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
153
|
+
requirements:
|
154
|
+
- - ">="
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: '0'
|
157
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
158
|
+
requirements:
|
159
|
+
- - ">="
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: '0'
|
162
|
+
requirements: []
|
163
|
+
rubygems_version: 3.1.2
|
164
|
+
signing_key:
|
165
|
+
specification_version: 4
|
166
|
+
summary: REST API Client for iPay payment gateway
|
167
|
+
test_files: []
|