gmo 0.2.4 → 0.5.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.
Files changed (53) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +9 -4
  3. data/CHANGELOG.md +42 -1
  4. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_cancel_deposit_gets_data_about_a_deposit.yml +38 -0
  5. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_cancel_mail_deposit_gets_data_about_a_mail_deposit.yml +38 -0
  6. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_create_account_gets_data_about_an_account.yml +38 -0
  7. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_create_deposit_gets_data_about_a_deposit.yml +38 -0
  8. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_create_mail_deposit_gets_data_about_a_mail_deposit.yml +38 -0
  9. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_delete_account_gets_data_about_an_account.yml +38 -0
  10. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_search_account_gets_data_about_an_account.yml +38 -0
  11. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_search_balance_gets_data_about_balance.yml +38 -0
  12. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_search_deposit_gets_data_about_a_deposit.yml +38 -0
  13. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_search_mail_deposit_gets_data_about_a_mail_deposit.yml +38 -0
  14. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_update_account_gets_data_about_an_account.yml +38 -0
  15. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_change_tran_brandtoken_gets_data_about_order.yml +108 -0
  16. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_cvs_cancel_gets_data_about_a_transaction.yml +63 -0
  17. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_entry_tran_brandtoken_gets_data_about_a_transaction.yml +38 -0
  18. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_entry_tran_linepay_gets_data_about_a_transaction.yml +36 -0
  19. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_entry_tran_pay_easy_gets_data_about_a_transaction.yml +36 -0
  20. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_exec_tran_brandtoken_gets_data_about_a_transaction.yml +73 -0
  21. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_exec_tran_brandtoken_parameter_contains_Japanese_characters_should_correctly_handle_Japanese.yml +73 -0
  22. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_exec_tran_doesn_t_require_card_info_if_token_is_present.yml +69 -0
  23. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_exec_tran_linepay_gets_data_about_a_transaction.yml +69 -0
  24. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_exec_tran_pay_easy_gets_data_about_a_transaction.yml +69 -0
  25. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_refund_tran_brandtoken_gets_data_about_a_transaction.yml +108 -0
  26. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_sales_tran_brandtoken_gets_data_about_a_transaction.yml +143 -0
  27. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_void_tran_brandtoken_gets_data_about_order.yml +108 -0
  28. data/fixtures/vcr_cassettes/GMO_Payment_ShopAndSiteAPI/_exec_tran_brandtoken_got_data.yml +73 -0
  29. data/fixtures/vcr_cassettes/GMO_Payment_ShopAndSiteAPI/_trade_brandtoken_got_data.yml +108 -0
  30. data/fixtures/vcr_cassettes/GMO_Payment_SiteAPI/_delete_brandtoken_gets_data_about_a_brandtoken.yml +73 -0
  31. data/fixtures/vcr_cassettes/GMO_Payment_SiteAPI/_save_card_doesn_t_require_card_info_if_token_is_present.yml +36 -0
  32. data/fixtures/vcr_cassettes/GMO_Payment_SiteAPI/_search_brandtoken_gets_data_about_a_brandtoken.yml +74 -0
  33. data/fixtures/vcr_cassettes/GMO_Payment_SiteAPI/_search_card_detail_by_member_id_gets_data_about_card_detail.yml +36 -0
  34. data/gmo.gemspec +2 -2
  35. data/lib/gmo.rb +6 -1
  36. data/lib/gmo/const.rb +2297 -3
  37. data/lib/gmo/errors.rb +22 -4
  38. data/lib/gmo/http_services.rb +5 -5
  39. data/lib/gmo/remittance_api.rb +331 -0
  40. data/lib/gmo/shop_and_site_api.rb +79 -5
  41. data/lib/gmo/shop_api.rb +282 -10
  42. data/lib/gmo/site_api.rb +77 -7
  43. data/lib/gmo/version.rb +2 -2
  44. data/spec/gmo/{error_spec.rb → errors_spec.rb} +11 -2
  45. data/spec/gmo/remittance_api_spec.rb +506 -0
  46. data/spec/gmo/shop_and_site_api_spec.rb +87 -7
  47. data/spec/gmo/shop_api_spec.rb +509 -99
  48. data/spec/gmo/site_api_spec.rb +120 -23
  49. data/spec/support/config.example.yml +8 -1
  50. data/spec/support/config.yml +8 -1
  51. data/spec/support/config_loader.rb +1 -1
  52. data/spec/support/vcr.rb +12 -3
  53. metadata +40 -9
