gmo 0.3.0 → 0.5.3

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/.gitignore +1 -0
  3. data/.travis.yml +5 -9
  4. data/CHANGELOG.md +37 -1
  5. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_cancel_deposit_gets_data_about_a_deposit.yml +38 -0
  6. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_cancel_mail_deposit_gets_data_about_a_mail_deposit.yml +38 -0
  7. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_create_account_gets_data_about_an_account.yml +38 -0
  8. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_create_deposit_gets_data_about_a_deposit.yml +38 -0
  9. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_create_mail_deposit_gets_data_about_a_mail_deposit.yml +38 -0
  10. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_delete_account_gets_data_about_an_account.yml +38 -0
  11. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_search_account_gets_data_about_an_account.yml +38 -0
  12. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_search_balance_gets_data_about_balance.yml +38 -0
  13. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_search_deposit_gets_data_about_a_deposit.yml +38 -0
  14. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_search_mail_deposit_gets_data_about_a_mail_deposit.yml +38 -0
  15. data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_update_account_gets_data_about_an_account.yml +38 -0
  16. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_change_tran_brandtoken_gets_data_about_order.yml +108 -0
  17. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_cvs_cancel_gets_data_about_a_transaction.yml +63 -0
  18. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_entry_tran_brandtoken_gets_data_about_a_transaction.yml +38 -0
  19. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_entry_tran_docomo_gets_data_about_a_transaction.yml +35 -0
  20. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_entry_tran_rakuten_id_gets_data_about_a_transaction.yml +35 -0
  21. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_exec_tran_brandtoken_gets_data_about_a_transaction.yml +73 -0
  22. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_exec_tran_brandtoken_parameter_contains_Japanese_characters_should_correctly_handle_Japanese.yml +73 -0
  23. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_exec_tran_docomo_gets_data_about_a_transaction.yml +67 -0
  24. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_exec_tran_doesn_t_require_card_info_if_token_is_present.yml +69 -0
  25. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_exec_tran_rakuten_id_gets_data_about_a_transaction.yml +67 -0
  26. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_refund_tran_brandtoken_gets_data_about_a_transaction.yml +108 -0
  27. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_sales_tran_brandtoken_gets_data_about_a_transaction.yml +143 -0
  28. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_secure_tran_gets_data_about_a_transaction.yml +36 -0
  29. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_void_tran_brandtoken_gets_data_about_order.yml +108 -0
  30. data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/secure_tran_request_params.yml +2 -0
  31. data/fixtures/vcr_cassettes/GMO_Payment_ShopAndSiteAPI/_exec_tran_brandtoken_got_data.yml +73 -0
  32. data/fixtures/vcr_cassettes/GMO_Payment_ShopAndSiteAPI/_trade_brandtoken_got_data.yml +108 -0
  33. data/fixtures/vcr_cassettes/GMO_Payment_SiteAPI/_delete_brandtoken_gets_data_about_a_brandtoken.yml +73 -0
  34. data/fixtures/vcr_cassettes/GMO_Payment_SiteAPI/_search_brandtoken_gets_data_about_a_brandtoken.yml +74 -0
  35. data/fixtures/vcr_cassettes/GMO_Payment_SiteAPI/_search_card_detail_by_member_id_gets_data_about_card_detail.yml +36 -0
  36. data/lib/gmo.rb +10 -3
  37. data/lib/gmo/const.rb +2502 -3
  38. data/lib/gmo/errors.rb +22 -4
  39. data/lib/gmo/remittance_api.rb +331 -0
  40. data/lib/gmo/shop_and_site_api.rb +77 -2
  41. data/lib/gmo/shop_api.rb +315 -5
  42. data/lib/gmo/site_api.rb +70 -3
  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 +83 -3
  47. data/spec/gmo/shop_api_spec.rb +429 -1
  48. data/spec/gmo/site_api_spec.rb +88 -1
  49. data/spec/support/config.example.yml +5 -0
  50. data/spec/support/config.yml +5 -0
  51. data/spec/support/config_loader.rb +1 -1
  52. data/spec/support/vcr.rb +9 -2
  53. metadata +41 -8
data/lib/gmo/shop_api.rb CHANGED
@@ -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と取引パスワードの発行を行い、取引を開始します。
@@ -81,6 +83,81 @@ module GMO
81
83
  post_request name, options
82
84
  end
