active_merchant-epsilon 0.9.3 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +21 -0
  3. data/CHANGELOG.md +20 -0
  4. data/README.md +19 -4
  5. data/lib/active_merchant/billing/gateways/epsilon.rb +14 -0
  6. data/lib/active_merchant/billing/gateways/epsilon/epsilon_base.rb +2 -1
  7. data/lib/active_merchant/billing/gateways/epsilon_link_payment.rb +55 -0
  8. data/lib/active_merchant/billing/gateways/response_parser.rb +10 -0
  9. data/lib/active_merchant/epsilon.rb +1 -1
  10. data/lib/active_merchant/epsilon/version.rb +1 -1
  11. data/test/fixtures/vcr_cassettes/capture_failure.yml +45 -0
  12. data/test/fixtures/vcr_cassettes/capture_success.yml +45 -0
  13. data/test/fixtures/vcr_cassettes/capture_success_authorize.yml +49 -0
  14. data/test/fixtures/vcr_cassettes/epsilon_link_type_not_sending_delivery_information_purchase_successful.yml +44 -0
  15. data/test/fixtures/vcr_cassettes/epsilon_link_type_purchase_fail.yml +43 -0
  16. data/test/fixtures/vcr_cassettes/epsilon_link_type_purchase_successful.yml +44 -0
  17. data/test/fixtures/vcr_cassettes/epsilon_link_type_void_fail.yml +45 -0
  18. data/test/fixtures/vcr_cassettes/epsilon_link_type_void_successfull.yml +45 -0
  19. data/test/fixtures/vcr_cassettes/purchase_with_capture_false_successful.yml +49 -0
  20. data/test/fixtures/vcr_cassettes/purchase_with_capture_true_successful.yml +49 -0
  21. data/test/remote/gateways/remote_epsilon_convenience_store_test.rb +5 -5
  22. data/test/remote/gateways/remote_epsilon_link_payment_test.rb +55 -0
  23. data/test/remote/gateways/remote_epsilon_test.rb +47 -2
  24. data/test/test_helper.rb +62 -0
  25. metadata +30 -10
  26. data/.travis.yml +0 -13
  27. data/lib/active_merchant/billing/gateways/epsilon_gmo_after.rb +0 -42
  28. data/test/remote/gateways/remote_epsilon_gmo_after_test.rb +0 -30
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8b6d8a514b77fdac7f5ba836ad2587393253f2fedda6aac170ccc65817fa575d
4
- data.tar.gz: 72244c3fafb9a11b2a2a5c1593474aefa54c3fc4c4c37856c5288c5d67cbeb61
3
+ metadata.gz: c43c4d71a9719ec55be94aa1f66222eac8bead4b16db6a31611269aee844afcf
4
+ data.tar.gz: 6bb0b39a5598d3cb8718037df3fd00ff42a53cded61bc98529a4ad00aa9f4259
5
5
  SHA512:
6
- metadata.gz: 22b4a2fa3d606dec5edba7243c9ae21a6f410a0ddb6f9fe7a0ec2e02e2ed6e1a2e1cb209f32e27e1677cfd1589b8f071033bcd30dff85cad09c1d23bbca293df
7
- data.tar.gz: 9d812be0b13afde388c1c57d007af0e6786e890be09c5a290ea42db26b5482571af2fd1e92d737df979da2ca7501994e3de53e671a887628739df0d2ae675416
6
+ metadata.gz: 164e39f8d0e343f0172e5371fc99d1c46d8d04346c8e0c135ac7478cbe507be36d6182913df016e510eb75073559ad9d59b042718f3c26fa5fb6a37c20e940f6
7
+ data.tar.gz: 1b5e435a9342d69b78e032d466fb3f930805912bb2c4ac24eb7e7d9ce2bcf652a5b15f050ab38ad3526929cda5cc00ac32d0f540828226d97a0ca69ab986f845
@@ -0,0 +1,21 @@
1
+ name: test
2
+ on: push
3
+
4
+ jobs:
5
+ test-all:
6
+ runs-on: ubuntu-latest
7
+
8
+ strategy:
9
+ fail-fast: false
10
+ matrix:
11
+ ruby-version: [2.4, 2.5, 2.6, 2.7, 3.0]
12
+
13
+ steps:
14
+ - uses: actions/checkout@v2
15
+
16
+ - uses: ruby/setup-ruby@v1.63.0
17
+ with:
18
+ ruby-version: ${{ matrix.ruby-version }}
19
+ bundler-cache: true
20
+
21
+ - run: bundle exec rake test:unit test:remote
@@ -1,5 +1,25 @@
1
1
  # CHANGELOG
2
2
 