@@ -6,7 +6,9 @@
6
6
  # gmo = GMO::Payment::ShopAPI.new({
7
7
  # shop_id: "foo",
8
8
  # shop_pass: "bar",
9
- # host: "mul-pay.com"
9
+ # host: "mul-pay.com",
10
+ # locale: "ja"
11
+
10
12
  # })
11
13
  # result = gmo.post_request("EntryTran.idPass", options)
12
14
  module GMO
@@ -18,11 +20,12 @@ module GMO
18
20
  @shop_id = options[:shop_id]
19
21
  @shop_pass = options[:shop_pass]
20
22
  @host = options[:host]
23
+ @locale = options.fetch(:locale, GMO::Const::DEFAULT_LOCALE)
21
24
  unless @shop_id && @shop_pass && @host
22
25
  raise ArgumentError, "Initialize must receive a hash with :shop_id, :shop_pass and either :host! (received #{options.inspect})"
23
26
  end
24
27
  end
25
- attr_reader :shop_id, :shop_pass, :host
28
+ attr_reader :shop_id, :shop_pass, :host, :locale
26
29
 
27
30
  ## 2.1.2.1.取引登録
28
31
  # これ以降の決済取引で必要となる取引 ID と取引パスワードの発行を行い、取引を開始します。
@@ -50,7 +53,6 @@ module GMO
50
53
  post_request name, options
51
54
  end
52
55
 
53
-
54
56
  # 【コンビニ払い】
55
57
  # 2.1.2.1. 取引登録
56
58
  # これ以降の決済取引で必要となる取引IDと取引パスワードの発行を行い、取引を開始します。
@@ -61,6 +63,51 @@ module GMO
61
63
  post_request name, options
62
64
  end
63
65
 
66
+ # 【Pay-easy決済】
67
+ # 5.1.2.1. 取引登録
68
+ # これ以降の決済取引で必要となる取引IDと取引パスワードの発行を行い、取引を開始します。
69
+ def entry_tran_pay_easy(options = {})
70
+ name = "EntryTranPayEasy.idPass"
71
+ required = [:order_id, :amount]
72
+ assert_required_options(required, options)
73
+ post_request name, options
74
+ end
75
+
76
+ # 【LINE Pay決済】
77
+ # 20.1.2.1. 取引登録
78
+ # これ以降の決済取引で必要となる取引IDと取引パスワードの発行を行い、取引を開始します。
79
+ def entry_tran_linepay(options = {})
80
+ name = "EntryTranLinepay.idPass"
81
+ required = [:order_id, :job_cd, :amount]
82
+ assert_required_options(required, options)
83
+ post_request name, options
84
+ end
85
+
86
+ ### @params ###
87
+ # OrderID
88
+ # JobCd
89
+ # Amount
90
+ # ItemCode
91
+ # Tax
92
+ ### @return ###
93
+ # AccessID
94
+ # AccessPass
95
+ ### example ###
96
+ # gmo.entry_tran_brandtoken({
97
+ # order_id: "ord12345",
98
+ # job_cd: "AUTH",
99
+ # item_code: "1000001",
100
+ # tax: "0001001",
101
+ # amount: 100
102
+ # })
103
+ # => {"AccessID"=>"139f8ec33a07c55f406937c52ce4473d", "AccessPass"=>"2689b204d2c17192fa35f9269fa7e744"}
104
+ def entry_tran_brandtoken(options = {})
105
+ name = "EntryTranBrandtoken.idPass"
106
+ required = [:order_id, :job_cd, :amount]
107
+ assert_required_options(required, options)
108
+ post_request name, options
109
+ end
110
+
64
111
  ## 2.2.2.2.決済実行