83
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
+
111
+ ### @params ###
112
+ # OrderID
113
+ # JobCd
114
+ # Amount
115
+ # ItemCode
116
+ # Tax
117
+ ### @return ###
118
+ # AccessID
119
+ # AccessPass
120
+ ### example ###
121
+ # gmo.entry_tran_rakuten_id({
122
+ # order_id: "ord12345",
123
+ # job_cd: "AUTH",
124
+ # item_code: "1000001",
125
+ # tax: "0001001",
126
+ # amount: 100
127
+ # })
128
+ # => {"AccessID"=>"139f8ec33a07c55f406937c52ce4473d", "AccessPass"=>"2689b204d2c17192fa35f9269fa7e744"}
129
+ def entry_tran_rakuten_id(options = {})
130
+ name = "EntryTranRakutenId.idPass"
131
+ required = [:order_id, :job_cd, :amount]
132
+ assert_required_options(required, options)
133
+ post_request name, options
134
+ end
135
+
136
+ ### @params ###
137
+ # OrderID
138
+ # JobCd
139
+ # Amount
140
+ # ItemCode
141
+ # Tax
142
+ ### @return ###
143
+ # AccessID
144
+ # AccessPass
145
+ ### example ###
146
+ # gmo.entry_tran_docomo({
147
+ # order_id: "ord12345",
148
+ # job_cd: "AUTH",
149
+ # item_code: "1000001",
150
+ # tax: "0001001",
151
+ # amount: 100
152
+ # })
153
+ # => {"AccessID"=>"139f8ec33a07c55f406937c52ce4473d", "AccessPass"=>"2689b204d2c17192fa35f9269fa7e744"}
154
+ def entry_tran_docomo(options = {})
155
+ name = "EntryTranDocomo.idPass"
156
+ required = [:order_id, :job_cd, :amount]
157
+ assert_required_options(required, options)
158
+ post_request name, options
159
+ end
160
+
84
161
  ## 2.2.2.2.決済実行
85
162
  # 指定されたサイトに会員を登録します。
86
163
  # return
@@ -145,7 +222,19 @@ module GMO
145
222
  # "ClientField3" => options[:client_field_3],
146
223
  # "ClientFieldFlag" => client_field_flg
147
224
  # }
148
- required = [:access_id, :access_pass, :order_id, :card_no, :expire]
225
+ if options[:token].nil?
226
+ required = [:access_id, :access_pass, :order_id, :card_no, :expire]
227
+ else
228
+ required = [:access_id, :access_pass, :token]
229
+ end
230
+ assert_required_options(required, options)
231
+ post_request name, options
232
+ end
233
+
234
+ # 2.2.2.4 認証後決済実行
235
+ def secure_tran(options = {})
236
+ name = "SecureTran.idPass"
237
+ required = [:pa_res, :md]
149
238
  assert_required_options(required, options)
150
239
  post_request name, options
151
240
  end
@@ -179,6 +268,68 @@ module GMO
179
268
  post_request name, options
180
269
  end
181
270
 
271
+ # 【楽天ペイ決済】
272
+ # 18.1.2.2. 決済実行
273
+ def exec_tran_rakuten_id(options = {})
274
+ name = "ExecTranRakutenId.idPass"
275
+ required = [:access_id, :access_pass, :order_id]
276
+ assert_required_options(required, options)
277
+ post_request name, options
278
+ end
279
+
280
+ # 【ドコモ払い決済】
281
+ # 18.1.2.2. 決済実行
282
+ def exec_tran_docomo(options = {})
283
+ name = "ExecTranDocomo.idPass"
284
+ required = [:access_id, :access_pass, :order_id]
285
+ assert_required_options(required, options)
286
+ post_request name, options
287
+ end
288
+
289
+ ### @params ###
290
+ # AccessID
291
+ # AccessPass
292
+ # OrderID
293
+ # TokenType
294
+ # Token
295
+ # MemberID
296
+ # SeqMode
297
+ # TokenSeq
298
+ # ClientField1
299
+ # ClientField2
300
+ # ClientField3
301
+ ### @return ###
302
+ # Status
303
+ # OrderID
304
+ # Forward
305
+ # Approve
306
+ # TranID
307
+ # TranDate
308
+ # ClientField1
309
+ # ClientField2
310
+ # ClientField3
311
+ ### example ###
312
+ # gmo.exec_tran_brandtoken({
313
+ # order_id: "597ae8c36120b23a3c00014e",
314
+ # access_id: "139f8ec33a07c55f406937c52ce4473d",
315
+ # access_pass: "2689b204d2c17192fa35f9269fa7e744",
316
+ # token_type: :apple_pay,
317
+ # token: <Base64 encoded payment data>,
318
+ # seq_mode: "1",
319
+ # token_seq: 1001,
320
+ # client_field_1: "Custom field value 1",
321
+ # client_field_2: "Custom field value 2",
322
+ # client_field_3: "Custom field value 3"
323
+ # })
324
+ # => {"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"}
325
+ def exec_tran_brandtoken(options = {})
326
+ name = "ExecTranBrandtoken.idPass"
327
+ options[:token_type] = GMO::Const::TOKEN_TYPES_MAP[options[:token_type]]
328
+ required = [:access_id, :access_pass, :order_id]
329
+ assert_required_options(required, options)
330
+ post_request name, options
331
+ end
332
+
182
333
  ## 2.14.2.1.決済変更
