payture-api-v1 0.1.0 → 0.2.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/.gitignore +1 -0
- data/Guardfile +34 -0
- data/README.md +4 -0
- data/lib/core_extensions/string.rb +4 -2
- data/lib/payture/api/v1.rb +2 -0
- data/lib/payture/api/v1/client.rb +12 -8
- data/lib/payture/api/v1/client/payture_api.rb +65 -9
- data/lib/payture/api/v1/client/payture_apim.rb +32 -9
- data/lib/payture/api/v1/client/payture_vwapi.rb +54 -8
- data/lib/payture/api/v1/configuration.rb +1 -1
- data/lib/payture/api/v1/request.rb +45 -0
- data/lib/payture/api/v1/response.rb +16 -0
- data/lib/payture/api/v1/version.rb +1 -1
- data/payture-api-v1.gemspec +5 -1
- metadata +65 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dcaddf1bdb7e2343e34bb183bec3c0da0d1a09c5
|
4
|
+
data.tar.gz: 76159e5a3cbb8266a4c6c3b5b713cdb8488bda6e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98d04cc2af28ca2768254cbd4d9f2aa7358417c333ce2db62bf65c5f4772485d4b43e5498f44e420da0179650d4bc3d539c0581c1666d828fe9b64ec32767e41
|
7
|
+
data.tar.gz: 7f2ca31caae210459e6fe2a2dab5946ae26df4b53032803168e8f49f5aa718efd1f66a7f12d749b4b1c03dffd7666ae26edf2648cd8fd20c528cb0f9f2865021
|
data/.gitignore
CHANGED
data/Guardfile
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
## Uncomment and set this to only include directories you want to watch
|
5
|
+
# directories %w(app lib config test spec features)
|
6
|
+
|
7
|
+
## Uncomment to clear the screen before every task
|
8
|
+
# clearing :on
|
9
|
+
|
10
|
+
## Guard internally checks for changes in the Guardfile and exits.
|
11
|
+
## If you want Guard to automatically start up again, run guard in a
|
12
|
+
## shell loop, e.g.:
|
13
|
+
##
|
14
|
+
## $ while bundle exec guard; do echo "Restarting Guard..."; done
|
15
|
+
##
|
16
|
+
## Note: if you are using the `directories` clause above and you are not
|
17
|
+
## watching the project directory ('.'), then you will want to move
|
18
|
+
## the Guardfile to a watched dir and symlink it back, e.g.
|
19
|
+
#
|
20
|
+
# $ mkdir config
|
21
|
+
# $ mv Guardfile config/
|
22
|
+
# $ ln -s config/Guardfile .
|
23
|
+
#
|
24
|
+
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"
|
25
|
+
|
26
|
+
guard :minitest do
|
27
|
+
# with Minitest::Unit
|
28
|
+
watch(%r{^test/(.*)\/?test_(.*)\.rb$})
|
29
|
+
watch(%r{^test/minitest_helper\.rb$}) { 'test' }
|
30
|
+
|
31
|
+
watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
|
32
|
+
watch(%r{^lib/payture/api/v1/(.*/)?([^/]+)\.rb$}) { |m| "test/payture/test_#{m[2]}.rb" }
|
33
|
+
watch(%r{^lib/payture/api/v1/client(.*/)?([^/]+)\.rb$}) { |m| "test/payture/client/test_#{m[2]}.rb" }
|
34
|
+
end
|
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Payture API V1
|
2
2
|
|
3
|
+
[](http://badge.fury.io/rb/payture-api-v1)
|
4
|
+
[](https://travis-ci.org/endorfin/payture-api-v1)
|
5
|
+
[](https://coveralls.io/r/endorfin/payture-api-v1?branch=master)
|
6
|
+
|
3
7
|
This library provides a wrapper to Version 1 of the Payture API
|
4
8
|
|
5
9
|
## Installation
|
@@ -3,7 +3,9 @@ class String
|
|
3
3
|
self.scan(/[A-Z][a-z]*/).join('_').downcase
|
4
4
|
end
|
5
5
|
|
6
|
-
def to_camelcase
|
7
|
-
self.split('_').map(&:capitalize).join
|
6
|
+
def to_camelcase(mappings=[])
|
7
|
+
retval = self.split('_').map(&:capitalize).join
|
8
|
+
mappings.each {|k,v| retval.sub!(k,v)}
|
9
|
+
retval
|
8
10
|
end
|
9
11
|
end
|
data/lib/payture/api/v1.rb
CHANGED
@@ -4,6 +4,7 @@ module Payture::Api::V1
|
|
4
4
|
Dir[File.expand_path("../client/*.rb", __FILE__)].each{|f| require f}
|
5
5
|
|
6
6
|
attr_accessor *Configuration::VALID_OPTIONS_KEYS
|
7
|
+
attr_reader :api_methods
|
7
8
|
|
8
9
|
def initialize(options={})
|
9
10
|
options = Payture::Api::V1.options.merge(options)
|
@@ -11,19 +12,22 @@ module Payture::Api::V1
|
|
11
12
|
send("#{key}=", options[key])
|
12
13
|
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
if 'api' == self.api_type
|
16
|
+
class << self; include Client::PaytureApi; end
|
17
|
+
elsif 'apim' == self.api_type
|
18
|
+
class << self; include Client::PaytureApim; end
|
19
|
+
elsif 'vwapi' == self.api_type
|
20
|
+
class << self; include Client::PaytureVwapi; end
|
21
|
+
end
|
17
22
|
end
|
18
23
|
|
19
|
-
def
|
20
|
-
|
24
|
+
def make_request(method, params)
|
25
|
+
Request.new(url_for(method), params)
|
21
26
|
end
|
22
27
|
|
23
|
-
def
|
24
|
-
|
28
|
+
def url_for(method)
|
29
|
+
"https://#{host}.#{Configuration::DOMAIN}/#{api_type}/#{method}"
|
25
30
|
end
|
26
|
-
|
27
31
|
end
|
28
32
|
|
29
33
|
end
|
@@ -3,17 +3,73 @@ module Payture::Api::V1
|
|
3
3
|
class Client
|
4
4
|
module PaytureApi
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
6
|
+
def pay(pay_info, order_id, amount)
|
7
|
+
params = {
|
8
|
+
key: self.key,
|
9
|
+
pay_info: pay_info,
|
10
|
+
order_id: order_id,
|
11
|
+
amount: amount
|
12
|
+
}
|
13
|
+
|
14
|
+
request = make_request('Pay', params)
|
15
|
+
request.result
|
16
|
+
end
|
17
|
+
|
18
|
+
def block(pay_info, order_id, amount)
|
19
|
+
params = {
|
20
|
+
key: self.key,
|
21
|
+
pay_info: pay_info,
|
22
|
+
order_id: order_id,
|
23
|
+
amount: amount
|
24
|
+
}
|
25
|
+
|
26
|
+
request = make_request('Block', params)
|
27
|
+
request.result
|
28
|
+
end
|
29
|
+
|
30
|
+
def charge(order_id)
|
31
|
+
params = {
|
32
|
+
key: self.key,
|
33
|
+
order_id: order_id
|
34
|
+
}
|
35
|
+
|
36
|
+
request = make_request('Charge', params)
|
37
|
+
request.result
|
38
|
+
end
|
39
|
+
|
40
|
+
def unblock(order_id, amount)
|
41
|
+
params = {
|
42
|
+
key: self.key,
|
43
|
+
order_id: order_id,
|
44
|
+
amount: amount
|
45
|
+
}
|
46
|
+
|
47
|
+
request = make_request('Unblock', params)
|
48
|
+
request.result
|
49
|
+
end
|
50
|
+
|
51
|
+
def refund(order_id, amount)
|
52
|
+
params = {
|
53
|
+
key: self.key,
|
54
|
+
order_id: order_id,
|
55
|
+
amount: amount
|
56
|
+
}
|
57
|
+
|
58
|
+
request = make_request('Refund', params)
|
59
|
+
request.result
|
60
|
+
end
|
61
|
+
|
62
|
+
def get_state(order_id)
|
63
|
+
params = {
|
64
|
+
key: self.key,
|
65
|
+
order_id: order_id
|
66
|
+
}
|
67
|
+
|
68
|
+
request = make_request('GetState', params)
|
69
|
+
request.result
|
14
70
|
end
|
15
71
|
|
16
72
|
end
|
17
73
|
end
|
18
74
|
|
19
|
-
end
|
75
|
+
end
|
@@ -3,17 +3,40 @@ module Payture::Api::V1
|
|
3
3
|
class Client
|
4
4
|
module PaytureApim
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
6
|
+
def init(session_type, order_id, amount, ip, options={})
|
7
|
+
data = {
|
8
|
+
session_type: session_type,
|
9
|
+
order_id: order_id,
|
10
|
+
amount: amount,
|
11
|
+
ip: ip
|
12
|
+
}.merge!(options)
|
13
|
+
|
14
|
+
params = {
|
15
|
+
key: self.key,
|
16
|
+
data: data
|
17
|
+
}
|
18
|
+
|
19
|
+
request = make_request('Init', params)
|
20
|
+
request.result
|
21
|
+
end
|
22
|
+
|
23
|
+
def pay_url(session_id)
|
24
|
+
"#{url_for('Pay')}?SessionId=#{session_id}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def charge(order_id)
|
28
|
+
end
|
29
|
+
|
30
|
+
def unblock(order_id, amount)
|
31
|
+
end
|
32
|
+
|
33
|
+
def refund(order_id, amount)
|
34
|
+
end
|
35
|
+
|
36
|
+
def pay_status(order_id)
|
14
37
|
end
|
15
38
|
|
16
39
|
end
|
17
40
|
end
|
18
41
|
|
19
|
-
end
|
42
|
+
end
|
@@ -3,17 +3,63 @@ module Payture::Api::V1
|
|
3
3
|
class Client
|
4
4
|
module PaytureVwapi
|
5
5
|
|
6
|
-
|
6
|
+
def register(options={})
|
7
|
+
|
8
|
+
end
|
9
|
+
|
10
|
+
def update(options={})
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
def delete(options={})
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
def add(options={})
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
def activate(options={})
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
def remove(options={})
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
def get_list(options={})
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
def init(options={})
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
def pay(options={})
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
def send_code(options={})
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
def charge(options={})
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
def unblock(options={})
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
def refund(options={})
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
def pay_status(options={})
|
7
59
|
|
8
|
-
API_METHODS.each do |method_name|
|
9
|
-
underscore_method_name = method_name.to_snakecase
|
10
|
-
define_method underscore_method_name do |options|
|
11
|
-
options ||= {}
|
12
|
-
# TODO: response = api.get(method_name, options)
|
13
|
-
end
|
14
60
|
end
|
15
61
|
|
16
62
|
end
|
17
63
|
end
|
18
64
|
|
19
|
-
end
|
65
|
+
end
|
@@ -7,7 +7,7 @@ module Payture
|
|
7
7
|
|
8
8
|
DEFAULT_API_TYPE = 'api' # api, apim, vwapi
|
9
9
|
DEFAULT_HOST = 'sandbox' # sandbox, secure
|
10
|
-
DEFAULT_KEY = '
|
10
|
+
DEFAULT_KEY = 'Merchant'
|
11
11
|
DEFAULT_PASSWORD = nil
|
12
12
|
DEFAULT_USER_AGENT = "Payture API V1 Ruby Gem #{Payture::Api::V1::VERSION}".freeze
|
13
13
|
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Payture::Api::V1
|
2
|
+
class Request
|
3
|
+
|
4
|
+
attr_reader :response, :result
|
5
|
+
|
6
|
+
def initialize(url, params)
|
7
|
+
params = prepare_params(params)
|
8
|
+
@response = rest_client.post(url, params)
|
9
|
+
@result = Response.new(response).result
|
10
|
+
end
|
11
|
+
|
12
|
+
def rest_client
|
13
|
+
@rest_client ||= RestClient
|
14
|
+
end
|
15
|
+
|
16
|
+
def endode_data(data)
|
17
|
+
if data.kind_of?(Hash)
|
18
|
+
data = convert_keys(data)
|
19
|
+
data = Array[data.map {|k, v| "#{k}=#{v}" }].join(';')
|
20
|
+
data = CGI.escape(data)
|
21
|
+
end
|
22
|
+
|
23
|
+
data
|
24
|
+
end
|
25
|
+
|
26
|
+
def convert_keys(params)
|
27
|
+
mappings = {
|
28
|
+
'Pan' => 'PAN',
|
29
|
+
'Ip' => 'IP',
|
30
|
+
'Data' => 'DATA',
|
31
|
+
'VwId' => 'VWID',
|
32
|
+
'VwUserLgn' => 'VWUserLgn',
|
33
|
+
'VwUserPsw' => 'VWUserPsw'
|
34
|
+
}
|
35
|
+
|
36
|
+
Hash[params.map {|k, v| [k.to_s.to_camelcase(mappings), v] }]
|
37
|
+
end
|
38
|
+
|
39
|
+
def prepare_params(params)
|
40
|
+
params = convert_keys(params)
|
41
|
+
params = Hash[params.map {|k, v| v.kind_of?(Hash) ? [k, endode_data(v)] : [k, v] }]
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "rexml/document"
|
2
|
+
|
3
|
+
module Payture::Api::V1
|
4
|
+
class Response
|
5
|
+
|
6
|
+
attr_reader :result
|
7
|
+
|
8
|
+
def initialize(response)
|
9
|
+
#puts response.body
|
10
|
+
return nil if response.body.empty?
|
11
|
+
doc = REXML::Document.new(response.body)
|
12
|
+
@result = Hash[doc.elements.first.attributes.map { |a| [ a.first.to_snakecase.to_sym, a.last ] }]
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
data/payture-api-v1.gemspec
CHANGED
@@ -17,9 +17,13 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
-
spec.add_development_dependency "bundler"
|
20
|
+
spec.add_development_dependency "bundler"
|
21
21
|
spec.add_development_dependency "rake"
|
22
22
|
spec.add_development_dependency "minitest"
|
23
23
|
spec.add_development_dependency "minitest-reporters"
|
24
|
+
spec.add_development_dependency "minitest-vcr"
|
25
|
+
spec.add_development_dependency "webmock"
|
24
26
|
spec.add_development_dependency "coveralls"
|
27
|
+
spec.add_development_dependency "guard"
|
28
|
+
spec.add_development_dependency "guard-minitest"
|
25
29
|
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: payture-api-v1
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- René Kersten
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-03-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
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: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +66,34 @@ dependencies:
|
|
66
66
|
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest-vcr
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: webmock
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: coveralls
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +108,34 @@ dependencies:
|
|
80
108
|
- - '>='
|
81
109
|
- !ruby/object:Gem::Version
|
82
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: guard
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: guard-minitest
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
83
139
|
description: This library provides a wrapper to Version 1 of the Payture API
|
84
140
|
email:
|
85
141
|
- rene.kersten@gmail.com
|
@@ -92,6 +148,7 @@ files:
|
|
92
148
|
- .travis.yml
|
93
149
|
- CODE_OF_CONDUCT.md
|
94
150
|
- Gemfile
|
151
|
+
- Guardfile
|
95
152
|
- LICENSE.txt
|
96
153
|
- README.md
|
97
154
|
- Rakefile
|
@@ -102,6 +159,8 @@ files:
|
|
102
159
|
- lib/payture/api/v1/client/payture_apim.rb
|
103
160
|
- lib/payture/api/v1/client/payture_vwapi.rb
|
104
161
|
- lib/payture/api/v1/configuration.rb
|
162
|
+
- lib/payture/api/v1/request.rb
|
163
|
+
- lib/payture/api/v1/response.rb
|
105
164
|
- lib/payture/api/v1/version.rb
|
106
165
|
- payture-api-v1.gemspec
|
107
166
|
homepage: https://github.com/endorfin/payture-api-v1
|