65
112
  # 指定されたサイトに会員を登録します。
66
113
  # return
@@ -125,7 +172,11 @@ module GMO
125
172
  # "ClientField3" => options[:client_field_3],
126
173
  # "ClientFieldFlag" => client_field_flg
127
174
  # }
128
- required = [:access_id, :access_pass, :order_id, :card_no, :expire]
175
+ if options[:token].nil?
176
+ required = [:access_id, :access_pass, :order_id, :card_no, :expire]
177
+ else
178
+ required = [:access_id, :access_pass, :token]
179
+ end
129
180
  assert_required_options(required, options)
130
181
  post_request name, options
131
182
  end
@@ -135,7 +186,70 @@ module GMO
135
186
  # お客様が入力した情報で後続の決済センターと通信を行い決済を実施し、結果を返します。
136
187
  def exec_tran_cvs(options = {})
137
188
  name = "ExecTranCvs.idPass"
138
- required = [:access_id, :access_pass, :order_id, :convenience, :customer_name, :tel_no, :receipts_disp_11, :receipts_disp_12, :receipts_disp_13]
189
+ required = [:access_id, :access_pass, :order_id, :convenience, :customer_name, :customer_kana, :tel_no, :receipts_disp_11, :receipts_disp_12, :receipts_disp_13]
190
+ assert_required_options(required, options)
191
+ post_request name, options
192
+ end
193
+
194
+ # 【Pay-easy決済】
195
+ # 5.1.2.2. 決済実行
196
+ # お客様が入力した情報で後続の決済センターと通信を行い決済を実施し、結果を返します。
197
+ def exec_tran_pay_easy(options = {})
198
+ name = "ExecTranPayEasy.idPass"
199
+ required = [:access_id, :access_pass, :order_id, :customer_name, :customer_kana, :tel_no, :receipts_disp_11, :receipts_disp_12, :receipts_disp_13]
200
+ assert_required_options(required, options)
201
+ post_request name, options
202
+ end
203
+
204
+ # 【LINE Pay決済】
205
+ # 20.1.2.2. 決済実行
206
+ def exec_tran_linepay(options = {})
207
+ name = "ExecTranLinepay.idPass"
208
+ required = [:access_id, :access_pass, :order_id, :ret_url, :error_rcv_url, :product_name]
209
+ assert_required_options(required, options)
210
+ post_request name, options
211
+ end
212
+
213
+ ### @params ###
214
+ # AccessID
215
+ # AccessPass
216
+ # OrderID
217
+ # TokenType
218
+ # Token
219
+ # MemberID
220
+ # SeqMode
221
+ # TokenSeq
222
+ # ClientField1
223
+ # ClientField2
224
+ # ClientField3
225
+ ### @return ###
226
+ # Status
227
+ # OrderID
228
+ # Forward
229
+ # Approve
230
+ # TranID
231
+ # TranDate
232
+ # ClientField1
233
+ # ClientField2
234
+ # ClientField3
235
+ ### example ###
236
+ # gmo.exec_tran_brandtoken({
237
+ # order_id: "597ae8c36120b23a3c00014e",
238
+ # access_id: "139f8ec33a07c55f406937c52ce4473d",
239
+ # access_pass: "2689b204d2c17192fa35f9269fa7e744",
240
+ # token_type: :apple_pay,
241
+ # token: <Base64 encoded payment data>,
242
+ # seq_mode: "1",
243
+ # token_seq: 1001,
244
+ # client_field_1: "Custom field value 1",
245
+ # client_field_2: "Custom field value 2",
246
+ # client_field_3: "Custom field value 3"
247
+ # })
248
+ # => {"Status"=>"CAPTURE", "OrderID"=>"597ae8c36120b23a3c00014e", "Forward"=>"2a99663", "Approve"=>"5487394", "TranID"=>"1707281634111111111111771216", "TranDate"=>"20170728163453", "ClientField1"=>"Custom field value 1", "ClientField2"=>"Custom field value 2", "ClientField3"=>"Custom field value 3"}
249
+ def exec_tran_brandtoken(options = {})
250
+ name = "ExecTranBrandtoken.idPass"
251
+ options[:token_type] = GMO::Const::TOKEN_TYPES_MAP[options[:token_type]]
252
+ required = [:access_id, :access_pass, :order_id]
139
253
  assert_required_options(required, options)