183
334
  # 仮売上の決済に対して実売上を行います。尚、実行時に仮売上時との金額チェックを行います。
184
335
  # /payment/AlterTran.idPass
@@ -233,6 +384,133 @@ module GMO
233
384
  post_request name, options
234
385
  end
235
386
 
387
+ ### @params ###
388
+ # AccessID
389
+ # AccessPass
390
+ # OrderID
391
+ # JobCd
392
+ # Amount
393
+ # Tax
394
+ ### @return ###
395
+ # AccessID
396
+ # AccessPass
397
+ # Status
398
+ # Forward
399
+ # Approve
400
+ # TranID
401
+ # TranDate
402
+ ### example ###
403
+ # gmo.change_tran_brandtoken({
404
+ # access_id: "21170701482c86c3b88ff72b83bfd363",
405
+ # access_pass: "51f36feba120de1e6e29532e5a3a5e3e",
406
+ # order_id: "ord10001",
407
+ # job_cd: "CAPTURE",
408
+ # amount: 2000
409
+ # })
410
+ # => {"AccessID"=>"21170701482c86c3b88ff72b83bfd363", "AccessPass"=>"51f36feba120de1e6e29532e5a3a5e3e", "Status"=>"CAPTURE", "Forward"=>"2a99663", "Approve"=>"5538477", "TranID"=>"1707311633111111111111771224", "TranDate"=>"20170731163343"}
411
+ def change_tran_brandtoken(options = {})
412
+ name = "ChangeTranBrandtoken.idPass"
413
+ required = [:access_id, :access_pass, :order_id, :job_cd, :amount]
414
+ assert_required_options(required, options)
415
+ post_request name, options
416
+ end
417
+
418
+ ### @params ###
419
+ # AccessID
420
+ # AccessPass
421
+ # OrderID
422
+ ### @return ###
423
+ # AccessID
424
+ # AccessPass
425
+ # Status
426
+ # Forward
427
+ # Approve
428
+ # TranID
429
+ # TranDate
430
+ ### example ###
431
+ # gmo.void_tran_brandtoken({
432
+ # access_id: "139f8ec33a07c55f406937c52ce4473d",
433
+ # access_pass: "2689b204d2c17192fa35f9269fa7e744",
434
+ # order_id: "597ae8c36120b23a3c00014e"
435
+ # })
436
+ # => {"AccessID"=>"139f8ec33a07c55f406937c52ce4473d", "AccessPass"=>"2689b204d2c17192fa35f9269fa7e744", "Status"=>"VOID", "Forward"=>"2a99663", "Approve"=>"5537590", "TranID"=>"1707311610111111111111771219", "TranDate"=>"20170731161007"}
437
+ def void_tran_brandtoken(options = {})
438
+ name = "VoidTranBrandtoken.idPass"
439
+ required = [:access_id, :access_pass, :order_id]
440
+ assert_required_options(required, options)
441
+ post_request name, options
442
+ end
443
+
444
+ ### @params ###
445
+ # AccessID
446
+ # AccessPass
447
+ # OrderID
448
+ # Amount
449
+ # Tax
450
+ ### @return ###
451
+ # AccessID
452
+ # AccessPass
453
+ # Status
454
+ # Forward
455
+ # Approve
456
+ # TranID
457
+ # TranDate
458
+ ### example ###
459
+ # gmo.sales_tran_brandtoken({
460
+ # access_id: "139f8ec33a07c55f406937c52ce4473d",
461
+ # access_pass: "2689b204d2c17192fa35f9269fa7e744",
462
+ # order_id: "597ae8c36120b23a3c00014e",
463
+ # amount: 1000,
464
+ # tax: "0001001"
465
+ # })
466
+ # => {"AccessID"=>"139f8ec33a07c55f406937c52ce4473d", "AccessPass"=>"2689b204d2c17192fa35f9269fa7e744", "Status"=>"SALES", "Forward"=>"2a99663", "Approve"=>"5537883", "TranID"=>"1707311620111111111111771220", "TranDate"=>"20170731162256"}
467
+ def sales_tran_brandtoken(options = {})
468
+ name = "SalesTranBrandtoken.idPass"
469
+ required = [:access_id, :access_pass, :order_id, :amount]
470
+ assert_required_options(required, options)
471
+ post_request name, options
472
+ end
473
+
474
+ ### @params ###
475
+ # AccessID
476
+ # AccessPass
477
+ # OrderID
478
+ # Amount
479
+ # Tax
480
+ ### @return ###
481
+ # AccessID
482
+ # AccessPass
483
+ # Status
484
+ # Forward
485
+ # Approve
486
+ # TranID
487
+ # TranDate
488
+ ### example ###
489
+ # gmo.refund_tran_brandtoken({
490
+ # access_id: "139f8ec33a07c55f406937c52ce4473d",
491
+ # access_pass: "2689b204d2c17192fa35f9269fa7e744",
492
+ # order_id: "597ae8c36120b23a3c00014e",
493
+ # amount: 1000,
494
+ # tax: "0001001"
495
+ # })
496
+ # => {"AccessID"=>"139f8ec33a07c55f406937c52ce4473d", "AccessPass"=>"2689b204d2c17192fa35f9269fa7e744", "Status"=>"RETURN", "Forward"=>"2a99663", "Approve"=>"5537883", "TranID"=>"1707311620111111111111771220", "TranDate"=>"20170731162256"}
497
+ def refund_tran_brandtoken(options = {})
498
+ name = "RefundTranBrandtoken.idPass"
499
+ required = [:access_id, :access_pass, :order_id, :amount]
500
+ assert_required_options(required, options)
501
+ post_request name, options
502
+ end
503
+
504
+ # 【コンビニ払い】
505
+ ## 2.2.2.1. 支払停止
506
+ # コンビニ決済センターとの通信を行い取引の支払停止処理を行います。
507
+ def cvs_cancel(options = {})
508
+ name = "CvsCancel.idPass"
509
+ required = [:access_id, :access_pass, :order_id]
510
+ assert_required_options(required, options)
511
+ post_request name, options
512
+ end
513
+
236
514
  ## 2.16.2.1.取引状態参照
