active_merchant-epsilon 0.5.4 → 0.5.5
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/.travis.yml +10 -3
- data/lib/active_merchant/billing/gateways/epsilon/epsilon_base.rb +23 -68
- data/lib/active_merchant/billing/gateways/epslion_convenience_store.rb +7 -1
- data/lib/active_merchant/billing/gateways/response_parser.rb +99 -0
- data/lib/active_merchant/epsilon.rb +1 -0
- data/lib/active_merchant/epsilon/version.rb +1 -1
- data/test/remote/gateways/remote_epsilon_convenience_store_test.rb +1 -0
- metadata +4 -4
- data/wercker.yml +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60b0318fc5b7ae333a3fb3a50e7566c9b30bdd50
|
4
|
+
data.tar.gz: a3a6fa696e3c912e1b2f5791ef45f04ad466fd4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 486586c8622f27eacab5d2f052203510dc17dd1c6c561e6c4c7223f23d292db860f6fe3736e84d34867a5fa051afd5ba38f819d23b7cce7c0991589d9987aafd
|
7
|
+
data.tar.gz: 678d4a7a4625d46eb84ccd6aaac32275da62ef2a140d12e2427c2ff870974acfdd0ac9004aebd83a0c7f61db78b6ab1db5b067afd5e73b9a8b938b7a7a3ec397
|
data/.travis.yml
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
language: ruby
|
2
|
-
|
3
2
|
rvm:
|
4
|
-
|
5
|
-
|
3
|
+
- 2.1.7
|
4
|
+
- 2.2.3
|
5
|
+
- 2.3.0
|
6
|
+
|
6
7
|
script: bundle exec rake test:remote
|
8
|
+
script: bundle exec rake test:unit
|
9
|
+
|
10
|
+
notifications:
|
11
|
+
slack:
|
12
|
+
rooms:
|
13
|
+
secure: rYtA4FBXqKHYv+v7xA6FfkcsDXRexWyMj9WMG2YK7bgZoNG2N7q461Dr/lCU0JTuRGsxDIs5jHK+QFFZNW/h+SbhQfiew++W8FgoIbP/z7HuEW50SXLcigGb02YmQm+ybbh5Dw1QGmcTOVItXJfuFmrDm1fq0qO0HC0543Yn4BzrSdWnEWQSaK7JMBRc9aYVPc0VlWG8pGRLtW0PDb6D32MvEI4jPrnh2NPDomPT9YutmMC+jNBPKr72m68g3v2GogbX4irZ6Kp5UUUZtaDbt9yLRfNL/3bsVGVrS1S2qCO4If5xTtE7lvV807a8QuQIj4Y9YqRO7K+/wUrz4Yb2ycF7agAkjN+w2WNEjgsKeFk50R4BWKpSy6y2N2RIl7rdHVEnU1T9I6LH0do5hMGqhgDYgppb2F7YFL9buUqag6gKAX3BHIV16ADJOFBT2Hh2m6x9f5TRb5ZR4LDJBQaflMhj0pwmIcC5Bhr3yi45r/4xiJ1IQaspXCzvfUMXARgWqqSxxveVQ07obiFeFCZ2YJEyv9fYLxT39+9koP48iKHTzbtFi4ay37PfMaztiXM0dqTwdjbJ95krc8AoNuTDphgwLLW2Zxxz2+tFQiLcj1tebUZa1hBsil1EVI7P/8PjAjGowckCnEAnFBZS5oFrgE2qzuwIGbLRYeeoRev0tks=
|
@@ -29,27 +29,6 @@ module ActiveMerchant #:nodoc:
|
|
29
29
|
|
30
30
|
self.abstract_class = true
|
31
31
|
|
32
|
-
module ResponseXpath
|
33
|
-
RESULT = '//Epsilon_result/result[@result]/@result'
|
34
|
-
TRANSACTION_CODE = '//Epsilon_result/result[@trans_code]/@trans_code'
|
35
|
-
ERROR_CODE = '//Epsilon_result/result[@err_code]/@err_code'
|
36
|
-
ERROR_DETAIL = '//Epsilon_result/result[@err_detail]/@err_detail'
|
37
|
-
CARD_NUMBER_MASK = '//Epsilon_result/result[@card_number_mask]/@card_number_mask'
|
38
|
-
CARD_BRAND = '//Epsilon_result/result[@card_brand]/@card_brand'
|
39
|
-
ACS_URL = '//Epsilon_result/result[@acsurl]/@acsurl' # ACS (Access Control Server)
|
40
|
-
PA_REQ = '//Epsilon_result/result[@pareq]/@pareq' # PAReq (payer authentication request)
|
41
|
-
RECEIPT_NUMBER = '//Epsilon_result/result[@receipt_no][1]/@receipt_no'
|
42
|
-
RECEIPT_DATE = '//Epsilon_result/result[@receipt_date][1]/@receipt_date'
|
43
|
-
CONVENIENCE_STORE_LIMIT_DATE = '//Epsilon_result/result[@conveni_limit][1]/@conveni_limit'
|
44
|
-
end
|
45
|
-
|
46
|
-
module ResultCode
|
47
|
-
FAILURE = '0'
|
48
|
-
SUCCESS = '1'
|
49
|
-
THREE_D_SECURE = '5'
|
50
|
-
SYSTEM_ERROR = '9'
|
51
|
-
end
|
52
|
-
|
53
32
|
cattr_accessor :contract_code, :proxy_address, :proxy_port
|
54
33
|
|
55
34
|
self.test_url = 'https://beta.epsilon.jp/cgi-bin/order/'
|
@@ -59,16 +38,26 @@ module ActiveMerchant #:nodoc:
|
|
59
38
|
self.homepage_url = 'http://www.example.net/'
|
60
39
|
self.display_name = 'New Gateway'
|
61
40
|
|
41
|
+
DEFAULT_RESPONSE_KEYS = [
|
42
|
+
:transaction_code,
|
43
|
+
:error_code,
|
44
|
+
:error_detail,
|
45
|
+
:card_number_mask,
|
46
|
+
:card_brand,
|
47
|
+
:three_d_secure,
|
48
|
+
:acs_url,
|
49
|
+
:pa_req,
|
50
|
+
:receipt_number,
|
51
|
+
:receipt_date
|
52
|
+
].freeze
|
53
|
+
|
62
54
|
private
|
63
55
|
|
64
|
-
def
|
65
|
-
|
66
|
-
end
|
56
|
+
def commit(path, request_params, response_keys = DEFAULT_RESPONSE_KEYS)
|
57
|
+
parser = ResponseParser.new
|
67
58
|
|
68
|
-
|
69
|
-
|
70
|
-
raw_response = ssl_post(File.join(url, path), post_data(params))
|
71
|
-
response = parse(raw_response)
|
59
|
+
url = (test? ? test_url : live_url)
|
60
|
+
response = parser.parse(ssl_post(File.join(url, path), post_data(request_params)), response_keys)
|
72
61
|
|
73
62
|
options = {
|
74
63
|
authorization: authorization_from(response),
|
@@ -78,54 +67,20 @@ module ActiveMerchant #:nodoc:
|
|
78
67
|
Response.new(success_from(response), message_from(response), response, options)
|
79
68
|
end
|
80
69
|
|
81
|
-
def message_from(response)
|
82
|
-
response[:message]
|
83
|
-
end
|
84
|
-
|
85
|
-
def parse(body)
|
86
|
-
# because of following error
|
87
|
-
# Nokogiri::XML::SyntaxError: Unsupported encoding x-sjis-cp932
|
88
|
-
xml = Nokogiri::XML(body.sub('x-sjis-cp932', 'UTF-8'))
|
89
|
-
|
90
|
-
result = xml.xpath(ResponseXpath::RESULT).to_s
|
91
|
-
transaction_code = xml.xpath(ResponseXpath::TRANSACTION_CODE).to_s
|
92
|
-
error_code = xml.xpath(ResponseXpath::ERROR_CODE).to_s
|
93
|
-
error_detail = uri_decode(xml.xpath(ResponseXpath::ERROR_DETAIL).to_s)
|
94
|
-
card_number_mask = uri_decode(xml.xpath(ResponseXpath::CARD_NUMBER_MASK).to_s)
|
95
|
-
card_brand = uri_decode(xml.xpath(ResponseXpath::CARD_BRAND).to_s)
|
96
|
-
acs_url = uri_decode(xml.xpath(ResponseXpath::ACS_URL).to_s)
|
97
|
-
pa_req = uri_decode(xml.xpath(ResponseXpath::PA_REQ).to_s)
|
98
|
-
receipt_number = xml.xpath(ResponseXpath::RECEIPT_NUMBER).to_s
|
99
|
-
receipt_date = uri_decode(xml.xpath(ResponseXpath::RECEIPT_DATE).to_s)
|
100
|
-
convenience_store_limit_date = uri_decode(xml.xpath(ResponseXpath::CONVENIENCE_STORE_LIMIT_DATE).to_s)
|
101
|
-
|
102
|
-
{
|
103
|
-
success: [ResultCode::SUCCESS, ResultCode::THREE_D_SECURE].include?(result),
|
104
|
-
message: "#{error_code}: #{error_detail}",
|
105
|
-
transaction_code: transaction_code,
|
106
|
-
error_code: error_code,
|
107
|
-
error_detail: error_detail,
|
108
|
-
card_number_mask: card_number_mask,
|
109
|
-
card_brand: card_brand,
|
110
|
-
three_d_secure: result == ResultCode::THREE_D_SECURE,
|
111
|
-
acs_url: acs_url,
|
112
|
-
pa_req: pa_req,
|
113
|
-
receipt_number: receipt_number,
|
114
|
-
receipt_date: receipt_date,
|
115
|
-
convenience_store_limit_date: convenience_store_limit_date,
|
116
|
-
}
|
117
|
-
end
|
118
|
-
|
119
70
|
def post_data(parameters = {})
|
120
71
|
parameters.map { |k, v| "#{k}=#{CGI.escape(v.to_s)}" }.join('&')
|
121
72
|
end
|
122
73
|
|
74
|
+
def message_from(response)
|
75
|
+
response[:message]
|
76
|
+
end
|
77
|
+
|
123
78
|
def success_from(response)
|
124
79
|
response[:success]
|
125
80
|
end
|
126
81
|
|
127
|
-
def
|
128
|
-
|
82
|
+
def authorization_from(response)
|
83
|
+
{}
|
129
84
|
end
|
130
85
|
end
|
131
86
|
end
|
@@ -1,6 +1,12 @@
|
|
1
1
|
module ActiveMerchant #:nodoc:
|
2
2
|
module Billing #:nodoc:
|
3
3
|
class EpsilonConvenienceStoreGateway < EpsilonBaseGateway
|
4
|
+
|
5
|
+
RESPONSE_KEYS = DEFAULT_RESPONSE_KEYS + [
|
6
|
+
:convenience_store_limit_date,
|
7
|
+
:convenience_store_payment_slip_url
|
8
|
+
]
|
9
|
+
|
4
10
|
def purchase(amount, payment_method, detail = {})
|
5
11
|
params = {
|
6
12
|
contract_code: self.contract_code,
|
@@ -20,7 +26,7 @@ module ActiveMerchant #:nodoc:
|
|
20
26
|
user_name_kana: payment_method.name,
|
21
27
|
}
|
22
28
|
|
23
|
-
commit('receive_order3.cgi', params)
|
29
|
+
commit('receive_order3.cgi', params, RESPONSE_KEYS)
|
24
30
|
end
|
25
31
|
end
|
26
32
|
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
class ResponseParser
|
4
|
+
def parse(body, required_items)
|
5
|
+
# because of following error
|
6
|
+
# Nokogiri::XML::SyntaxError: Unsupported encoding x-sjis-cp932
|
7
|
+
@xml = Nokogiri::XML(body.sub('x-sjis-cp932', 'UTF-8'))
|
8
|
+
@result = @xml.xpath(ResponseXpath::RESULT).to_s
|
9
|
+
|
10
|
+
response = {
|
11
|
+
success: [ResultCode::SUCCESS, ResultCode::THREE_D_SECURE].include?(@result),
|
12
|
+
message: "#{error_code}: #{error_detail}"
|
13
|
+
}
|
14
|
+
|
15
|
+
required_items.each do |item_name|
|
16
|
+
response[item_name] = self.send(item_name)
|
17
|
+
end
|
18
|
+
|
19
|
+
response
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def transaction_code
|
25
|
+
@xml.xpath(ResponseXpath::TRANSACTION_CODE).to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
def error_code
|
29
|
+
@xml.xpath(ResponseXpath::ERROR_CODE).to_s
|
30
|
+
end
|
31
|
+
|
32
|
+
def error_detail
|
33
|
+
uri_decode(@xml.xpath(ResponseXpath::ERROR_DETAIL).to_s)
|
34
|
+
end
|
35
|
+
|
36
|
+
def card_number_mask
|
37
|
+
uri_decode(@xml.xpath(ResponseXpath::CARD_NUMBER_MASK).to_s)
|
38
|
+
end
|
39
|
+
|
40
|
+
def card_brand
|
41
|
+
uri_decode(@xml.xpath(ResponseXpath::CARD_BRAND).to_s)
|
42
|
+
end
|
43
|
+
|
44
|
+
def three_d_secure
|
45
|
+
@result == ResultCode::THREE_D_SECURE
|
46
|
+
end
|
47
|
+
|
48
|
+
def acs_url
|
49
|
+
uri_decode(@xml.xpath(ResponseXpath::ACS_URL).to_s)
|
50
|
+
end
|
51
|
+
|
52
|
+
def pa_req
|
53
|
+
uri_decode(@xml.xpath(ResponseXpath::PA_REQ).to_s)
|
54
|
+
end
|
55
|
+
|
56
|
+
def receipt_number
|
57
|
+
@xml.xpath(ResponseXpath::RECEIPT_NUMBER).to_s
|
58
|
+
end
|
59
|
+
|
60
|
+
def receipt_date
|
61
|
+
uri_decode(@xml.xpath(ResponseXpath::RECEIPT_DATE).to_s)
|
62
|
+
end
|
63
|
+
|
64
|
+
def convenience_store_limit_date
|
65
|
+
uri_decode(@xml.xpath(ResponseXpath::CONVENIENCE_STORE_LIMIT_DATE).to_s)
|
66
|
+
end
|
67
|
+
|
68
|
+
def convenience_store_payment_slip_url
|
69
|
+
uri_decode(@xml.xpath(ResponseXpath::CONVENIENCE_STORE_PAYMENT_SLIP_URL).to_s)
|
70
|
+
end
|
71
|
+
|
72
|
+
def uri_decode(string)
|
73
|
+
URI.decode(string).encode(Encoding::UTF_8, Encoding::CP932)
|
74
|
+
end
|
75
|
+
|
76
|
+
module ResponseXpath
|
77
|
+
RESULT = '//Epsilon_result/result[@result]/@result'
|
78
|
+
TRANSACTION_CODE = '//Epsilon_result/result[@trans_code]/@trans_code'
|
79
|
+
ERROR_CODE = '//Epsilon_result/result[@err_code]/@err_code'
|
80
|
+
ERROR_DETAIL = '//Epsilon_result/result[@err_detail]/@err_detail'
|
81
|
+
CARD_NUMBER_MASK = '//Epsilon_result/result[@card_number_mask]/@card_number_mask'
|
82
|
+
CARD_BRAND = '//Epsilon_result/result[@card_brand]/@card_brand'
|
83
|
+
ACS_URL = '//Epsilon_result/result[@acsurl]/@acsurl' # ACS (Access Control Server)
|
84
|
+
PA_REQ = '//Epsilon_result/result[@pareq]/@pareq' # PAReq (payer authentication request)
|
85
|
+
RECEIPT_NUMBER = '//Epsilon_result/result[@receipt_no][1]/@receipt_no'
|
86
|
+
RECEIPT_DATE = '//Epsilon_result/result[@receipt_date][1]/@receipt_date'
|
87
|
+
CONVENIENCE_STORE_LIMIT_DATE = '//Epsilon_result/result[@conveni_limit][1]/@conveni_limit'
|
88
|
+
CONVENIENCE_STORE_PAYMENT_SLIP_URL = '//Epsilon_result/result[@haraikomi_url][1]/@haraikomi_url'
|
89
|
+
end
|
90
|
+
|
91
|
+
module ResultCode
|
92
|
+
FAILURE = '0'
|
93
|
+
SUCCESS = '1'
|
94
|
+
THREE_D_SECURE = '5'
|
95
|
+
SYSTEM_ERROR = '9'
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -7,3 +7,4 @@ require_relative 'billing/gateways/epsilon/epsilon_mission_code'
|
|
7
7
|
require_relative 'billing/gateways/epsilon/epsilon_base'
|
8
8
|
require_relative 'billing/gateways/epsilon'
|
9
9
|
require_relative 'billing/gateways/epslion_convenience_store'
|
10
|
+
require_relative 'billing/gateways/response_parser'
|
@@ -15,6 +15,7 @@ class RemoteEpsilonConvenienceStoreGatewayTest < MiniTest::Test
|
|
15
15
|
assert_match /\d{7}/, response.params['receipt_number']
|
16
16
|
assert_match /\d{4}\-\d{2}\-\d{2} \d{2}:\d{2}:\d{2}/, response.params['receipt_date']
|
17
17
|
assert_match /\d{4}\-\d{2}\-\d{2}/, response.params['convenience_store_limit_date']
|
18
|
+
assert_match %r!\Ahttp://.+!, response.params['convenience_store_payment_slip_url']
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_merchant-epsilon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kenichi TAKAHASHI
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemerchant
|
@@ -157,6 +157,7 @@ files:
|
|
157
157
|
- lib/active_merchant/billing/gateways/epsilon/epsilon_base.rb
|
158
158
|
- lib/active_merchant/billing/gateways/epsilon/epsilon_mission_code.rb
|
159
159
|
- lib/active_merchant/billing/gateways/epslion_convenience_store.rb
|
160
|
+
- lib/active_merchant/billing/gateways/response_parser.rb
|
160
161
|
- lib/active_merchant/epsilon.rb
|
161
162
|
- lib/active_merchant/epsilon/version.rb
|
162
163
|
- test/fixtures/vcr_cassettes/autheticate_three_d_secure_card_successful.yml
|
@@ -191,7 +192,6 @@ files:
|
|
191
192
|
- test/test_helper.rb
|
192
193
|
- test/unit/billing/convenience_store_test.rb
|
193
194
|
- test/unit/gateways/epsilon_test.rb
|
194
|
-
- wercker.yml
|
195
195
|
homepage: http://github.com/pepabo/active_merchant-epsilon
|
196
196
|
licenses:
|
197
197
|
- MIT
|
@@ -212,7 +212,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
212
212
|
version: '0'
|
213
213
|
requirements: []
|
214
214
|
rubyforge_project:
|
215
|
-
rubygems_version: 2.
|
215
|
+
rubygems_version: 2.5.1
|
216
216
|
signing_key:
|
217
217
|
specification_version: 4
|
218
218
|
summary: Epsilon integration for ActiveMerchant.
|