140
254
  post_request name, options
141
255
  end
@@ -184,8 +298,8 @@ module GMO
184
298
  # gmo.change_tran({
185
299
  # access_id: "a41d83f1f4c908baeda04e6dc03e300c",
186
300
  # access_pass: "d72eca02e28c88f98b9341a33ba46d5d",
187
- # JobCd: 100,
188
- # Amount: 100
301
+ # job_cd: "CAPTURE",
302
+ # amount: 100
189
303
  # })
190
304
  def change_tran(options = {})
191
305
  name = "ChangeTran.idPass"
@@ -194,6 +308,133 @@ module GMO
194
308
  post_request name, options
195
309
  end
196
310
 
311
+ ### @params ###
312
+ # AccessID
313
+ # AccessPass
314
+ # OrderID
315
+ # JobCd
316
+ # Amount
317
+ # Tax
318
+ ### @return ###
319
+ # AccessID
320
+ # AccessPass
321
+ # Status
322
+ # Forward
323
+ # Approve
324
+ # TranID
325
+ # TranDate
326
+ ### example ###
327
+ # gmo.change_tran_brandtoken({
328
+ # access_id: "21170701482c86c3b88ff72b83bfd363",
329
+ # access_pass: "51f36feba120de1e6e29532e5a3a5e3e",
330
+ # order_id: "ord10001",
331
+ # job_cd: "CAPTURE",
332
+ # amount: 2000
333
+ # })
334
+ # => {"AccessID"=>"21170701482c86c3b88ff72b83bfd363", "AccessPass"=>"51f36feba120de1e6e29532e5a3a5e3e", "Status"=>"CAPTURE", "Forward"=>"2a99663", "Approve"=>"5538477", "TranID"=>"1707311633111111111111771224", "TranDate"=>"20170731163343"}
335
+ def change_tran_brandtoken(options = {})
336
+ name = "ChangeTranBrandtoken.idPass"
337
+ required = [:access_id, :access_pass, :order_id, :job_cd, :amount]
338
+ assert_required_options(required, options)
339
+ post_request name, options
340
+ end
341
+
342
+ ### @params ###
343
+ # AccessID
344
+ # AccessPass
345
+ # OrderID
346
+ ### @return ###
347
+ # AccessID
348
+ # AccessPass
349
+ # Status
350
+ # Forward
351
+ # Approve
352
+ # TranID
353
+ # TranDate
354
+ ### example ###
355
+ # gmo.void_tran_brandtoken({
356
+ # access_id: "139f8ec33a07c55f406937c52ce4473d",
357
+ # access_pass: "2689b204d2c17192fa35f9269fa7e744",
358
+ # order_id: "597ae8c36120b23a3c00014e"
359
+ # })
360
+ # => {"AccessID"=>"139f8ec33a07c55f406937c52ce4473d", "AccessPass"=>"2689b204d2c17192fa35f9269fa7e744", "Status"=>"VOID", "Forward"=>"2a99663", "Approve"=>"5537590", "TranID"=>"1707311610111111111111771219", "TranDate"=>"20170731161007"}
361
+ def void_tran_brandtoken(options = {})
362
+ name = "VoidTranBrandtoken.idPass"
363
+ required = [:access_id, :access_pass, :order_id]
364
+ assert_required_options(required, options)
365
+ post_request name, options
366
+ end
367
+
368
+ ### @params ###
369
+ # AccessID
370
+ # AccessPass
371
+ # OrderID
372
+ # Amount
373
+ # Tax
374
+ ### @return ###
375
+ # AccessID
376
+ # AccessPass
377
+ # Status
378
+ # Forward
379
+ # Approve
380
+ # TranID
381
+ # TranDate
382
+ ### example ###
383
+ # gmo.sales_tran_brandtoken({
384
+ # access_id: "139f8ec33a07c55f406937c52ce4473d",
385
+ # access_pass: "2689b204d2c17192fa35f9269fa7e744",
386
+ # order_id: "597ae8c36120b23a3c00014e",
387
+ # amount: 1000,
388
+ # tax: "0001001"
389
+ # })
390
+ # => {"AccessID"=>"139f8ec33a07c55f406937c52ce4473d", "AccessPass"=>"2689b204d2c17192fa35f9269fa7e744", "Status"=>"SALES", "Forward"=>"2a99663", "Approve"=>"5537883", "TranID"=>"1707311620111111111111771220", "TranDate"=>"20170731162256"}
391
+ def sales_tran_brandtoken(options = {})
392
+ name = "SalesTranBrandtoken.idPass"
393
+ required = [:access_id, :access_pass, :order_id, :amount]
394
+ assert_required_options(required, options)
395
+ post_request name, options
396
+ end
397
+
398
+ ### @params ###
399
+ # AccessID
400
+ # AccessPass
401
+ # OrderID
402
+ # Amount
403
+ # Tax
404
+ ### @return ###
405
+ # AccessID
406
+ # AccessPass
407
+ # Status
408
+ # Forward
409
+ # Approve
410
+ # TranID
411
+ # TranDate
412
+ ### example ###
413
+ # gmo.refund_tran_brandtoken({
414
+ # access_id: "139f8ec33a07c55f406937c52ce4473d",
415
+ # access_pass: "2689b204d2c17192fa35f9269fa7e744",
416
+ # order_id: "597ae8c36120b23a3c00014e",
417
+ # amount: 1000,
418
+ # tax: "0001001"
419
+ # })
420
+ # => {"AccessID"=>"139f8ec33a07c55f406937c52ce4473d", "AccessPass"=>"2689b204d2c17192fa35f9269fa7e744", "Status"=>"RETURN", "Forward"=>"2a99663", "Approve"=>"5537883", "TranID"=>"1707311620111111111111771220", "TranDate"=>"20170731162256"}
421
+ def refund_tran_brandtoken(options = {})
422
+ name = "RefundTranBrandtoken.idPass"
423
+ required = [:access_id, :access_pass, :order_id, :amount]
424
+ assert_required_options(required, options)
425
+ post_request name, options
426
+ end
427
+
428
+ # 【コンビニ払い】
429
+ ## 2.2.2.1. 支払停止
430
+ # コンビニ決済センターとの通信を行い取引の支払停止処理を行います。
431
+ def cvs_cancel(options = {})
432
+ name = "CvsCancel.idPass"
433
+ required = [:access_id, :access_pass, :order_id]
434
+ assert_required_options(required, options)
435
+ post_request name, options
436
+ end
437
+
197
438
  ## 2.16.2.1.取引状態参照
