gmo 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG.md +20 -1
- data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_cancel_deposit_gets_data_about_a_deposit.yml +38 -0
- data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_cancel_mail_deposit_gets_data_about_a_mail_deposit.yml +38 -0
- data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_create_account_gets_data_about_an_account.yml +38 -0
- data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_create_deposit_gets_data_about_a_deposit.yml +38 -0
- data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_create_mail_deposit_gets_data_about_a_mail_deposit.yml +38 -0
- data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_delete_account_gets_data_about_an_account.yml +38 -0
- data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_search_account_gets_data_about_an_account.yml +38 -0
- data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_search_balance_gets_data_about_balance.yml +38 -0
- data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_search_deposit_gets_data_about_a_deposit.yml +38 -0
- data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_search_mail_deposit_gets_data_about_a_mail_deposit.yml +38 -0
- data/fixtures/vcr_cassettes/GMO_Payment_RemittanceAPI/_update_account_gets_data_about_an_account.yml +38 -0
- data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_change_tran_brandtoken_gets_data_about_order.yml +108 -0
- data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_entry_tran_brandtoken_gets_data_about_a_transaction.yml +38 -0
- data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_exec_tran_brandtoken_gets_data_about_a_transaction.yml +73 -0
- data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_exec_tran_brandtoken_parameter_contains_Japanese_characters_should_correctly_handle_Japanese.yml +73 -0
- data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_exec_tran_doesn_t_require_card_info_if_token_is_present.yml +69 -0
- data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_refund_tran_brandtoken_gets_data_about_a_transaction.yml +108 -0
- data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_sales_tran_brandtoken_gets_data_about_a_transaction.yml +143 -0
- data/fixtures/vcr_cassettes/GMO_Payment_ShopAPI/_void_tran_brandtoken_gets_data_about_order.yml +108 -0
- data/fixtures/vcr_cassettes/GMO_Payment_ShopAndSiteAPI/_exec_tran_brandtoken_got_data.yml +73 -0
- data/fixtures/vcr_cassettes/GMO_Payment_ShopAndSiteAPI/_trade_brandtoken_got_data.yml +108 -0
- data/fixtures/vcr_cassettes/GMO_Payment_SiteAPI/_delete_brandtoken_gets_data_about_a_brandtoken.yml +73 -0
- data/fixtures/vcr_cassettes/GMO_Payment_SiteAPI/_search_brandtoken_gets_data_about_a_brandtoken.yml +74 -0
- data/fixtures/vcr_cassettes/GMO_Payment_SiteAPI/_search_card_detail_by_member_id_gets_data_about_card_detail.yml +36 -0
- data/lib/gmo.rb +6 -1
- data/lib/gmo/const.rb +1159 -1
- data/lib/gmo/errors.rb +20 -2
- data/lib/gmo/remittance_api.rb +329 -0
- data/lib/gmo/shop_and_site_api.rb +73 -0
- data/lib/gmo/shop_api.rb +223 -2
- data/lib/gmo/site_api.rb +64 -0
- data/lib/gmo/version.rb +1 -1
- data/spec/gmo/{error_spec.rb → errors_spec.rb} +11 -2
- data/spec/gmo/remittance_api_spec.rb +504 -0
- data/spec/gmo/shop_and_site_api_spec.rb +74 -0
- data/spec/gmo/shop_api_spec.rb +278 -0
- data/spec/gmo/site_api_spec.rb +84 -1
- data/spec/support/config.example.yml +5 -0
- data/spec/support/config.yml +5 -0
- data/spec/support/config_loader.rb +1 -1
- data/spec/support/vcr.rb +9 -2
- metadata +30 -4
data/lib/gmo/shop_api.rb
CHANGED
@@ -50,7 +50,6 @@ module GMO
|
|
50
50
|
post_request name, options
|
51
51
|
end
|
52
52
|
|
53
|
-
|
54
53
|
# 【コンビニ払い】
|
55
54
|
# 2.1.2.1. 取引登録
|
56
55
|
# これ以降の決済取引で必要となる取引IDと取引パスワードの発行を行い、取引を開始します。
|
@@ -81,6 +80,31 @@ module GMO
|
|
81
80
|
post_request name, options
|
82
81
|
end
|
83
82
|
|
83
|
+
### @params ###
|
84
|
+
# OrderID
|
85
|
+
# JobCd
|
86
|
+
# Amount
|
87
|
+
# ItemCode
|
88
|
+
# Tax
|
89
|
+
### @return ###
|
90
|
+
# AccessID
|
91
|
+
# AccessPass
|
92
|
+
### example ###
|
93
|
+
# gmo.entry_tran_brandtoken({
|
94
|
+
# order_id: "ord12345",
|
95
|
+
# job_cd: "AUTH",
|
96
|
+
# item_code: "1000001",
|
97
|
+
# tax: "0001001",
|
98
|
+
# amount: 100
|
99
|
+
# })
|
100
|
+
# => {"AccessID"=>"139f8ec33a07c55f406937c52ce4473d", "AccessPass"=>"2689b204d2c17192fa35f9269fa7e744"}
|
101
|
+
def entry_tran_brandtoken(options = {})
|
102
|
+
name = "EntryTranBrandtoken.idPass"
|
103
|
+
required = [:order_id, :job_cd, :amount]
|
104
|
+
assert_required_options(required, options)
|
105
|
+
post_request name, options
|
106
|
+
end
|
107
|
+
|
84
108
|
## 2.2.2.2.決済実行
|
85
109
|
# 指定されたサイトに会員を登録します。
|
86
110
|
# return
|
@@ -145,7 +169,11 @@ module GMO
|
|
145
169
|
# "ClientField3" => options[:client_field_3],
|
146
170
|
# "ClientFieldFlag" => client_field_flg
|
147
171
|
# }
|
148
|
-
|
172
|
+
if options[:token].nil?
|
173
|
+
required = [:access_id, :access_pass, :order_id, :card_no, :expire]
|
174
|
+
else
|
175
|
+
required = [:access_id, :access_pass, :token]
|
176
|
+
end
|
149
177
|
assert_required_options(required, options)
|
150
178
|
post_request name, options
|
151
179
|
end
|
@@ -179,6 +207,50 @@ module GMO
|
|
179
207
|
post_request name, options
|
180
208
|
end
|
181
209
|
|
210
|
+
### @params ###
|
211
|
+
# AccessID
|
212
|
+
# AccessPass
|
213
|
+
# OrderID
|
214
|
+
# TokenType
|
215
|
+
# Token
|
216
|
+
# MemberID
|
217
|
+
# SeqMode
|
218
|
+
# TokenSeq
|
219
|
+
# ClientField1
|
220
|
+
# ClientField2
|
221
|
+
# ClientField3
|
222
|
+
### @return ###
|
223
|
+
# Status
|
224
|
+
# OrderID
|
225
|
+
# Forward
|
226
|
+
# Approve
|
227
|
+
# TranID
|
228
|
+
# TranDate
|
229
|
+
# ClientField1
|
230
|
+
# ClientField2
|
231
|
+
# ClientField3
|
232
|
+
### example ###
|
233
|
+
# gmo.exec_tran_brandtoken({
|
234
|
+
# order_id: "597ae8c36120b23a3c00014e",
|
235
|
+
# access_id: "139f8ec33a07c55f406937c52ce4473d",
|
236
|
+
# access_pass: "2689b204d2c17192fa35f9269fa7e744",
|
237
|
+
# token_type: :apple_pay,
|
238
|
+
# token: <Base64 encoded payment data>,
|
239
|
+
# seq_mode: "1",
|
240
|
+
# token_seq: 1001,
|
241
|
+
# client_field_1: "Custom field value 1",
|
242
|
+
# client_field_2: "Custom field value 2",
|
243
|
+
# client_field_3: "Custom field value 3"
|
244
|
+
# })
|
245
|
+
# => {"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"}
|
246
|
+
def exec_tran_brandtoken(options = {})
|
247
|
+
name = "ExecTranBrandtoken.idPass"
|
248
|
+
options[:token_type] = GMO::Const::TOKEN_TYPES_MAP[options[:token_type]]
|
249
|
+
required = [:access_id, :access_pass, :order_id]
|
250
|
+
assert_required_options(required, options)
|
251
|
+
post_request name, options
|
252
|
+
end
|
253
|
+
|
182
254
|
## 2.14.2.1.決済変更
|
183
255
|
# 仮売上の決済に対して実売上を行います。尚、実行時に仮売上時との金額チェックを行います。
|
184
256
|
# /payment/AlterTran.idPass
|
@@ -233,6 +305,123 @@ module GMO
|
|
233
305
|
post_request name, options
|
234
306
|
end
|
235
307
|
|
308
|
+
### @params ###
|
309
|
+
# AccessID
|
310
|
+
# AccessPass
|
311
|
+
# OrderID
|
312
|
+
# JobCd
|
313
|
+
# Amount
|
314
|
+
# Tax
|
315
|
+
### @return ###
|
316
|
+
# AccessID
|
317
|
+
# AccessPass
|
318
|
+
# Status
|
319
|
+
# Forward
|
320
|
+
# Approve
|
321
|
+
# TranID
|
322
|
+
# TranDate
|
323
|
+
### example ###
|
324
|
+
# gmo.change_tran_brandtoken({
|
325
|
+
# access_id: "21170701482c86c3b88ff72b83bfd363",
|
326
|
+
# access_pass: "51f36feba120de1e6e29532e5a3a5e3e",
|
327
|
+
# order_id: "ord10001",
|
328
|
+
# job_cd: "CAPTURE",
|
329
|
+
# amount: 2000
|
330
|
+
# })
|
331
|
+
# => {"AccessID"=>"21170701482c86c3b88ff72b83bfd363", "AccessPass"=>"51f36feba120de1e6e29532e5a3a5e3e", "Status"=>"CAPTURE", "Forward"=>"2a99663", "Approve"=>"5538477", "TranID"=>"1707311633111111111111771224", "TranDate"=>"20170731163343"}
|
332
|
+
def change_tran_brandtoken(options = {})
|
333
|
+
name = "ChangeTranBrandtoken.idPass"
|
334
|
+
required = [:access_id, :access_pass, :order_id, :job_cd, :amount]
|
335
|
+
assert_required_options(required, options)
|
336
|
+
post_request name, options
|
337
|
+
end
|
338
|
+
|
339
|
+
### @params ###
|
340
|
+
# AccessID
|
341
|
+
# AccessPass
|
342
|
+
# OrderID
|
343
|
+
### @return ###
|
344
|
+
# AccessID
|
345
|
+
# AccessPass
|
346
|
+
# Status
|
347
|
+
# Forward
|
348
|
+
# Approve
|
349
|
+
# TranID
|
350
|
+
# TranDate
|
351
|
+
### example ###
|
352
|
+
# gmo.void_tran_brandtoken({
|
353
|
+
# access_id: "139f8ec33a07c55f406937c52ce4473d",
|
354
|
+
# access_pass: "2689b204d2c17192fa35f9269fa7e744",
|
355
|
+
# order_id: "597ae8c36120b23a3c00014e"
|
356
|
+
# })
|
357
|
+
# => {"AccessID"=>"139f8ec33a07c55f406937c52ce4473d", "AccessPass"=>"2689b204d2c17192fa35f9269fa7e744", "Status"=>"VOID", "Forward"=>"2a99663", "Approve"=>"5537590", "TranID"=>"1707311610111111111111771219", "TranDate"=>"20170731161007"}
|
358
|
+
def void_tran_brandtoken(options = {})
|
359
|
+
name = "VoidTranBrandtoken.idPass"
|
360
|
+
required = [:access_id, :access_pass, :order_id]
|
361
|
+
assert_required_options(required, options)
|
362
|
+
post_request name, options
|
363
|
+
end
|
364
|
+
|
365
|
+
### @params ###
|
366
|
+
# AccessID
|
367
|
+
# AccessPass
|
368
|
+
# OrderID
|
369
|
+
# Amount
|
370
|
+
# Tax
|
371
|
+
### @return ###
|
372
|
+
# AccessID
|
373
|
+
# AccessPass
|
374
|
+
# Status
|
375
|
+
# Forward
|
376
|
+
# Approve
|
377
|
+
# TranID
|
378
|
+
# TranDate
|
379
|
+
### example ###
|
380
|
+
# gmo.sales_tran_brandtoken({
|
381
|
+
# access_id: "139f8ec33a07c55f406937c52ce4473d",
|
382
|
+
# access_pass: "2689b204d2c17192fa35f9269fa7e744",
|
383
|
+
# order_id: "597ae8c36120b23a3c00014e",
|
384
|
+
# amount: 1000,
|
385
|
+
# tax: "0001001"
|
386
|
+
# })
|
387
|
+
# => {"AccessID"=>"139f8ec33a07c55f406937c52ce4473d", "AccessPass"=>"2689b204d2c17192fa35f9269fa7e744", "Status"=>"SALES", "Forward"=>"2a99663", "Approve"=>"5537883", "TranID"=>"1707311620111111111111771220", "TranDate"=>"20170731162256"}
|
388
|
+
def sales_tran_brandtoken(options = {})
|
389
|
+
name = "SalesTranBrandtoken.idPass"
|
390
|
+
required = [:access_id, :access_pass, :order_id, :amount]
|
391
|
+
assert_required_options(required, options)
|
392
|
+
post_request name, options
|
393
|
+
end
|
394
|
+
|
395
|
+
### @params ###
|
396
|
+
# AccessID
|
397
|
+
# AccessPass
|
398
|
+
# OrderID
|
399
|
+
# Amount
|
400
|
+
# Tax
|
401
|
+
### @return ###
|
402
|
+
# AccessID
|
403
|
+
# AccessPass
|
404
|
+
# Status
|
405
|
+
# Forward
|
406
|
+
# Approve
|
407
|
+
# TranID
|
408
|
+
# TranDate
|
409
|
+
### example ###
|
410
|
+
# gmo.refund_tran_brandtoken({
|
411
|
+
# access_id: "139f8ec33a07c55f406937c52ce4473d",
|
412
|
+
# access_pass: "2689b204d2c17192fa35f9269fa7e744",
|
413
|
+
# order_id: "597ae8c36120b23a3c00014e",
|
414
|
+
# amount: 1000,
|
415
|
+
# tax: "0001001"
|
416
|
+
# })
|
417
|
+
# => {"AccessID"=>"139f8ec33a07c55f406937c52ce4473d", "AccessPass"=>"2689b204d2c17192fa35f9269fa7e744", "Status"=>"RETURN", "Forward"=>"2a99663", "Approve"=>"5537883", "TranID"=>"1707311620111111111111771220", "TranDate"=>"20170731162256"}
|
418
|
+
def refund_tran_brandtoken(options = {})
|
419
|
+
name = "RefundTranBrandtoken.idPass"
|
420
|
+
required = [:access_id, :access_pass, :order_id, :amount]
|
421
|
+
assert_required_options(required, options)
|
422
|
+
post_request name, options
|
423
|
+
end
|
424
|
+
|
236
425
|
## 2.16.2.1.取引状態参照
|
237
426
|
# 指定したオーダーID の取引情報を取得します。
|
238
427
|
def search_trade(options = {})
|
@@ -244,6 +433,38 @@ module GMO
|
|
244
433
|
|
245
434
|
# 13.1.2.1.取引状態参照
|
246
435
|
# 指定したオーダーIDの取引情報を取得します。
|
436
|
+
### @params ###
|
437
|
+
# OrderID
|
438
|
+
# PayType
|
439
|
+
### @return ###
|
440
|
+
# OrderID
|
441
|
+
# Status
|
442
|
+
# ProcessDate
|
443
|
+
# JobCd
|
444
|
+
# AccessID
|
445
|
+
# AccessPass
|
446
|
+
# ItemCode
|
447
|
+
# Amount
|
448
|
+
# Tax
|
449
|
+
# SiteID
|
450
|
+
# MemberID
|
451
|
+
# CardNoToken
|
452
|
+
# Expire
|
453
|
+
# Method
|
454
|
+
# PayTimes
|
455
|
+
# Forward
|
456
|
+
# TranID
|
457
|
+
# Approve
|
458
|
+
# ClientField1
|
459
|
+
# ClientField2
|
460
|
+
# ClientField3
|
461
|
+
# PayType
|
462
|
+
### example ###
|
463
|
+
# gmo.search_trade_multi({
|
464
|
+
# order_id: '598066176120b2235300020b',
|
465
|
+
# pay_type: 27
|
466
|
+
# })
|
467
|
+
# => {"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
468
|
def search_trade_multi(options = {})
|
248
469
|
name = "SearchTradeMulti.idPass"
|
249
470
|
required = [:order_id, :pay_type]
|
data/lib/gmo/site_api.rb
CHANGED
@@ -26,6 +26,15 @@ module GMO
|
|
26
26
|
|
27
27
|
## 2.3.2.1.会員登録
|
28
28
|
# 指定されたサイトに会員を登録します。
|
29
|
+
### @params ###
|
30
|
+
# MemberID
|
31
|
+
### @return ###
|
32
|
+
# MemberID
|
33
|
+
### example ###
|
34
|
+
# gmo.save_member({
|
35
|
+
# member_id: 'mem10001'
|
36
|
+
# })
|
37
|
+
# => {"MemberID"=>"mem10001"}
|
29
38
|
def save_member(options = {})
|
30
39
|
name = "SaveMember.idPass"
|
31
40
|
required = [:member_id]
|
@@ -92,6 +101,51 @@ module GMO
|
|
92
101
|
post_request name, options
|
93
102
|
end
|
94
103
|
|
104
|
+
### @params ###
|
105
|
+
# MemberID
|
106
|
+
# SeqMode
|
107
|
+
# TokenSeq
|
108
|
+
### @return ###
|
109
|
+
# TokenSeq
|
110
|
+
# DefaultFlag
|
111
|
+
# CardName
|
112
|
+
# CardNoToken
|
113
|
+
# Expire
|
114
|
+
# HolderName
|
115
|
+
# DeleteFlag
|
116
|
+
### example ###
|
117
|
+
# gmo.search_brandtoken({
|
118
|
+
# member_id: '598066176120b2235300020b',
|
119
|
+
# seq_mode: 0
|
120
|
+
# })
|
121
|
+
# => {"TokenSeq"=>"0", "DefaultFlag"=>"0", "CardName"=>"", "CardNoToken"=>"*************111", "Expire"=>"2212", "HolderName"=>"", "DeleteFlag"=>"0"}
|
122
|
+
def search_brandtoken(options = {})
|
123
|
+
name = "SearchBrandtoken.idPass"
|
124
|
+
required = [:member_id, :seq_mode]
|
125
|
+
assert_required_options(required, options)
|
126
|
+
post_request name, options
|
127
|
+
end
|
128
|
+
|
129
|
+
### @params ###
|
130
|
+
# MemberID
|
131
|
+
# SeqMode
|
132
|
+
# TokenSeq
|
133
|
+
### @return ###
|
134
|
+
# TokenSeq
|
135
|
+
### example ###
|
136
|
+
# gmo.delete_brandtoken({
|
137
|
+
# member_id: '598066176120b2235300020b',
|
138
|
+
# seq_mode: 0,
|
139
|
+
# token_seq: 0
|
140
|
+
# })
|
141
|
+
# => {"TokenSeq"=>"0"}
|
142
|
+
def delete_brandtoken(options = {})
|
143
|
+
name = "DeleteBrandtoken.idPass"
|
144
|
+
required = [:member_id, :seq_mode, :token_seq]
|
145
|
+
assert_required_options(required, options)
|
146
|
+
post_request name, options
|
147
|
+
end
|
148
|
+
|
95
149
|
## 2.11.2.3. 決済実行
|
96
150
|
# お客様が選択したカード登録連番のカード情報を取得します。
|
97
151
|
# カード情報が本人認証サービスに対応していない場合は、カード会社との通信を行い決済を実行します。その際の出力パラメータは「2.10.2.3決済実行」の出力パラメータと同じになります。
|
@@ -103,6 +157,16 @@ module GMO
|
|
103
157
|
post_request name, options
|
104
158
|
end
|
105
159
|
|
160
|
+
## 2.19.2.1.カード属性照会(サイトID+会員ID(+カード登録連番モード・カード登録連番)を指定して呼び出す場合)
|
161
|
+
# 指定したクレジットカードの属性情報を取得します。
|
162
|
+
# /payment/SearchCardDetail.idPass
|
163
|
+
def search_card_detail_by_member_id(options = {})
|
164
|
+
name = "SearchCardDetail.idPass"
|
165
|
+
required = [:member_id, :seq_mode]
|
166
|
+
assert_required_options(required, options)
|
167
|
+
post_request name, options
|
168
|
+
end
|
169
|
+
|
106
170
|
private
|
107
171
|
|
108
172
|
def api_call(name, args = {}, verb = "post", options = {})
|
data/lib/gmo/version.rb
CHANGED
@@ -16,10 +16,19 @@ describe GMO::Payment::APIError do
|
|
16
16
|
it "is a GMO::Payment::Error" do
|
17
17
|
GMO::Payment::APIError.new({}).should be_a(GMO::Payment::Error)
|
18
18
|
end
|
19
|
+
|
20
|
+
context 'with error messages' do
|
21
|
+
let(:response) { {
|
22
|
+
"ErrCode" => "BA1|E01",
|
23
|
+
"ErrInfo" => "BA1040001|E01170001|100"
|
24
|
+
} }
|
25
|
+
subject { GMO::Payment::APIError.new(response) }
|
26
|
+
it { expect(subject.message).to eq "ErrCode=BA1|E01&ErrInfo=BA1040001|E01170001|100&ErrMessage=Bank ID is not specified|Card Number not specified|Card number Required check error" }
|
27
|
+
end
|
19
28
|
end
|
20
29
|
|
21
30
|
describe GMO::Payment::ServerError do
|
22
31
|
it "is a GMO::Payment::Error" do
|
23
|
-
|
32
|
+
GMO::Payment::ServerError.new(nil, nil).should be_a(GMO::Payment::Error)
|
24
33
|
end
|
25
|
-
end
|
34
|
+
end
|
@@ -0,0 +1,504 @@
|
|
1
|
+
# Encoding: UTF-8
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
describe "GMO::Payment::RemittanceAPI" do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@service ||= GMO::Payment::RemittanceAPI.new({
|
9
|
+
:shop_id => SPEC_CONF["remittance"]["shop_id"],
|
10
|
+
:shop_pass => SPEC_CONF["remittance"]["shop_pass"],
|
11
|
+
:host => SPEC_CONF["remittance"]["host"]
|
12
|
+
})
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should raise an ArgumentError if no options passed" do
|
16
|
+
lambda {
|
17
|
+
service = GMO::Payment::RemittanceAPI.new()
|
18
|
+
}.should raise_error(ArgumentError)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "has an attr_reader for shop_id" do
|
22
|
+
@service.shop_id.should == SPEC_CONF["remittance"]["shop_id"]
|
23
|
+
end
|
24
|
+
|
25
|
+
it "has an attr_reader for shop_pass" do
|
26
|
+
@service.shop_pass.should == SPEC_CONF["remittance"]["shop_pass"]
|
27
|
+
end
|
28
|
+
|
29
|
+
it "has an attr_reader for host" do
|
30
|
+
@service.host.should == SPEC_CONF["remittance"]["host"]
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "#create_account" do
|
34
|
+
let(:do_api_call) {
|
35
|
+
@service.create_account({
|
36
|
+
:bank_id => "bank00001",
|
37
|
+
:bank_code => "0001",
|
38
|
+
:branch_code => "813",
|
39
|
+
:account_type => :normal,
|
40
|
+
:account_name => "An Yutzy",
|
41
|
+
:account_number => "0012345",
|
42
|
+
:branch_code_jp => "00567",
|
43
|
+
:account_number_jp => "01234567",
|
44
|
+
:free => "foobar"
|
45
|
+
})
|
46
|
+
}
|
47
|
+
|
48
|
+
it "gets data about an account", :vcr do
|
49
|
+
result = do_api_call
|
50
|
+
result["Bank_ID"].nil?.should_not be_truthy
|
51
|
+
result["Method"].nil?.should_not be_truthy
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'with all required options' do
|
55
|
+
let(:response) { OpenStruct.new(status: 200, body: nil ) }
|
56
|
+
before { allow(GMO).to receive(:make_request) { response } }
|
57
|
+
|
58
|
+
it "makes request with correct parameters", :vcr do
|
59
|
+
path = "/api/AccountRegistration.idPass"
|
60
|
+
args = {
|
61
|
+
"Method" => 1,
|
62
|
+
"Bank_ID" => "bank00001",
|
63
|
+
"Bank_Code" => "0001",
|
64
|
+
"Branch_Code" => "813",
|
65
|
+
"Account_Type" => 1,
|
66
|
+
"Account_Name" => "An Yutzy",
|
67
|
+
"Account_Number" => "0012345",
|
68
|
+
"Branch_Code_Jpbank" => "00567",
|
69
|
+
"Account_Number_Jpbank" => "01234567",
|
70
|
+
"Free" => "foobar",
|
71
|
+
"Shop_ID" => @service.shop_id,
|
72
|
+
"Shop_Pass" => @service.shop_pass
|
73
|
+
}
|
74
|
+
verb = "post"
|
75
|
+
options = { :host => @service.host }
|
76
|
+
expect(GMO).to receive(:make_request).with(path, args, verb, options)
|
77
|
+
end
|
78
|
+
|
79
|
+
after { do_api_call }
|
80
|
+
end
|
81
|
+
|
82
|
+
it "got error if missing options", :vcr do
|
83
|
+
lambda {
|
84
|
+
result = @service.create_account()
|
85
|
+
}.should raise_error("Required bank_id, bank_code, branch_code, account_type, account_name, account_number were not provided.")
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "#update_account" do
|
90
|
+
let(:do_api_call) {
|
91
|
+
@service.update_account({
|
92
|
+
:bank_id => "bank00001",
|
93
|
+
:bank_code => "0001",
|
94
|
+
:branch_code => "813",
|
95
|
+
:account_type => :normal,
|
96
|
+
:account_name => "An Yutzy",
|
97
|
+
:account_number => "0012345",
|
98
|
+
:branch_code_jp => "00567",
|
99
|
+
:account_number_jp => "01234567",
|
100
|
+
:free => "foobar"
|
101
|
+
})
|
102
|
+
}
|
103
|
+
|
104
|
+
it "gets data about an account", :vcr do
|
105
|
+
result = do_api_call
|
106
|
+
result["Bank_ID"].nil?.should_not be_truthy
|
107
|
+
result["Method"].nil?.should_not be_truthy
|
108
|
+
end
|
109
|
+
|
110
|
+
context 'with all required options' do
|
111
|
+
let(:response) { OpenStruct.new(status: 200, body: nil ) }
|
112
|
+
before { allow(GMO).to receive(:make_request) { response } }
|
113
|
+
|
114
|
+
it "makes request with correct parameters", :vcr do
|
115
|
+
path = "/api/AccountRegistration.idPass"
|
116
|
+
args = {
|
117
|
+
"Method" => 2,
|
118
|
+
"Bank_ID" => "bank00001",
|
119
|
+
"Bank_Code" => "0001",
|
120
|
+
"Branch_Code" => "813",
|
121
|
+
"Account_Type" => 1,
|
122
|
+
"Account_Name" => "An Yutzy",
|
123
|
+
"Account_Number" => "0012345",
|
124
|
+
"Branch_Code_Jpbank" => "00567",
|
125
|
+
"Account_Number_Jpbank" => "01234567",
|
126
|
+
"Free" => "foobar",
|
127
|
+
"Shop_ID" => @service.shop_id,
|
128
|
+
"Shop_Pass" => @service.shop_pass
|
129
|
+
}
|
130
|
+
verb = "post"
|
131
|
+
options = { :host => @service.host }
|
132
|
+
expect(GMO).to receive(:make_request).with(path, args, verb, options)
|
133
|
+
end
|
134
|
+
|
135
|
+
after { do_api_call }
|
136
|
+
end
|
137
|
+
|
138
|
+
it "got error if missing options", :vcr do
|
139
|
+
lambda {
|
140
|
+
result = @service.create_account()
|
141
|
+
}.should raise_error("Required bank_id, bank_code, branch_code, account_type, account_name, account_number were not provided.")
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
describe "#delete_account" do
|
146
|
+
let(:do_api_call) { @service.delete_account(bank_id: "bank00001") }
|
147
|
+
|
148
|
+
it "gets data about an account", :vcr do
|
149
|
+
result = do_api_call
|
150
|
+
result["Bank_ID"].nil?.should_not be_truthy
|
151
|
+
result["Method"].nil?.should_not be_truthy
|
152
|
+
end
|
153
|
+
|
154
|
+
context 'with all required options' do
|
155
|
+
let(:response) { OpenStruct.new(status: 200, body: nil ) }
|
156
|
+
before { allow(GMO).to receive(:make_request) { response } }
|
157
|
+
|
158
|
+
it "makes request with correct parameters", :vcr do
|
159
|
+
path = "/api/AccountRegistration.idPass"
|
160
|
+
args = {
|
161
|
+
"Method" => 3,
|
162
|
+
"Bank_ID" => "bank00001",
|
163
|
+
"Shop_ID" => @service.shop_id,
|
164
|
+
"Shop_Pass" => @service.shop_pass
|
165
|
+
}
|
166
|
+
verb = "post"
|
167
|
+
options = { :host => @service.host }
|
168
|
+
expect(GMO).to receive(:make_request).with(path, args, verb, options)
|
169
|
+
end
|
170
|
+
|
171
|
+
after { do_api_call }
|
172
|
+
end
|
173
|
+
|
174
|
+
it "got error if missing options", :vcr do
|
175
|
+
lambda {
|
176
|
+
result = @service.delete_account()
|
177
|
+
}.should raise_error("Required bank_id were not provided.")
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
describe "#search_account" do
|
182
|
+
let(:do_api_call) { @service.search_account(:bank_id => "bank00001") }
|
183
|
+
|
184
|
+
it "gets data about an account", :vcr do
|
185
|
+
result = do_api_call
|
186
|
+
result["Bank_ID"].nil?.should_not be_truthy
|
187
|
+
result["Delete_Flag"].nil?.should_not be_truthy
|
188
|
+
result["Bank_Name"].nil?.should_not be_truthy
|
189
|
+
result["Bank_Code"].nil?.should_not be_truthy
|
190
|
+
result["Branch_Name"].nil?.should_not be_truthy
|
191
|
+
result["Branch_Code"].nil?.should_not be_truthy
|
192
|
+
result["Account_Type"].nil?.should_not be_truthy
|
193
|
+
result["Account_Number"].nil?.should_not be_truthy
|
194
|
+
result["Account_Name"].nil?.should_not be_truthy
|
195
|
+
result["Free"].nil?.should_not be_truthy
|
196
|
+
result["Branch_Code_Jpbank"].nil?.should_not be_truthy
|
197
|
+
result["Account_Number_Jpbank"].nil?.should_not be_truthy
|
198
|
+
end
|
199
|
+
|
200
|
+
context 'with all required options' do
|
201
|
+
let(:response) { OpenStruct.new(status: 200, body: nil ) }
|
202
|
+
before { allow(GMO).to receive(:make_request) { response } }
|
203
|
+
|
204
|
+
it "makes request with correct parameters", :vcr do
|
205
|
+
path = "/api/AccountSearch.idPass"
|
206
|
+
args = {
|
207
|
+
"Bank_ID" => "bank00001",
|
208
|
+
"Shop_ID" => @service.shop_id,
|
209
|
+
"Shop_Pass" => @service.shop_pass
|
210
|
+
}
|
211
|
+
verb = "post"
|
212
|
+
options = { :host => @service.host }
|
213
|
+
expect(GMO).to receive(:make_request).with(path, args, verb, options)
|
214
|
+
end
|
215
|
+
|
216
|
+
after { do_api_call }
|
217
|
+
end
|
218
|
+
|
219
|
+
it "got error if missing options", :vcr do
|
220
|
+
lambda {
|
221
|
+
result = @service.search_account()
|
222
|
+
}.should raise_error("Required bank_id were not provided.")
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
describe "#create_deposit" do
|
227
|
+
let(:do_api_call) {
|
228
|
+
@service.create_deposit({
|
229
|
+
:bank_id => "bank00001",
|
230
|
+
:deposit_id => "dep00001",
|
231
|
+
:amount => "1000"
|
232
|
+
})
|
233
|
+
}
|
234
|
+
|
235
|
+
it "gets data about a deposit", :vcr do
|
236
|
+
result = do_api_call
|
237
|
+
result["Bank_ID"].nil?.should_not be_truthy
|
238
|
+
result["Deposit_ID"].nil?.should_not be_truthy
|
239
|
+
result["Method"].nil?.should_not be_truthy
|
240
|
+
result["Amount"].nil?.should_not be_truthy
|
241
|
+
result["Bank_Fee"].nil?.should_not be_truthy
|
242
|
+
end
|
243
|
+
|
244
|
+
context 'with all required options' do
|
245
|
+
let(:response) { OpenStruct.new(status: 200, body: nil ) }
|
246
|
+
before { allow(GMO).to receive(:make_request) { response } }
|
247
|
+
|
248
|
+
it "makes request with correct parameters", :vcr do
|
249
|
+
path = "/api/DepositRegistration.idPass"
|
250
|
+
args = {
|
251
|
+
"Method" => 1,
|
252
|
+
"Bank_ID" => "bank00001",
|
253
|
+
"Deposit_ID" => "dep00001",
|
254
|
+
"Amount" => "1000",
|
255
|
+
"Shop_ID" => @service.shop_id,
|
256
|
+
"Shop_Pass" => @service.shop_pass
|
257
|
+
}
|
258
|
+
verb = "post"
|
259
|
+
options = { :host => @service.host }
|
260
|
+
expect(GMO).to receive(:make_request).with(path, args, verb, options)
|
261
|
+
end
|
262
|
+
|
263
|
+
after { do_api_call }
|
264
|
+
end
|
265
|
+
|
266
|
+
it "got error if missing options", :vcr do
|
267
|
+
lambda {
|
268
|
+
result = @service.create_deposit()
|
269
|
+
}.should raise_error("Required bank_id, deposit_id, amount were not provided.")
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
describe "#cancel_deposit" do
|
274
|
+
let(:do_api_call) {
|
275
|
+
@service.cancel_deposit({
|
276
|
+
:bank_id => "bank00001",
|
277
|
+
:deposit_id => "dep00001",
|
278
|
+
})
|
279
|
+
}
|
280
|
+
|
281
|
+
it "gets data about a deposit", :vcr do
|
282
|
+
result = do_api_call
|
283
|
+
result["Bank_ID"].nil?.should_not be_truthy
|
284
|
+
result["Deposit_ID"].nil?.should_not be_truthy
|
285
|
+
result["Method"].nil?.should_not be_truthy
|
286
|
+
end
|
287
|
+
|
288
|
+
context 'with all required options' do
|
289
|
+
let(:response) { OpenStruct.new(status: 200, body: nil ) }
|
290
|
+
before { allow(GMO).to receive(:make_request) { response } }
|
291
|
+
|
292
|
+
it "makes request with correct parameters", :vcr do
|
293
|
+
path = "/api/DepositRegistration.idPass"
|
294
|
+
args = {
|
295
|
+
"Method" => 2,
|
296
|
+
"Bank_ID" => "bank00001",
|
297
|
+
"Deposit_ID" => "dep00001",
|
298
|
+
"Shop_ID" => @service.shop_id,
|
299
|
+
"Shop_Pass" => @service.shop_pass
|
300
|
+
}
|
301
|
+
verb = "post"
|
302
|
+
options = { :host => @service.host }
|
303
|
+
expect(GMO).to receive(:make_request).with(path, args, verb, options)
|
304
|
+
end
|
305
|
+
|
306
|
+
after { do_api_call }
|
307
|
+
end
|
308
|
+
|
309
|
+
it "got error if missing options", :vcr do
|
310
|
+
lambda {
|
311
|
+
result = @service.cancel_deposit()
|
312
|
+
}.should raise_error("Required bank_id, deposit_id were not provided.")
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
describe "#search_deposit" do
|
317
|
+
let(:do_api_call) { @service.search_deposit(:deposit_id => "dep00001") }
|
318
|
+
|
319
|
+
it "gets data about a deposit", :vcr do
|
320
|
+
result = do_api_call
|
321
|
+
result["Bank_ID"].nil?.should_not be_truthy
|
322
|
+
result["Deposit_ID"].nil?.should_not be_truthy
|
323
|
+
result["Bank_Name"].nil?.should_not be_truthy
|
324
|
+
result["Bank_Code"].nil?.should_not be_truthy
|
325
|
+
result["Branch_Name"].nil?.should_not be_truthy
|
326
|
+
result["Branch_Code"].nil?.should_not be_truthy
|
327
|
+
result["Account_Type"].nil?.should_not be_truthy
|
328
|
+
result["Account_Number"].nil?.should_not be_truthy
|
329
|
+
result["Account_Name"].nil?.should_not be_truthy
|
330
|
+
result["Free"].nil?.should_not be_truthy
|
331
|
+
result["Amount"].nil?.should_not be_truthy
|
332
|
+
result["Bank_Fee"].nil?.should_not be_truthy
|
333
|
+
result["Result"].nil?.should_not be_truthy
|
334
|
+
result["Branch_Code_Jpbank"].nil?.should_not be_truthy
|
335
|
+
result["Account_Number_Jpbank"].nil?.should_not be_truthy
|
336
|
+
result["Deposit_Date"].nil?.should_not be_truthy
|
337
|
+
result["Result_Detail"].nil?.should_not be_truthy
|
338
|
+
end
|
339
|
+
|
340
|
+
context 'with all required options' do
|
341
|
+
let(:response) { OpenStruct.new(status: 200, body: nil ) }
|
342
|
+
before { allow(GMO).to receive(:make_request) { response } }
|
343
|
+
|
344
|
+
it "makes request with correct parameters", :vcr do
|
345
|
+
path = "/api/DepositSearch.idPass"
|
346
|
+
args = {
|
347
|
+
"Deposit_ID" => "dep00001",
|
348
|
+
"Shop_ID" => @service.shop_id,
|
349
|
+
"Shop_Pass" => @service.shop_pass
|
350
|
+
}
|
351
|
+
verb = "post"
|
352
|
+
options = { :host => @service.host }
|
353
|
+
expect(GMO).to receive(:make_request).with(path, args, verb, options)
|
354
|
+
end
|
355
|
+
|
356
|
+
after { do_api_call }
|
357
|
+
end
|
358
|
+
|
359
|
+
it "got error if missing options", :vcr do
|
360
|
+
lambda {
|
361
|
+
result = @service.search_deposit()
|
362
|
+
}.should raise_error("Required deposit_id were not provided.")
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
describe "#search_balance" do
|
367
|
+
let(:do_api_call) { @service.search_balance }
|
368
|
+
it "gets data about balance", :vcr do
|
369
|
+
result = do_api_call
|
370
|
+
result["Shop_ID"].nil?.should_not be_truthy
|
371
|
+
result["Balance"].nil?.should_not be_truthy
|
372
|
+
result["Balance_Forecast"].nil?.should_not be_truthy
|
373
|
+
end
|
374
|
+
end
|
375
|
+
|
376
|
+
describe "#create_mail_deposit" do
|
377
|
+
let(:do_api_call) {
|
378
|
+
@service.create_mail_deposit({
|
379
|
+
:deposit_id => "dep00001",
|
380
|
+
:deposit_email => "anyutzy@demo.com",
|
381
|
+
:amount => 1000,
|
382
|
+
:deposit_account_name => "An Yutzy",
|
383
|
+
:expire => 5,
|
384
|
+
:deposit_shop_email => "anyutzy@demo.com"
|
385
|
+
})
|
386
|
+
}
|
387
|
+
|
388
|
+
it "gets data about a mail deposit", :vcr do
|
389
|
+
result = do_api_call
|
390
|
+
result["Deposit_ID"].nil?.should_not be_truthy
|
391
|
+
result["Method"].nil?.should_not be_truthy
|
392
|
+
result["Amount"].nil?.should_not be_truthy
|
393
|
+
result["Expire"].nil?.should_not be_truthy
|
394
|
+
end
|
395
|
+
|
396
|
+
context 'with all required options' do
|
397
|
+
let(:response) { OpenStruct.new(status: 200, body: nil ) }
|
398
|
+
before { allow(GMO).to receive(:make_request) { response } }
|
399
|
+
|
400
|
+
it "makes request with correct parameters", :vcr do
|
401
|
+
path = "/api/MailDepositRegistration.idPass"
|
402
|
+
args = {
|
403
|
+
"Deposit_ID" => "dep00001",
|
404
|
+
"Mail_Address" => "anyutzy@demo.com",
|
405
|
+
"Amount" => 1000,
|
406
|
+
"Mail_Deposit_Account_Name" => "An Yutzy",
|
407
|
+
"Expire" => 5,
|
408
|
+
"Shop_Mail_Address" => "anyutzy@demo.com",
|
409
|
+
"Method" => 1,
|
410
|
+
"Shop_ID" => @service.shop_id,
|
411
|
+
"Shop_Pass" => @service.shop_pass
|
412
|
+
}
|
413
|
+
verb = "post"
|
414
|
+
options = { :host => @service.host }
|
415
|
+
expect(GMO).to receive(:make_request).with(path, args, verb, options)
|
416
|
+
end
|
417
|
+
|
418
|
+
after { do_api_call }
|
419
|
+
end
|
420
|
+
|
421
|
+
it "got error if missing options", :vcr do
|
422
|
+
lambda {
|
423
|
+
result = @service.create_mail_deposit()
|
424
|
+
}.should raise_error("Required deposit_id, deposit_email, amount, deposit_account_name, expire, deposit_shop_email were not provided.")
|
425
|
+
end
|
426
|
+
end
|
427
|
+
|
428
|
+
describe "#cancel_mail_deposit" do
|
429
|
+
let(:do_api_call) { @service.cancel_mail_deposit(deposit_id: "dep00001") }
|
430
|
+
|
431
|
+
it "gets data about a mail deposit", :vcr do
|
432
|
+
result = do_api_call
|
433
|
+
result["Deposit_ID"].nil?.should_not be_truthy
|
434
|
+
result["Method"].nil?.should_not be_truthy
|
435
|
+
end
|
436
|
+
|
437
|
+
context 'with all required options' do
|
438
|
+
let(:response) { OpenStruct.new(status: 200, body: nil ) }
|
439
|
+
before { allow(GMO).to receive(:make_request) { response } }
|
440
|
+
|
441
|
+
it "makes request with correct parameters", :vcr do
|
442
|
+
path = "/api/MailDepositRegistration.idPass"
|
443
|
+
args = {
|
444
|
+
"Deposit_ID" => "dep00001",
|
445
|
+
"Method" => 2,
|
446
|
+
"Shop_ID" => @service.shop_id,
|
447
|
+
"Shop_Pass" => @service.shop_pass
|
448
|
+
}
|
449
|
+
verb = "post"
|
450
|
+
options = { :host => @service.host }
|
451
|
+
expect(GMO).to receive(:make_request).with(path, args, verb, options)
|
452
|
+
end
|
453
|
+
|
454
|
+
after { do_api_call }
|
455
|
+
end
|
456
|
+
|
457
|
+
it "got error if missing options", :vcr do
|
458
|
+
lambda {
|
459
|
+
result = @service.cancel_mail_deposit()
|
460
|
+
}.should raise_error("Required deposit_id were not provided.")
|
461
|
+
end
|
462
|
+
end
|
463
|
+
|
464
|
+
describe "#search_mail_deposit" do
|
465
|
+
let(:do_api_call) { @service.search_mail_deposit(deposit_id: "dep00001") }
|
466
|
+
|
467
|
+
it "gets data about a mail deposit", :vcr do
|
468
|
+
result = do_api_call
|
469
|
+
result["Deposit_ID"].nil?.should_not be_truthy
|
470
|
+
result["Mail_Address"].nil?.should_not be_truthy
|
471
|
+
result["Shop_Mail_Address"].nil?.should_not be_truthy
|
472
|
+
result["Account_Name"].nil?.should_not be_truthy
|
473
|
+
result["Amount"].nil?.should_not be_truthy
|
474
|
+
result["Expire"].nil?.should_not be_truthy
|
475
|
+
result["Status"].nil?.should_not be_truthy
|
476
|
+
end
|
477
|
+
|
478
|
+
context 'with all required options' do
|
479
|
+
let(:response) { OpenStruct.new(status: 200, body: nil ) }
|
480
|
+
before { allow(GMO).to receive(:make_request) { response } }
|
481
|
+
|
482
|
+
it "makes request with correct parameters", :vcr do
|
483
|
+
path = "/api/MailDepositSearch.idPass"
|
484
|
+
args = {
|
485
|
+
"Deposit_ID" => "dep00001",
|
486
|
+
"Shop_ID" => @service.shop_id,
|
487
|
+
"Shop_Pass" => @service.shop_pass
|
488
|
+
}
|
489
|
+
verb = "post"
|
490
|
+
options = { :host => @service.host }
|
491
|
+
expect(GMO).to receive(:make_request).with(path, args, verb, options)
|
492
|
+
end
|
493
|
+
|
494
|
+
after { do_api_call }
|
495
|
+
end
|
496
|
+
|
497
|
+
it "got error if missing options", :vcr do
|
498
|
+
lambda {
|
499
|
+
result = @service.search_mail_deposit()
|
500
|
+
}.should raise_error("Required deposit_id were not provided.")
|
501
|
+
end
|
502
|
+
end
|
503
|
+
|
504
|
+
end
|