3
+ ### 0.13.0
4
+
5
+ - [Add `last-update` to OrderResponse](https://github.com/pepabo/active_merchant-epsilon/pull/118)
6
+
7
+ ### 0.12.0
8
+
9
+ - [Add Parameter `delivery_info_required` to purchase method for Epsilon Link Payment](https://github.com/pepabo/active_merchant-epsilon/pull/116)
10
+
11
+ ### 0.11.0
12
+
13
+ - [Add void mehotd for Epsilon Link Payment](https://github.com/pepabo/active_merchant-epsilon/pull/114)
14
+
15
+ ### 0.10.0
16
+
17
+ * [Capture authorized payments](https://github.com/pepabo/active_merchant-epsilon/pull/112)
18
+
19
+ ### 0.9.4
20
+
21
+ * [Support Epsilon Link Payment instead of GMO Payment After Delivery](https://github.com/pepabo/active_merchant-epsilon/pull/110)
22
+
3
23
  ### 0.9.3
4
24
 
5
25
  * [Fix API version for GMO Payment After Delivery](https://github.com/pepabo/active_merchant-epsilon/pull/108)
data/README.md CHANGED
@@ -302,12 +302,19 @@ else
302
302
  end
303
303
  ```
304
304
 
305
- ### GMO Payment After Delivery
305
+ ### Epsilon Link Payment
306
+
307
+ EpsilosLinkPaymentGateway is available in all link payments.
308
+ For example, GMO Payment After Delivery.
309
+
310
+ If you don't need to send paramaters of delivery information details(e.g. consignee_postal, consignee_name, orderer_postal, and orderer_name), you set `delivery_info_required` to `false`.
311
+
312
+ Default value of `delivery_info_required` is `true`, therefore you must set delivery information details to purchase_detail When you don't set `delivery_info_required`.
306
313
 
307
314
  ```ruby
308
- ActiveMerchant::Billing::EpsilonGmoAfterGateway.contract_code = 'YOUR_CONTRACT_CODE'
315
+ ActiveMerchant::Billing::EpsilonLinkPaymentGateway.contract_code = 'YOUR_CONTRACT_CODE'
309
316
 
310
- gateway = ActiveMerchant::Billing::EpsilonGmoAfterGateway.new
317
+ gateway = ActiveMerchant::Billing::EpsilonLinkPaymentGateway.new
311
318
 
312
319
  amount = 10000
313
320
 
@@ -319,6 +326,7 @@ purchase_detail = {
319
326
  item_code: 'ITEM001',
320
327
  item_name: 'Greate Product',
321
328
  order_number: 'UNIQUE ORDER NUMBER',
329
+ st_code: 'SETTLEMENT_CODE',
322
330
  consignee_postal: '1500002',
323
331
  consignee_name: '山田 太郎',
324
332
  consignee_address: '東京都渋谷区1-1-1',
@@ -331,7 +339,9 @@ purchase_detail = {
331
339
  memo2: 'memo2',
332
340
  }
333
341
 
334
- response = gateway.purchase(amount, purchase_detail)
342
+ delivery_info_required = true
343
+
344
+ response = gateway.purchase(amount, purchase_detail, delivery_info_required)
335
345
 
336
346
  if response.success?
337
347
  puts "Successfully send order data"
@@ -341,6 +351,11 @@ else
341
351
  end
342
352
  ```
343
353
 
354
+ ### Epsilon Link Payment Void Transaction
355
+ ```ruby
356
+ gateway.void('order_number')
357
+ ```
358
+
344
359
  ### Error handling
345
360
 
346
361
  If epsilon server returns status excepted 200, `#purchase` method raise `ActiveMerchant::ResponseError`.
@@ -19,6 +19,7 @@ module ActiveMerchant #:nodoc:
19
19
  find_user: 'get_user_info.cgi',
20
20
  change_recurring_amount: 'change_amount_payment.cgi',
21
21
  find_order: 'getsales2.cgi',
22
+ capture: 'sales_payment.cgi',
22
23
  }.freeze
23
24
 
24
25
  self.supported_cardtypes = [:visa, :master, :american_express, :discover]
@@ -51,6 +52,7 @@ module ActiveMerchant #:nodoc:
51
52
 
52
53
  params[:memo1] = detail[:memo1] if detail.has_key?(:memo1)
53
54
  params[:memo2] = detail[:memo2] if detail.has_key?(:memo2)
55
+ params[:kari_flag] = detail[:capture] ? 2 : 1 if detail.has_key?(:capture)
54
56
 
55
57
  commit(PATHS[:registered_purchase], params)
56
58
  end
@@ -83,6 +85,7 @@ module ActiveMerchant #:nodoc:
83
85
 
84
86
  params[:memo1] = detail[:memo1] if detail.has_key?(:memo1)
85
87
  params[:memo2] = detail[:memo2] if detail.has_key?(:memo2)
88
+ params[:kari_flag] = detail[:capture] ? 2 : 1 if detail.has_key?(:capture)
86
89
 
87
90
  commit(PATHS[:registered_recurring], params)
88
91
  end
@@ -174,6 +177,7 @@ module ActiveMerchant #:nodoc:
174
177
  response_keys = [
175
178
  :transaction_code,
176
179
  :state,
180
+ :last_update,
177
181
  :payment_code,
178
182
  :item_price,
179
183
  :amount,
@@ -182,6 +186,15 @@ module ActiveMerchant #:nodoc:
182
186
  commit(PATHS[:find_order], params, response_keys)
183
187
  end
184
188
 
189
+ def capture(order_number)
190
+ params = {
191
+ contract_code: self.contract_code,
192
+ order_number: order_number,
193
+ }
194
+
195
+ commit(PATHS[:capture], params)
196
+ end
197
+
185
198
  private
186
199
 
187
200
  def billing_params(amount, payment_method, detail)
@@ -208,6 +221,7 @@ module ActiveMerchant #:nodoc:
208
221
 
209
222
  params[:memo1] = detail[:memo1] if detail.has_key?(:memo1)
210
223
  params[:memo2] = detail[:memo2] if detail.has_key?(:memo2)
224
+ params[:kari_flag] = detail[:capture] ? 2 : 1 if detail.has_key?(:capture)
211
225
 
212
226
  if detail.has_key?(:token)
213
227
  params[:token] = detail[:token]
@@ -49,7 +49,8 @@ module ActiveMerchant #:nodoc:
49
49
  :acs_url,
50
50
  :pa_req,
51
51
  :receipt_number,
52
- :receipt_date
52
+ :receipt_date,
53
+ :captured,
53
54
  ].freeze
54
55
 
55
56
  private
@@ -0,0 +1,55 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ class EpsilonLinkPaymentGateway < EpsilonBaseGateway
4
+
5
+ RESPONSE_KEYS = DEFAULT_RESPONSE_KEYS + [
6
+ :redirect,
7
+ ]
8
+
9
+ def purchase(amount, detail = {}, delivery_info_required = true)
10
+ params = {
11
+ contract_code: self.contract_code,
12
+ user_id: detail[:user_id],
13
+ user_name: detail[:user_name],
14
+ user_mail_add: detail[:user_email],
15
+ item_code: detail[:item_code],
16
+ item_name: detail[:item_name],
17
+ order_number: detail[:order_number],
18
+ st_code: detail[:st_code],
19
+ mission_code: EpsilonMissionCode::PURCHASE,
20
+ item_price: amount,
21
+ process_code: EpsilonProcessCode::FIRST,
22
+ xml: 1, # 応答形式。1: xml形式を固定
23
+ }
24
+
25
+ # 注文情報の詳細が必要な場合のみ、セットする
26
+ if delivery_info_required
27
+ params[:delivery_code] = 99 # 配送区分。99で固定
28
+ params[:consignee_postal] = detail[:consignee_postal]
29
+ params[:consignee_name] = detail[:consignee_name]
30
+ params[:consignee_address] = detail[:consignee_address]
31
+ params[:consignee_tel] = detail[:consignee_tel]
32
+ params[:orderer_postal] = detail[:orderer_postal]
33
+ params[:orderer_name] = detail[:orderer_name]
34
+ params[:orderer_address] = detail[:orderer_address]
35
+ params[:orderer_tel] = detail[:orderer_tel]
36
+ end
37
+
38
+ params[:memo1] = detail[:memo1] if detail.has_key?(:memo1)
39
+ params[:memo2] = detail[:memo2] if detail.has_key?(:memo2)
40
+ params[:user_tel] = detail[:user_tel] if detail.has_key?(:user_tel)
41
+
42
+ commit('receive_order3.cgi', params, RESPONSE_KEYS)
43
+ end
44
+
45
+ def void(order_number)
46
+ params = {
47
+ contract_code: self.contract_code,
48
+ order_number: order_number
49
+ }
50
+
51
+ commit('cancel_payment.cgi', params)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -107,6 +107,10 @@ module ActiveMerchant #:nodoc:
107
107
  @xml.xpath(ResponseXpath::STATE).to_s
108
108
  end
109
109
 
110
+ def last_update
111
+ @xml.xpath(ResponseXpath::LAST_UPDATE).to_s
112
+ end
113
+
110
114
  def payment_code
111
115
  @xml.xpath(ResponseXpath::PAYMENT_CODE).to_s
112
116
  end
@@ -123,6 +127,10 @@ module ActiveMerchant #:nodoc:
123
127
  uri_decode(@xml.xpath(ResponseXpath::REDIRECT).to_s)
124
128
  end
125
129
 
130
+ def captured
131
+ @xml.xpath(ResponseXpath::CAPTURED).to_s != '1'
132
+ end
133
+
126
134
  def uri_decode(string)
127
135
  CGI.unescape(string).encode(Encoding::UTF_8, Encoding::CP932)
128
136
  end
@@ -149,10 +157,12 @@ module ActiveMerchant #:nodoc:
149
157
  BRANCH_CODE = '//Epsilon_result/result[@branch_code][1]/@branch_code'
150
158
  BRANCH_NAME = '//Epsilon_result/result[@branch_name][1]/@branch_name'
151
159
  STATE = '//Epsilon_result/result[@state]/@state'
160
+ LAST_UPDATE = '//Epsilon_result/result[@last_update]/@last_update'
152
161
  ITEM_PRICE = '//Epsilon_result/result[@item_price]/@item_price'
153
162
  PAYMENT_CODE = '//Epsilon_result/result[@payment_code]/@payment_code'
154
163
  AMOUNT = '//Epsilon_result/result[@amount]/@amount'
155
164
  REDIRECT = '//Epsilon_result/result[@redirect]/@redirect'
165
+ CAPTURED = '//Epsilon_result/result[@kari_flag]/@kari_flag'
156
166
  end
157
167
 
158
168
  module ResultCode
@@ -10,5 +10,5 @@ require_relative 'billing/gateways/epsilon'
10
10
  require_relative 'billing/gateways/epsilon_convenience_store'
11
11
  require_relative 'billing/gateways/epsilon_gmo_id'
12
12
  require_relative 'billing/gateways/epsilon_virtual_account'
13
- require_relative 'billing/gateways/epsilon_gmo_after'
13
+ require_relative 'billing/gateways/epsilon_link_payment'
14
14
  require_relative 'billing/gateways/response_parser'
@@ -1,5 +1,5 @@
1
1
  module ActiveMerchant
2
2
  module Epsilon
3
- VERSION = "0.9.3"
3
+ VERSION = "0.13.0"
4
4
  end
5
5
  end
@@ -0,0 +1,45 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://beta.epsilon.jp/cgi-bin/order/sales_payment.cgi
6
+ body:
7
+ encoding: UTF-8
8
+ string: contract_code=[CONTRACT_CODE]&order_number=1234567890
9
+ headers:
10
+ Content-Type:
11
+ - application/x-www-form-urlencoded
12
+ Connection:
13
+ - close
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Date:
26
+ - Fri, 12 Jun 2020 11:00:12 GMT
27
+ Server:
28
+ - Apache
29
+ Connection:
30
+ - close
31
+ Transfer-Encoding:
32
+ - chunked
33
+ Content-Type:
34
+ - text/xml; charset=CP932
35
+ body:
36
+ encoding: UTF-8
37
+ string: |-
38
+ <?xml version="1.0" encoding="x-sjis-cp932"?>
39
+ <Epsilon_result>
40
+ <result err_code="810" />
41
+ <result err_detail="%91%CE%8F%DB%8E%E6%88%F8%82%CD%82%A0%82%E8%82%DC%82%B9%82%F1" />
42
+ <result result="9" />
43
+ </Epsilon_result>
44
+ recorded_at: Fri, 12 Jun 2020 11:00:14 GMT
45
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,45 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://beta.epsilon.jp/cgi-bin/order/sales_payment.cgi
6
+ body:
7
+ encoding: UTF-8
8
+ string: contract_code=[CONTRACT_CODE]&order_number=O14289569
9
+ headers:
10
+ Content-Type:
11
+ - application/x-www-form-urlencoded
12
+ Connection:
13
+ - close
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Date:
26
+ - Fri, 12 Jun 2020 11:00:16 GMT
27
+ Server:
28
+ - Apache
29
+ Connection:
30
+ - close
31
+ Transfer-Encoding:
32
+ - chunked
33
+ Content-Type:
34
+ - text/xml; charset=CP932
35
+ body:
36
+ encoding: UTF-8
37
+ string: |-
38
+ <?xml version="1.0" encoding="x-sjis-cp932"?>
39
+ <Epsilon_result>
40
+ <result err_code="" />
41
+ <result err_detail="" />
42
+ <result result="1" />
43
+ </Epsilon_result>
44
+ recorded_at: Fri, 12 Jun 2020 11:00:17 GMT
45
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,49 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://beta.epsilon.jp/cgi-bin/order/direct_card_payment.cgi
6
+ body:
7
+ encoding: UTF-8
8
+ string: contract_code=[CONTRACT_CODE]&user_id=U1591959614&user_name=YAMADA+Taro&user_mail_add=yamada-taro%40example.com&item_code=ITEM001&item_name=Greate+Product&order_number=O14289569&st_code=10000-0000-0000&mission_code=1&kari_flag=1&item_price=100&process_code=1&card_number=4242424242424242&expire_y=2021&expire_m=10&card_st_code=&pay_time=&tds_check_code=&user_agent=ActiveMerchant%3A%3AEpsilon-0.9.4&memo1=memo1&memo2=memo2
9
+ headers:
10
+ Content-Type:
11
+ - application/x-www-form-urlencoded
12
+ Connection:
13
+ - close
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Date:
26
+ - Fri, 12 Jun 2020 11:00:15 GMT
27
+ Server:
28
+ - Apache
29
+ Connection:
30
+ - close
31
+ Transfer-Encoding:
32
+ - chunked
33
+ Content-Type:
34
+ - text/xml; charset=CP932
35
+ body:
36
+ encoding: UTF-8
37
+ string: |-
38
+ <?xml version="1.0" encoding="x-sjis-cp932"?>
39
+ <Epsilon_result>
40
+ <result acsurl="" />
41
+ <result err_code="" />
42
+ <result err_detail="" />
43
+ <result kari_flag="1" />
44
+ <result pareq="" />
45
+ <result result="1" />
46
+ <result trans_code="1362118" />
47
+ </Epsilon_result>
48
+ recorded_at: Fri, 12 Jun 2020 11:00:16 GMT
49
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,44 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://beta.epsilon.jp/cgi-bin/order/receive_order3.cgi
6
+ body:
7
+ encoding: UTF-8
8
+ string: contract_code=[CONTRACT_CODE]&user_id=U1599198756&user_name=%E5%B1%B1%E7%94%B0+%E5%A4%AA%E9%83%8E&user_mail_add=yamada-taro%40example.com&item_code=ITEM001&item_name=Greate+Product&order_number=O36528472&st_code=00000-0000-01000-00000-00000-00000-00000&mission_code=1&item_price=10000&process_code=1&xml=1&memo1=memo1&memo2=memo2
9
+ headers:
10
+ Content-Type:
11
+ - application/x-www-form-urlencoded
12
+ Connection:
13
+ - close
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Date:
26
+ - Fri, 04 Sep 2020 05:52:36 GMT
27
+ Server:
28
+ - Apache
29
+ Connection:
30
+ - close
31
+ Transfer-Encoding:
32
+ - chunked
33
+ Content-Type:
34
+ - text/xml
35
+ body:
36
+ encoding: UTF-8
37
+ string: |
38
+ <?xml version="1.0" encoding="UTF-8" ?>
39
+ <Epsilon_result>
40
+ <result result="1" />
41
+ <result redirect="https%3A%2F%2Fbeta.epsilon.jp%2Fcgi-bin%2Forder%2Fmethod_select3.cgi%3Ftrans_code%3DRewAwZ7Jm3Y91" />
42
+ </Epsilon_result>
43
+ recorded_at: Fri, 04 Sep 2020 05:52:37 GMT
44
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,43 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://beta.epsilon.jp/cgi-bin/order/receive_order3.cgi
6
+ body:
7
+ encoding: UTF-8
8
+ string: contract_code=[CONTRACT_CODE]&user_id=U1594794779&user_name=%E5%B1%B1%E7%94%B0+%E5%A4%AA%E9%83%8E&user_mail_add=yamada-taro%40example.com&item_code=ITEM001&item_name=Greate+Product&order_number=O59578602&st_code=invalid_id&mission_code=1&item_price=10000&process_code=1&xml=1&delivery_code=99&consignee_postal=1000001&consignee_name=%E3%82%A4%E3%83%97%E3%82%B7%E3%83%AD%E3%83%B3%E3%82%BF%E3%83%AD%E3%82%A6&consignee_address=%E6%9D%B1%E4%BA%AC%E9%83%BD%E5%8D%83%E4%BB%A3%E7%94%B0%E5%8C%BA%E5%8D%83%E4%BB%A3%E7%94%B01%E7%95%AA1%E5%8F%B7&consignee_tel=0312345678&orderer_postal=1000001&orderer_name=YAMADA+Taro&orderer_address=%E6%9D%B1%E4%BA%AC%E9%83%BD%E5%8D%83%E4%BB%A3%E7%94%B0%E5%8C%BA%E5%8D%83%E4%BB%A3%E7%94%B01%E7%95%AA1%E5%8F%B7&orderer_tel=0312345678&memo1=memo1&memo2=memo2
9
+ headers:
10
+ Content-Type:
11
+ - application/x-www-form-urlencoded
12
+ Connection:
13
+ - close
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Date:
26
+ - Wed, 15 Jul 2020 06:32:59 GMT
27
+ Server:
28
+ - Apache
29
+ Connection:
30
+ - close
31
+ Transfer-Encoding:
32
+ - chunked
33
+ Content-Type:
34
+ - text/xml
35
+ body:
36
+ encoding: UTF-8
37
+ string: "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n <Epsilon_result>\r\n
38
+ \ <result result=\"0\" />\r\n <result err_code=\"601\" />\r\n <result
39
+ err_detail=\"%8C%88%8D%CF%83R%81%5B%83h%82%CC%8Ew%92%E8%82%AA%88%D9%8F%ED%82%C5%82%B7\"
40
+ />\r\n <result memo1=\"memo1\" />\r\n <result memo2=\"memo2\" />\r\n
41
+ \ </Epsilon_result>\r\n"
42
+ recorded_at: Wed, 15 Jul 2020 06:33:00 GMT
43
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,44 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://beta.epsilon.jp/cgi-bin/order/receive_order3.cgi
6
+ body:
7
+ encoding: UTF-8
8
+ string: contract_code=[CONTRACT_CODE]&user_id=U1599198757&user_name=%E5%B1%B1%E7%94%B0+%E5%A4%AA%E9%83%8E&user_mail_add=yamada-taro%40example.com&item_code=ITEM001&item_name=Greate+Product&order_number=O37739738&st_code=00000-0000-01000-00000-00000-00000-00000&mission_code=1&item_price=10000&process_code=1&xml=1&delivery_code=99&consignee_postal=1000001&consignee_name=%E3%82%A4%E3%83%97%E3%82%B7%E3%83%AD%E3%83%B3%E3%82%BF%E3%83%AD%E3%82%A6&consignee_address=%E6%9D%B1%E4%BA%AC%E9%83%BD%E5%8D%83%E4%BB%A3%E7%94%B0%E5%8C%BA%E5%8D%83%E4%BB%A3%E7%94%B01%E7%95%AA1%E5%8F%B7&consignee_tel=0312345678&orderer_postal=1000001&orderer_name=YAMADA+Taro&orderer_address=%E6%9D%B1%E4%BA%AC%E9%83%BD%E5%8D%83%E4%BB%A3%E7%94%B0%E5%8C%BA%E5%8D%83%E4%BB%A3%E7%94%B01%E7%95%AA1%E5%8F%B7&orderer_tel=0312345678&memo1=memo1&memo2=memo2
9
+ headers:
10
+ Content-Type:
11
+ - application/x-www-form-urlencoded
12
+ Connection:
13
+ - close
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Date:
26
+ - Fri, 04 Sep 2020 05:52:38 GMT
27
+ Server:
28
+ - Apache
29
+ Connection:
30
+ - close
31
+ Transfer-Encoding:
32
+ - chunked
33
+ Content-Type:
34
+ - text/xml
35
+ body:
36
+ encoding: UTF-8
37
+ string: |
38
+ <?xml version="1.0" encoding="UTF-8" ?>
39
+ <Epsilon_result>
40
+ <result result="1" />
41
+ <result redirect="https%3A%2F%2Fbeta.epsilon.jp%2Fcgi-bin%2Forder%2Fmethod_select3.cgi%3Ftrans_code%3DIOnPh3Psm7k86" />
42
+ </Epsilon_result>
43
+ recorded_at: Fri, 04 Sep 2020 05:52:38 GMT
44
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,45 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://beta.epsilon.jp/cgi-bin/order/cancel_payment.cgi
6
+ body:
7
+ encoding: UTF-8
8
+ string: contract_code=&order_number=invalid_order_number
9
+ headers:
10
+ Content-Type:
11
+ - application/x-www-form-urlencoded
12
+ Connection:
13
+ - close
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Date:
26
+ - Mon, 20 Jul 2020 02:48:28 GMT
27
+ Server:
28
+ - Apache
29
+ Connection:
30
+ - close
31
+ Transfer-Encoding:
32
+ - chunked
33
+ Content-Type:
34
+ - text/xml; charset=CP932
35
+ body:
36
+ encoding: UTF-8
37
+ string: |-
38
+ <?xml version="1.0" encoding="x-sjis-cp932"?>
39
+ <Epsilon_result>
40
+ <result err_code="607" />
41
+ <result err_detail="%8C_%96%F1%83R%81%5B%83h%8C%60%8E%AE%83G%83%89%81%5B" />
42
+ <result result="9" />
43
+ </Epsilon_result>
44
+ recorded_at: Mon, 20 Jul 2020 02:48:29 GMT
45
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,45 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://beta.epsilon.jp/cgi-bin/order/cancel_payment.cgi
6
+ body:
7
+ encoding: UTF-8
8
+ string: contract_code=[CONTRACT_CODE]&order_number=595213151
9
+ headers:
10
+ Content-Type:
11
+ - application/x-www-form-urlencoded
12
+ Connection:
13
+ - close
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Date:
26
+ - Mon, 20 Jul 2020 02:56:42 GMT
27
+ Server:
28
+ - Apache
29
+ Connection:
30
+ - close
31
+ Transfer-Encoding:
32
+ - chunked
33
+ Content-Type:
34
+ - text/xml; charset=CP932
35
+ body:
36
+ encoding: UTF-8
37
+ string: |-
38
+ <?xml version="1.0" encoding="x-sjis-cp932"?>
39
+ <Epsilon_result>
40
+ <result err_code="" />
41
+ <result err_detail="" />
42
+ <result result="1" />
43
+ </Epsilon_result>
44
+ recorded_at: Mon, 20 Jul 2020 02:56:43 GMT
45
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,49 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://beta.epsilon.jp/cgi-bin/order/direct_card_payment.cgi
6
+ body:
7
+ encoding: UTF-8
8
+ string: contract_code=[CONTRACT_CODE]&user_id=U1591960355&user_name=YAMADA+Taro&user_mail_add=yamada-taro%40example.com&item_code=ITEM001&item_name=Greate+Product&order_number=O35284193&st_code=10000-0000-0000&mission_code=1&item_price=1000&process_code=1&card_number=4242424242424242&expire_y=2021&expire_m=10&card_st_code=&pay_time=&tds_check_code=&user_agent=ActiveMerchant%3A%3AEpsilon-0.9.4&memo1=memo1&memo2=memo2&kari_flag=1
9
+ headers:
10
+ Content-Type:
11
+ - application/x-www-form-urlencoded
12
+ Connection:
13
+ - close
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Date:
26
+ - Fri, 12 Jun 2020 11:12:35 GMT
27
+ Server:
28
+ - Apache
29
+ Connection:
30
+ - close
31
+ Transfer-Encoding:
32
+ - chunked
33
+ Content-Type:
34
+ - text/xml; charset=CP932
35
+ body:
36
+ encoding: UTF-8
37
+ string: |-
38
+ <?xml version="1.0" encoding="x-sjis-cp932"?>
39
+ <Epsilon_result>
40
+ <result acsurl="" />
41
+ <result err_code="" />
42
+ <result err_detail="" />
43
+ <result kari_flag="1" />
44
+ <result pareq="" />
45
+ <result result="1" />
46
+ <result trans_code="1362123" />
47
+ </Epsilon_result>
48
+ recorded_at: Fri, 12 Jun 2020 11:12:37 GMT
49
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,49 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://beta.epsilon.jp/cgi-bin/order/direct_card_payment.cgi
6
+ body:
7
+ encoding: UTF-8
8
+ string: contract_code=[CONTRACT_CODE]&user_id=U1591960357&user_name=YAMADA+Taro&user_mail_add=yamada-taro%40example.com&item_code=ITEM001&item_name=Greate+Product&order_number=O37368550&st_code=10000-0000-0000&mission_code=1&item_price=1000&process_code=1&card_number=4242424242424242&expire_y=2021&expire_m=10&card_st_code=&pay_time=&tds_check_code=&user_agent=ActiveMerchant%3A%3AEpsilon-0.9.4&memo1=memo1&memo2=memo2&kari_flag=2
9
+ headers:
10
+ Content-Type:
11
+ - application/x-www-form-urlencoded
12
+ Connection:
13
+ - close
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Date:
26
+ - Fri, 12 Jun 2020 11:12:37 GMT
27
+ Server:
28
+ - Apache
29
+ Connection:
30
+ - close
31
+ Transfer-Encoding:
32
+ - chunked
33
+ Content-Type:
34
+ - text/xml; charset=CP932
35
+ body:
36
+ encoding: UTF-8
37
+ string: |-
38
+ <?xml version="1.0" encoding="x-sjis-cp932"?>
39
+ <Epsilon_result>
40
+ <result acsurl="" />
41
+ <result err_code="" />
42
+ <result err_detail="" />
43
+ <result kari_flag="0" />
44
+ <result pareq="" />
45
+ <result result="1" />
46
+ <result trans_code="1362124" />
47
+ </Epsilon_result>
48
+ recorded_at: Fri, 12 Jun 2020 11:12:39 GMT
49
+ recorded_with: VCR 6.0.0
@@ -12,11 +12,11 @@ class RemoteEpsilonConvenienceStoreGatewayTest < MiniTest::Test
12
12
  response = gateway.purchase(10000, valid_convenience_store, purchase_detail)
13
13
 
14
14
  assert_equal true, response.success?
15
- assert_match /\d{7}/, response.params['receipt_number']
16
- assert_match /\d{4}\-\d{2}\-\d{2} \d{2}:\d{2}:\d{2}/, response.params['receipt_date']
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']
19
- assert_match /\d{5}/, response.params['company_code']
15
+ assert_match(/\d{7}/, response.params['receipt_number'])
16
+ assert_match(/\d{4}\-\d{2}\-\d{2} \d{2}:\d{2}:\d{2}/, response.params['receipt_date'])
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'])
19
+ assert_match(/\d{5}/, response.params['company_code'])
20
20
  end
21
21
  end
22
22
 
@@ -0,0 +1,55 @@
1
+ require 'test_helper'
2
+ class RemoteEpsilonLinkPaymentTest < MiniTest::Test
3
+ include SamplePaymentMethods
4
+
5
+ def gateway
6
+ @gateway ||= ActiveMerchant::Billing::EpsilonLinkPaymentGateway.new
7
+ end
8
+
9
+ def test_epsilon_link_type_purchase_successful
10
+ VCR.use_cassette(:epsilon_link_type_purchase_successful) do
11
+ response = gateway.purchase(10000, valid_epsilon_link_type_purchase_detail)
12
+
13
+ assert_equal true, response.success?
14
+ assert_equal true, !response.params['redirect'].empty?
15
+ end
16
+ end
17
+
18
+ def test_epsilon_link_type_not_sending_delivery_information_purchase_successful
19
+ VCR.use_cassette(:epsilon_link_type_not_sending_delivery_information_purchase_successful) do
20
+ response = gateway.purchase(10000, valid_epsilon_link_type_not_sending_delivery_information_purchase_detail, false)
21
+
22
+ assert_equal true, response.success?
23
+ assert_equal true, !response.params['redirect'].empty?
24
+ end
25
+ end
26
+
27
+ def test_epsilon_link_type_purchase_fail
28
+ VCR.use_cassette(:epsilon_link_type_purchase_fail) do
29
+ response = gateway.purchase(10000, invalid_epsilon_link_type_purchase_detail)
30
+
31
+ assert_equal false, response.success?
32
+ assert_equal true, response.params["error_detail"].valid_encoding?
33
+ end
34
+ end
35
+
36
+ def test_epsilon_link_type_void_successfull
37
+ VCR.use_cassette(:epsilon_link_type_void_successfull) do
38
+ # あらかじめ課金済ステータスの受注がイプシロン側にないと取り消しができないため、課金済の受注をイプシロン側で作成しておいた。
39
+ # ここでは void の引数として作成済の受注のorder_numberを渡している。
40
+ # VCRのキャッシュを作成し直す場合は変更しないとエラーとなる。
41
+ response = gateway.void('595213151')
42
+
43
+ assert_equal true, response.success?
44
+ end
45
+ end
46
+
47
+ def test_epsilon_link_type_void_fail
48
+ VCR.use_cassette(:epsilon_link_type_void_fail) do
49
+ response = gateway.void('invalid_order_number')
50
+
51
+ assert_equal false, response.success?
52
+ assert_equal true, response.params["error_detail"].valid_encoding?
53
+ end
54
+ end
55
+ end
@@ -62,13 +62,34 @@ class RemoteEpsilonGatewayTest < MiniTest::Test
62
62
 
63
63
  assert_equal true, response.success?
64
64
  assert_equal true, response.params['three_d_secure']
65
- assert_match /\Ahttps?/, response.params['acs_url']
65
+ assert_match(/\Ahttps?/, response.params['acs_url'])
66
66
  refute_empty response.params['pa_req']
67
67
  end
68
68
 
69
69
  VCR.use_cassette(:autheticate_three_d_secure_card_successful) do
70
- response = gateway.authenticate(valid_three_d_secure_pa_res)
70
+ response = gateway.authenticate(
71
+ order_number: purchase_detail[:order_number],
72
+ three_d_secure_pa_res: valid_three_d_secure_pa_res
73
+ )
74
+ assert_equal true, response.success?
75
+ end
76
+ end
77
+
78
+ def test_purchase_with_capture_true_successful
79
+ VCR.use_cassette(:purchase_with_capture_true_successful) do
80
+ response = gateway.purchase(1000, valid_credit_card, purchase_detail.merge(capture: true))
81
+
71
82
  assert_equal true, response.success?
83
+ assert_equal true, response.params['captured']
84
+ end
85
+ end
86
+
87
+ def test_purchase_with_capture_false_successful
88
+ VCR.use_cassette(:purchase_with_capture_false_successful) do
89
+ response = gateway.purchase(1000, valid_credit_card, purchase_detail.merge(capture: false))
90
+
91
+ assert_equal true, response.success?
92
+ assert_equal false, response.params['captured']
72
93
  end
73
94
  end
74
95
 
@@ -275,6 +296,7 @@ class RemoteEpsilonGatewayTest < MiniTest::Test
275
296
  assert_equal true, response.success?
276
297
 
277
298
  assert_equal true, !response.params['state'].empty?
299
+ assert_equal true, !response.params['last_update'].empty?
278
300
  assert_equal true, !response.params['payment_code'].empty?
279
301
  assert_equal true, !response.params['item_price'].empty?
280
302
  end
@@ -286,4 +308,27 @@ class RemoteEpsilonGatewayTest < MiniTest::Test
286
308
  assert_equal false, response.success?
287
309
  end
288
310
  end
311
+
312
+ def test_capture_success
313
+ detail = purchase_detail
314
+
315
+ VCR.use_cassette(:capture_success_authorize) do
316
+ purchase_response = gateway.purchase(100, valid_credit_card, detail.merge(capture: false))
317
+
318
+ assert_equal true, purchase_response.success?
319
+ assert_equal false, purchase_response.params['captured']
320
+ end
321
+
322
+ VCR.use_cassette(:capture_success) do
323
+ response = gateway.capture(detail[:order_number])
324
+ assert_equal true, response.success?
325
+ end
326
+ end
327
+
328
+ def test_capture_failure
329
+ VCR.use_cassette(:capture_failure) do
330
+ response = gateway.capture('1234567890')
331
+ assert_equal false, response.success?
332
+ end
333
+ end
289
334
  end
@@ -216,6 +216,7 @@ module SamplePaymentMethods
216
216
  item_code: 'ITEM001',
217
217
  item_name: 'Greate Product',
218
218
  order_number: "O#{now.sec}#{now.usec}",
219
+ st_code: '00000-0000-00000-00010-00000-00000-00000',
219
220
  memo1: 'memo1',
220
221
  memo2: 'memo2',
221
222
  consignee_postal: '1000001',
@@ -229,6 +230,67 @@ module SamplePaymentMethods
229
230
  }
230
231
  end
231
232
 
233
+ def valid_epsilon_link_type_purchase_detail
234
+ now = Time.now
235
+ {
236
+ user_id: "U#{Time.now.to_i}",
237
+ user_name: '山田 太郎',
238
+ user_email: 'yamada-taro@example.com',
239
+ item_code: 'ITEM001',
240
+ item_name: 'Greate Product',
241
+ order_number: "O#{now.sec}#{now.usec}",
242
+ st_code: '00000-0000-01000-00000-00000-00000-00000',
243
+ memo1: 'memo1',
244
+ memo2: 'memo2',
245
+ consignee_postal: '1000001',
246
+ consignee_name: 'イプシロンタロウ',
247
+ consignee_address: '東京都千代田区千代田1番1号',
248
+ consignee_tel: '0312345678',
249
+ orderer_postal: '1000001',
250
+ orderer_name: 'YAMADA Taro',
251
+ orderer_address: '東京都千代田区千代田1番1号',
252
+ orderer_tel: '0312345678',
253
+ }
254
+ end
255
+
256
+ def valid_epsilon_link_type_not_sending_delivery_information_purchase_detail
257
+ now = Time.now
258
+ {
259
+ user_id: "U#{Time.now.to_i}",
260
+ user_name: '山田 太郎',
261
+ user_email: 'yamada-taro@example.com',
262
+ item_code: 'ITEM001',
263
+ item_name: 'Greate Product',
264
+ order_number: "O#{now.sec}#{now.usec}",
265
+ st_code: '00000-0000-01000-00000-00000-00000-00000',
266
+ memo1: 'memo1',
267
+ memo2: 'memo2',
268
+ }
269
+ end
270
+
271
+ def invalid_epsilon_link_type_purchase_detail
272
+ now = Time.now
273
+ {
274
+ user_id: "U#{Time.now.to_i}",
275
+ user_name: '山田 太郎',
276
+ user_email: 'yamada-taro@example.com',
277
+ item_code: 'ITEM001',
278
+ item_name: 'Greate Product',
279
+ order_number: "O#{now.sec}#{now.usec}",
280
+ st_code: 'invalid_id',
281
+ memo1: 'memo1',
282
+ memo2: 'memo2',
283
+ consignee_postal: '1000001',
284
+ consignee_name: 'イプシロンタロウ',
285
+ consignee_address: '東京都千代田区千代田1番1号',
286
+ consignee_tel: '0312345678',
287
+ orderer_postal: '1000001',
288
+ orderer_name: 'YAMADA Taro',
289
+ orderer_address: '東京都千代田区千代田1番1号',
290
+ orderer_tel: '0312345678',
291
+ }
292
+ end
293
+
232
294
  def fixture_xml(filename, parse: true)
233
295
  xml = File.read("test/fixtures/#{filename}")
234
296
  parse ? Nokogiri.parse(xml.sub('x-sjis-cp932', 'CP932')) : xml
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.9.3
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenichi TAKAHASHI
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-23 00:00:00.000000000 Z
11
+ date: 2021-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemerchant
@@ -158,8 +158,8 @@ extensions: []
158
158
  extra_rdoc_files: []
159
159
  files:
160
160
  - ".env.sample"
161
+ - ".github/workflows/test.yml"
161
162
  - ".gitignore"
162
- - ".travis.yml"
163
163
  - CHANGELOG.md
164
164
  - Gemfile
165
165
  - LICENSE.txt
@@ -172,8 +172,8 @@ files:
172
172
  - lib/active_merchant/billing/gateways/epsilon/epsilon_mission_code.rb
173
173
  - lib/active_merchant/billing/gateways/epsilon/epsilon_process_code.rb
174
174
  - lib/active_merchant/billing/gateways/epsilon_convenience_store.rb
175
- - lib/active_merchant/billing/gateways/epsilon_gmo_after.rb
176
175
  - lib/active_merchant/billing/gateways/epsilon_gmo_id.rb
176
+ - lib/active_merchant/billing/gateways/epsilon_link_payment.rb
177
177
  - lib/active_merchant/billing/gateways/epsilon_virtual_account.rb
178
178
  - lib/active_merchant/billing/gateways/response_parser.rb
179
179
  - lib/active_merchant/epsilon.rb
@@ -181,10 +181,18 @@ files:
181
181
  - test/fixtures/vcr_cassettes/autheticate_three_d_secure_card_successful.yml
182
182
  - test/fixtures/vcr_cassettes/cancel_recurring_fail.yml
183
183
  - test/fixtures/vcr_cassettes/cancel_recurring_successful.yml
184
+ - test/fixtures/vcr_cassettes/capture_failure.yml
185
+ - test/fixtures/vcr_cassettes/capture_success.yml
186
+ - test/fixtures/vcr_cassettes/capture_success_authorize.yml
184
187
  - test/fixtures/vcr_cassettes/change_recurring_amount_failure.yml
185
188
  - test/fixtures/vcr_cassettes/change_recurring_amount_successful.yml
186
189
  - test/fixtures/vcr_cassettes/convenience_store_purchase_fail.yml
187
190
  - test/fixtures/vcr_cassettes/convenience_store_purchase_successful.yml
191
+ - test/fixtures/vcr_cassettes/epsilon_link_type_not_sending_delivery_information_purchase_successful.yml
192
+ - test/fixtures/vcr_cassettes/epsilon_link_type_purchase_fail.yml
193
+ - test/fixtures/vcr_cassettes/epsilon_link_type_purchase_successful.yml
194
+ - test/fixtures/vcr_cassettes/epsilon_link_type_void_fail.yml
195
+ - test/fixtures/vcr_cassettes/epsilon_link_type_void_successfull.yml
188
196
  - test/fixtures/vcr_cassettes/find_order_failure.yml
189
197
  - test/fixtures/vcr_cassettes/find_order_success.yml
190
198
  - test/fixtures/vcr_cassettes/find_user_failure.yml
@@ -198,6 +206,8 @@ files:
198
206
  - test/fixtures/vcr_cassettes/installment_purchase_successful.yml
199
207
  - test/fixtures/vcr_cassettes/purchase_fail.yml
200
208
  - test/fixtures/vcr_cassettes/purchase_successful.yml
209
+ - test/fixtures/vcr_cassettes/purchase_with_capture_false_successful.yml
210
+ - test/fixtures/vcr_cassettes/purchase_with_capture_true_successful.yml
201
211
  - test/fixtures/vcr_cassettes/purchase_with_three_d_secure_card_successful.yml
202
212
  - test/fixtures/vcr_cassettes/purchase_with_verification_value.yml
203
213
  - test/fixtures/vcr_cassettes/recurring_fail.yml
@@ -218,8 +228,8 @@ files:
218
228
  - test/fixtures/vcr_cassettes/void_fail.yml
219
229
  - test/fixtures/vcr_cassettes/void_successful.yml
220
230
  - test/remote/gateways/remote_epsilon_convenience_store_test.rb
221
- - test/remote/gateways/remote_epsilon_gmo_after_test.rb
222
231
  - test/remote/gateways/remote_epsilon_gmo_id_test.rb
232
+ - test/remote/gateways/remote_epsilon_link_payment_test.rb
223
233
  - test/remote/gateways/remote_epsilon_test.rb
224
234
  - test/remote/gateways/remote_epsilon_virtual_account_test.rb
225
235
  - test/test_helper.rb
@@ -229,7 +239,7 @@ homepage: http://github.com/pepabo/active_merchant-epsilon
229
239
  licenses:
230
240
  - MIT
231
241
  metadata: {}
232
- post_install_message:
242
+ post_install_message:
233
243
  rdoc_options: []
234
244
  require_paths:
235
245
  - lib
@@ -244,18 +254,26 @@ required_rubygems_version: !ruby/object:Gem::Requirement
244
254
  - !ruby/object:Gem::Version
245
255
  version: '0'
246
256
  requirements: []
247
- rubygems_version: 3.0.3
248
- signing_key:
257
+ rubygems_version: 3.2.3
258
+ signing_key:
249
259
  specification_version: 4
250
260
  summary: Epsilon integration for ActiveMerchant.
251
261
  test_files:
252
262
  - test/fixtures/vcr_cassettes/autheticate_three_d_secure_card_successful.yml
253
263
  - test/fixtures/vcr_cassettes/cancel_recurring_fail.yml
254
264
  - test/fixtures/vcr_cassettes/cancel_recurring_successful.yml
265
+ - test/fixtures/vcr_cassettes/capture_failure.yml
266
+ - test/fixtures/vcr_cassettes/capture_success.yml
267
+ - test/fixtures/vcr_cassettes/capture_success_authorize.yml
255
268
  - test/fixtures/vcr_cassettes/change_recurring_amount_failure.yml
256
269
  - test/fixtures/vcr_cassettes/change_recurring_amount_successful.yml
257
270
  - test/fixtures/vcr_cassettes/convenience_store_purchase_fail.yml
258
271
  - test/fixtures/vcr_cassettes/convenience_store_purchase_successful.yml
272
+ - test/fixtures/vcr_cassettes/epsilon_link_type_not_sending_delivery_information_purchase_successful.yml
273
+ - test/fixtures/vcr_cassettes/epsilon_link_type_purchase_fail.yml
274
+ - test/fixtures/vcr_cassettes/epsilon_link_type_purchase_successful.yml
275
+ - test/fixtures/vcr_cassettes/epsilon_link_type_void_fail.yml
276
+ - test/fixtures/vcr_cassettes/epsilon_link_type_void_successfull.yml
259
277
  - test/fixtures/vcr_cassettes/find_order_failure.yml
260
278
  - test/fixtures/vcr_cassettes/find_order_success.yml
261
279
  - test/fixtures/vcr_cassettes/find_user_failure.yml
@@ -269,6 +287,8 @@ test_files:
269
287
  - test/fixtures/vcr_cassettes/installment_purchase_successful.yml
270
288
  - test/fixtures/vcr_cassettes/purchase_fail.yml
271
289
  - test/fixtures/vcr_cassettes/purchase_successful.yml
290
+ - test/fixtures/vcr_cassettes/purchase_with_capture_false_successful.yml
291
+ - test/fixtures/vcr_cassettes/purchase_with_capture_true_successful.yml
272
292
  - test/fixtures/vcr_cassettes/purchase_with_three_d_secure_card_successful.yml
273
293
  - test/fixtures/vcr_cassettes/purchase_with_verification_value.yml
274
294
  - test/fixtures/vcr_cassettes/recurring_fail.yml
@@ -289,8 +309,8 @@ test_files:
289
309
  - test/fixtures/vcr_cassettes/void_fail.yml
290
310
  - test/fixtures/vcr_cassettes/void_successful.yml
291
311
  - test/remote/gateways/remote_epsilon_convenience_store_test.rb
292
- - test/remote/gateways/remote_epsilon_gmo_after_test.rb
293
312
  - test/remote/gateways/remote_epsilon_gmo_id_test.rb
313
+ - test/remote/gateways/remote_epsilon_link_payment_test.rb
294
314
  - test/remote/gateways/remote_epsilon_test.rb
295
315
  - test/remote/gateways/remote_epsilon_virtual_account_test.rb
296
316
  - test/test_helper.rb
@@ -1,13 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.3.8
4
- - 2.4.5
5
- - 2.5.3
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=
@@ -1,42 +0,0 @@
1
- module ActiveMerchant #:nodoc:
2
- module Billing #:nodoc:
3
- class EpsilonGmoAfterGateway < EpsilonBaseGateway
4
-
5
- RESPONSE_KEYS = DEFAULT_RESPONSE_KEYS + [
6
- :redirect,
7
- ]
8
-
9
- def purchase(amount, detail = {})
10
- params = {
11
- contract_code: self.contract_code,
12
- user_id: detail[:user_id],
13
- user_name: detail[:user_name],
14
- user_mail_add: detail[:user_email],
15
- item_code: detail[:item_code],
16
- item_name: detail[:item_name],
17
- order_number: detail[:order_number],
18
- st_code: '00000-0000-00000-00010-00000-00000-00000',
19
- mission_code: EpsilonMissionCode::PURCHASE,
20
- item_price: amount,
21
- process_code: EpsilonProcessCode::FIRST,
22
- xml: 1, # 応答形式。1: xml形式を固定
23
- delivery_code: 99, # 配送区分。99で固定
24
- consignee_postal: detail[:consignee_postal],
25
- consignee_name: detail[:consignee_name],
26
- consignee_address: detail[:consignee_address],
27
- consignee_tel: detail[:consignee_tel],
28
- orderer_postal: detail[:orderer_postal],
29
- orderer_name: detail[:orderer_name],
30
- orderer_address: detail[:orderer_address],
31
- orderer_tel: detail[:orderer_tel],
32
- }
33
-
34
- params[:memo1] = detail[:memo1] if detail.has_key?(:memo1)
35
- params[:memo2] = detail[:memo2] if detail.has_key?(:memo2)
36
- params[:user_tel] = detail[:user_tel] if detail.has_key?(:user_tel)
37
-
38
- commit('receive_order3.cgi', params, RESPONSE_KEYS)
39
- end
40
- end
41
- end
42
- end
@@ -1,30 +0,0 @@
1
- require 'test_helper'
2
-
3
- class RemoteEpsilonGmoAfterGatewayTest < MiniTest::Test
4
- include SamplePaymentMethods
5
-
6
- def gateway
7
- @gateway ||= ActiveMerchant::Billing::EpsilonGmoAfterGateway.new
8
- end
9
-
10
- def test_gmo_after_purchase_successfull
11
- VCR.use_cassette(:gmo_after_purchase_successful) do
12
- response = gateway.purchase(10000, gmo_after_purchase_detail)
13
-
14
- assert_equal true, response.success?
15
- assert_equal true, !response.params['redirect'].empty?
16
- end
17
- end
18
-
19
- def test_gmo_after_purchase_fail
20
- invalid_purchase_detail = gmo_after_purchase_detail
21
- invalid_purchase_detail[:user_id] = ''
22
-
23
- VCR.use_cassette(:gmo_after_purchase_fail) do
24
- response = gateway.purchase(10000, invalid_purchase_detail)
25
-
26
- assert_equal false, response.success?
27
- assert_equal true, response.params["error_detail"].valid_encoding?
28
- end
29
- end
30
- end