198
439
  # 指定したオーダーID の取引情報を取得します。
199
440
  def search_trade(options = {})
@@ -205,6 +446,38 @@ module GMO
205
446
 
206
447
  # 13.1.2.1.取引状態参照
207
448
  # 指定したオーダーIDの取引情報を取得します。
449
+ ### @params ###
450
+ # OrderID
451
+ # PayType
452
+ ### @return ###
453
+ # OrderID
454
+ # Status
455
+ # ProcessDate
456
+ # JobCd
457
+ # AccessID
458
+ # AccessPass
459
+ # ItemCode
460
+ # Amount
461
+ # Tax
462
+ # SiteID
463
+ # MemberID
464
+ # CardNoToken
465
+ # Expire
466
+ # Method
467
+ # PayTimes
468
+ # Forward
469
+ # TranID
470
+ # Approve
471
+ # ClientField1
472
+ # ClientField2
473
+ # ClientField3
474
+ # PayType
475
+ ### example ###
476
+ # gmo.search_trade_multi({
477
+ # order_id: '598066176120b2235300020b',
478
+ # pay_type: 27
479
+ # })
480
+ # => {"OrderID"=>"598066176120b2235300020b", "Status"=>"CAPTURE", "ProcessDate"=>"20170801202929", "JobCd"=>"CAPTURE", "AccessID"=>"228fc5bc02da46943300c12706d325a2", "AccessPass"=>"090a50ec2f77d92184a18018f07906e5", "ItemCode"=>"0000990", "Amount"=>"557", "Tax"=>"0", "SiteID"=>"", "MemberID"=>"", "CardNoToken"=>"************1111", "Expire"=>"2212", "Method"=>"1", "PayTimes"=>"", "Forward"=>"2a99663", "TranID"=>"1708012029111111111111771228", "Approve"=>"5689128", "ClientField1"=>"", "ClientField2"=>"", "ClientField3"=>"", "PayType"=>"27"}
208
481
  def search_trade_multi(options = {})