237
515
  # 指定したオーダーID の取引情報を取得します。
238
516
  def search_trade(options = {})
@@ -244,6 +522,38 @@ module GMO
244
522
 
245
523
  # 13.1.2.1.取引状態参照
246
524
  # 指定したオーダーIDの取引情報を取得します。
525
+ ### @params ###
526
+ # OrderID
527
+ # PayType
528
+ ### @return ###
529
+ # OrderID
530
+ # Status
531
+ # ProcessDate
532
+ # JobCd
533
+ # AccessID
534
+ # AccessPass
535
+ # ItemCode
536
+ # Amount
537
+ # Tax
538
+ # SiteID
539
+ # MemberID
540
+ # CardNoToken
541
+ # Expire
542
+ # Method
543
+ # PayTimes
544
+ # Forward
545
+ # TranID
546
+ # Approve
547
+ # ClientField1
548
+ # ClientField2
549
+ # ClientField3
550
+ # PayType
551
+ ### example ###
552
+ # gmo.search_trade_multi({
553
+ # order_id: '598066176120b2235300020b',
554
+ # pay_type: 27
555
+ # })
556
+ # => {"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"}
247
557
  def search_trade_multi(options = {})
248
558
  name = "SearchTradeMulti.idPass"
249
559
  required = [:order_id, :pay_type]
@@ -257,7 +567,7 @@ module GMO
257
567
  args.merge!({ "ShopID" => @shop_id, "ShopPass" => @shop_pass })
258
568
  api(name, args, verb, options) do |response|
259
569
  if response.is_a?(Hash) && !response["ErrInfo"].nil?
260
- raise APIError.new(response)
570
+ raise APIError.new(response, locale)
261
571
  end
262
572
  end
263
573
  end
data/lib/gmo/site_api.rb CHANGED
@@ -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]
@@ -92,6 +104,51 @@ module GMO
92
104
  post_request name, options
93
105
  end
94
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
+
95
152
  ## 2.11.2.3. 決済実行
96
153
  # お客様が選択したカード登録連番のカード情報を取得します。
97
154
  # カード情報が本人認証サービスに対応していない場合は、カード会社との通信を行い決済を実行します。その際の出力パラメータは「2.10.2.3決済実行」の出力パラメータと同じになります。
@@ -103,13 +160,23 @@ module GMO
103
160
  post_request name, options
104
161
  end
105
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
+
106
173
  private
107
174
 
108
175
  def api_call(name, args = {}, verb = "post", options = {})
109
176
  args.merge!({ "SiteID" => @site_id, "SitePass" => @site_pass })
110
177
  api(name, args, verb, options) do |response|
111
178
  if response.is_a?(Hash) && !response["ErrInfo"].nil?
112
- raise APIError.new(response)
179
+ raise APIError.new(response, locale)
113
180
  end
114
181
  end
115
182
  end