209
482
  name = "SearchTradeMulti.idPass"
210
483
  required = [:order_id, :pay_type]
@@ -216,12 +489,11 @@ module GMO
216
489
 
217
490
  def api_call(name, args = {}, verb = "post", options = {})
218
491
  args.merge!({ "ShopID" => @shop_id, "ShopPass" => @shop_pass })
219
- response = api(name, args, verb, options) do |response|
492
+ api(name, args, verb, options) do |response|
220
493
  if response.is_a?(Hash) && !response["ErrInfo"].nil?
221
- raise APIError.new(response)
494
+ raise APIError.new(response, locale)
222
495
  end
223
496
  end
224
- response
225
497
  end
226
498
 
227
499
  end
@@ -6,7 +6,9 @@
6
6
  # gmo = GMO::Payment::SiteAPI.new({
7
7
  # site_id: "foo",
8
8
  # site_pass: "bar",
9
- # host: "mul-pay.com"
9
+ # host: "mul-pay.com",
10
+ # locale: "ja"
11
+
10
12
  # })
11
13
  # result = gmo.post_request("EntryTran.idPass", options)
12
14
  module GMO
@@ -18,14 +20,24 @@ module GMO
18
20
  @site_id = options[:site_id]
19
21
  @site_pass = options[:site_pass]
20
22
  @host = options[:host]
23
+ @locale = options.fetch(:locale, GMO::Const::DEFAULT_LOCALE)
21
24
  unless @site_id && @site_pass && @host
22
25
  raise ArgumentError, "Initialize must receive a hash with :site_id, :site_pass and either :host! (received #{options.inspect})"
23
26
  end
24
27
  end
25
- attr_reader :site_id, :site_pass, :host
28
+ attr_reader :site_id, :site_pass, :host, :locale
26
29
 
27
30
  ## 2.3.2.1.会員登録
28
31
  # 指定されたサイトに会員を登録します。
32
+ ### @params ###
33
+ # MemberID
34
+ ### @return ###
35
+ # MemberID
36
+ ### example ###
37
+ # gmo.save_member({
38
+ # member_id: 'mem10001'
39
+ # })
40
+ # => {"MemberID"=>"mem10001"}
29
41
  def save_member(options = {})
30
42
  name = "SaveMember.idPass"
31
43
  required = [:member_id]
@@ -64,7 +76,11 @@ module GMO
64
76
  # 指定した会員にカード情報を登録します。尚、サイトに設定されたショップ ID を使用してカード会社と通信を行い有効性の確認を行います。
65
77
  def save_card(options = {})
66
78
  name = "SaveCard.idPass"
67
- required = [:member_id, :card_no, :expire]
79
+ if options[:token].nil?
80
+ required = [:member_id, :card_no, :expire]
81
+ else
82
+ required = [:member_id, :token]
83
+ end
68
84
  assert_required_options(required, options)
69
85
  post_request name, options
70
86
  end
@@ -88,6 +104,51 @@ module GMO
88
104
  post_request name, options
89
105
  end
90
106
 
107
+ ### @params ###
108
+ # MemberID
109
+ # SeqMode
110
+ # TokenSeq
111
+ ### @return ###
112
+ # TokenSeq
113
+ # DefaultFlag
114
+ # CardName
115
+ # CardNoToken
116
+ # Expire
117
+ # HolderName
118
+ # DeleteFlag
119
+ ### example ###
120
+ # gmo.search_brandtoken({
121
+ # member_id: '598066176120b2235300020b',
122
+ # seq_mode: 0
123
+ # })
124
+ # => {"TokenSeq"=>"0", "DefaultFlag"=>"0", "CardName"=>"", "CardNoToken"=>"*************111", "Expire"=>"2212", "HolderName"=>"", "DeleteFlag"=>"0"}
125
+ def search_brandtoken(options = {})
126
+ name = "SearchBrandtoken.idPass"
127
+ required = [:member_id, :seq_mode]
128
+ assert_required_options(required, options)
129
+ post_request name, options
130
+ end
131
+
132
+ ### @params ###
133
+ # MemberID
134
+ # SeqMode
135
+ # TokenSeq
136
+ ### @return ###
137
+ # TokenSeq
138
+ ### example ###
139
+ # gmo.delete_brandtoken({
140
+ # member_id: '598066176120b2235300020b',
141
+ # seq_mode: 0,
142
+ # token_seq: 0
143
+ # })
144
+ # => {"TokenSeq"=>"0"}
145
+ def delete_brandtoken(options = {})
146
+ name = "DeleteBrandtoken.idPass"
147
+ required = [:member_id, :seq_mode, :token_seq]
148
+ assert_required_options(required, options)
149
+ post_request name, options
150
+ end
151
+
91
152
  ## 2.11.2.3. 決済実行
92
153
  # お客様が選択したカード登録連番のカード情報を取得します。
93
154
  # カード情報が本人認証サービスに対応していない場合は、カード会社との通信を行い決済を実行します。その際の出力パラメータは「2.10.2.3決済実行」の出力パラメータと同じになります。
@@ -99,19 +160,28 @@ module GMO
99
160
  post_request name, options
100
161
  end
101
162
 
163
+ ## 2.19.2.1.カード属性照会(サイトID+会員ID(+カード登録連番モード・カード登録連番)を指定して呼び出す場合)
164
+ # 指定したクレジットカードの属性情報を取得します。
165
+ # /payment/SearchCardDetail.idPass
166
+ def search_card_detail_by_member_id(options = {})
167
+ name = "SearchCardDetail.idPass"
168
+ required = [:member_id, :seq_mode]
169
+ assert_required_options(required, options)
170
+ post_request name, options
171
+ end
172
+
102
173
  private
103
174
 
104
175
  def api_call(name, args = {}, verb = "post", options = {})
105
176
  args.merge!({ "SiteID" => @site_id, "SitePass" => @site_pass })
106
- response = api(name, args, verb, options) do |response|
177
+ api(name, args, verb, options) do |response|
107
178
  if response.is_a?(Hash) && !response["ErrInfo"].nil?
108
- raise APIError.new(response)
179
+ raise APIError.new(response, locale)
109
180
  end
110
181
  end
111
- response
112
182
  end
113
183
 
114
184
  end
115
185
 
116
186
  end
117
- end
187
+ end