amazon_pay 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,875 @@
1
+ require 'time'
2
+
3
+ module AmazonPay
4
+
5
+ # AmazonPay API
6
+ #
7
+ # This client allows you to make all the necessary API calls
8
+ # to integrate with AmazonPay. This client only
9
+ # uses the standard Ruby library and is not dependant on Rails.
10
+ class Client
11
+
12
+ attr_reader(
13
+ :merchant_id,
14
+ :access_key,
15
+ :secret_key,
16
+ :sandbox,
17
+ :currency_code,
18
+ :region,
19
+ :platform_id,
20
+ :throttle,
21
+ :application_name,
22
+ :application_version)
23
+
24
+ attr_accessor(
25
+ :sandbox,
26
+ :proxy_addr,
27
+ :proxy_port,
28
+ :proxy_user,
29
+ :proxy_pass)
30
+
31
+ # API keys are located at:
32
+ # @see https://sellercentral.amazon.com
33
+ # @param merchant_id [String]
34
+ # @param access_key [String]
35
+ # @param secret_key [String]
36
+ # @optional sandbox [Boolean] Default: false
37
+ # @optional currency_code [Symbol] Default: :usd
38
+ # @optional region [Symbol] Default: :na
39
+ # @optional platform_id [String] Default: nil
40
+ # @optional throttle [Boolean] Default: true
41
+ # @optional application_name [String]
42
+ # @optional application_version [String]
43
+ # @optional proxy_addr [String]
44
+ # @optional proxy_port [String]
45
+ # @optional proxy_user [String]
46
+ # @optional proxy_pass [String]
47
+ def initialize(
48
+ merchant_id,
49
+ access_key,
50
+ secret_key,
51
+ sandbox: false,
52
+ currency_code: :usd,
53
+ region: :na,
54
+ platform_id: nil,
55
+ throttle: true,
56
+ application_name: nil,
57
+ application_version: nil,
58
+ proxy_addr: :ENV,
59
+ proxy_port: nil,
60
+ proxy_user: nil,
61
+ proxy_pass: nil)
62
+
63
+ @merchant_id = merchant_id
64
+ @access_key = access_key
65
+ @secret_key = secret_key
66
+ @currency_code = currency_code.to_s.upcase
67
+ @sandbox = sandbox
68
+ @sandbox_str = @sandbox ? 'OffAmazonPayments_Sandbox' : 'OffAmazonPayments'
69
+ @region = region
70
+ @mws_endpoint = region_hash[@region] ? region_hash[@region] : raise("Invalid Region Code. (#{@region})")
71
+ @platform_id = platform_id
72
+ @throttle = throttle
73
+ @application_name = application_name
74
+ @application_version = application_version
75
+ @proxy_addr = proxy_addr
76
+ @proxy_port = proxy_port
77
+ @proxy_user = proxy_user
78
+ @proxy_pass = proxy_pass
79
+
80
+ @default_hash = {
81
+ 'AWSAccessKeyId' => @access_key,
82
+ 'SignatureMethod' => 'HmacSHA256',
83
+ 'SignatureVersion' => '2',
84
+ 'Timestamp' => Time.now.utc.iso8601,
85
+ 'Version' => AmazonPay::API_VERSION
86
+ }
87
+
88
+ @default_hash['PlatformId'] = @platform_id if @platform_id
89
+ end
90
+
91
+ # The GetServiceStatus operation returns the operational status of the AmazonPay API
92
+ # section of Amazon Marketplace Web Service (Amazon MWS). Status values are GREEN, GREEN_I, YELLOW, and RED.
93
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201752110
94
+ def get_service_status
95
+ parameters = {
96
+ 'Action' => 'GetServiceStatus'
97
+ }
98
+
99
+ operation(parameters, {})
100
+ end
101
+
102
+ # Creates an order reference for the given object
103
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201751670
104
+ # @param id [String]
105
+ # @param id_type [String]
106
+ # @optional inherit_shipping_address [Boolean]
107
+ # @optional confirm_now [Boolean]
108
+ # @optional amount [String] (required when confirm_now is set to true)
109
+ # @optional currency_code [String]
110
+ # @optional platform_id [String]
111
+ # @optional seller_note [String]
112
+ # @optional seller_order_id [String]
113
+ # @optional store_name [String]
114
+ # @optional custom_information [String]
115
+ # @optional merchant_id [String]
116
+ # @optional mws_auth_token [String]
117
+ def create_order_reference_for_id(
118
+ id,
119
+ id_type,
120
+ inherit_shipping_address: nil,
121
+ confirm_now: nil,
122
+ amount: nil,
123
+ currency_code: @currency_code,
124
+ platform_id: nil,
125
+ seller_note: nil,
126
+ seller_order_id: nil,
127
+ store_name: nil,
128
+ custom_information: nil,
129
+ merchant_id: @merchant_id,
130
+ mws_auth_token: nil)
131
+
132
+ parameters = {
133
+ 'Action' => 'CreateOrderReferenceForId',
134
+ 'SellerId' => merchant_id,
135
+ 'Id' => id,
136
+ 'IdType' => id_type
137
+ }
138
+
139
+ optional = {
140
+ 'InheritShippingAddress' => inherit_shipping_address,
141
+ 'ConfirmNow' => confirm_now,
142
+ 'OrderReferenceAttributes.OrderTotal.Amount' => amount,
143
+ 'OrderReferenceAttributes.OrderTotal.CurrencyCode' => currency_code,
144
+ 'OrderReferenceAttributes.PlatformId' => platform_id,
145
+ 'OrderReferenceAttributes.SellerNote' => seller_note,
146
+ 'OrderReferenceAttributes.SellerOrderAttributes.SellerOrderId' => seller_order_id,
147
+ 'OrderReferenceAttributes.SellerOrderAttributes.StoreName' => store_name,
148
+ 'OrderReferenceAttributes.SellerOrderAttributes.CustomInformation' => custom_information,
149
+ 'MWSAuthToken' => mws_auth_token
150
+ }
151
+
152
+ operation(parameters, optional)
153
+ end
154
+
155
+ # Returns details about the Billing Agreement object and its current state
156
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201751690
157
+ # @param amazon_billing_agreement_id [String]
158
+ # @optional address_consent_token [String]
159
+ # @optional merchant_id [String]
160
+ # @optional mws_auth_token [String]
161
+ def get_billing_agreement_details(
162
+ amazon_billing_agreement_id,
163
+ address_consent_token: nil,
164
+ merchant_id: @merchant_id,
165
+ mws_auth_token: nil)
166
+
167
+ parameters = {
168
+ 'Action' => 'GetBillingAgreementDetails',
169
+ 'SellerId' => merchant_id,
170
+ 'AmazonBillingAgreementId' => amazon_billing_agreement_id
171
+ }
172
+
173
+ optional = {
174
+ 'AddressConsentToken' => address_consent_token,
175
+ 'MWSAuthToken' => mws_auth_token
176
+ }
177
+
178
+ operation(parameters, optional)
179
+ end
180
+
181
+ # Sets billing agreement details such as a description of the agreement
182
+ # and other information about the seller.
183
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201751700
184
+ # @param amazon_billing_agreement_id [String]
185
+ # @optional platform_id [String]
186
+ # @optional seller_note [String]
187
+ # @optional seller_billing_agreement_id [String]
188
+ # @optional custom_information [String]
189
+ # @optional store_name [String]
190
+ # @optional merchant_id [String]
191
+ # @optional mws_auth_token [String]
192
+ def set_billing_agreement_details(
193
+ amazon_billing_agreement_id,
194
+ platform_id: nil,
195
+ seller_note: nil,
196
+ seller_billing_agreement_id: nil,
197
+ custom_information: nil,
198
+ store_name: nil,
199
+ merchant_id: @merchant_id,
200
+ mws_auth_token: nil)
201
+
202
+ parameters = {
203
+ 'Action' => 'SetBillingAgreementDetails',
204
+ 'SellerId' => merchant_id,
205
+ 'AmazonBillingAgreementId' => amazon_billing_agreement_id
206
+ }
207
+
208
+ optional = {
209
+ 'BillingAgreementAttributes.PlatformId' => platform_id,
210
+ 'BillingAgreementAttributes.SellerNote' => seller_note,
211
+ 'BillingAgreementAttributes.SellerBillingAgreementAttributes.SellerBillingAgreementId' => seller_billing_agreement_id,
212
+ 'BillingAgreementAttributes.SellerBillingAgreementAttributes.CustomInformation' => custom_information,
213
+ 'BillingAgreementAttributes.SellerBillingAgreementAttributes.StoreName' => store_name,
214
+ 'MWSAuthToken' => mws_auth_token
215
+ }
216
+
217
+ operation(parameters, optional)
218
+ end
219
+
220
+ # Confirms that the billing agreement is free of constraints and all
221
+ # required information has been set on the billing agreement
222
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201751710
223
+ # @param amazon_billing_agreement_id [String]
224
+ # @optional merchant_id [String]
225
+ # @optional mws_auth_token [String]
226
+ def confirm_billing_agreement(
227
+ amazon_billing_agreement_id,
228
+ merchant_id: @merchant_id,
229
+ mws_auth_token: nil)
230
+
231
+ parameters = {
232
+ 'Action' => 'ConfirmBillingAgreement',
233
+ 'SellerId' => merchant_id,
234
+ 'AmazonBillingAgreementId' => amazon_billing_agreement_id
235
+ }
236
+
237
+ optional = {
238
+ 'MWSAuthToken' => mws_auth_token
239
+ }
240
+
241
+ operation(parameters, optional)
242
+ end
243
+
244
+ # Validates the status of the BillingAgreement object and the payment
245
+ # method associated with it
246
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201751720
247
+ # @param amazon_billing_agreement_id [String]
248
+ # @optional merchant_id [String]
249
+ # @optional mws_auth_token [String]
250
+ def validate_billing_agreement(
251
+ amazon_billing_agreement_id,
252
+ merchant_id: @merchant_id,
253
+ mws_auth_token: nil)
254
+
255
+ parameters = {
256
+ 'Action' => 'ValidateBillingAgreement',
257
+ 'SellerId' => merchant_id,
258
+ 'AmazonBillingAgreementId' => amazon_billing_agreement_id
259
+ }
260
+
261
+ optional = {
262
+ 'MWSAuthToken' => mws_auth_token
263
+ }
264
+
265
+ operation(parameters, optional)
266
+ end
267
+
268
+ # Reserves a specified amount against the payment method(s) stored in the
269
+ # billing agreement
270
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201751940
271
+ # @param amazon_billing_agreement_id [String]
272
+ # @param authorization_reference_id [String]
273
+ # @param amount [String]
274
+ # @optional currency_code [String]
275
+ # @optional seller_authorization_note [String]
276
+ # @optional transaction_timeout [Integer]
277
+ # @optional capture_now [Boolean]
278
+ # @optional soft_descriptor [String]
279
+ # @optional seller_note [String]
280
+ # @optional platform_id [String]
281
+ # @optional custom_information [String]
282
+ # @optional seller_order_id [String]
283
+ # @optional store_name [String]
284
+ # @optional inherit_shipping_address [Boolean]
285
+ # @optional merchant_id [String]
286
+ # @optional mws_auth_token [String]
287
+ def authorize_on_billing_agreement(
288
+ amazon_billing_agreement_id,
289
+ authorization_reference_id,
290
+ amount,
291
+ currency_code: @currency_code,
292
+ seller_authorization_note: nil,
293
+ transaction_timeout: nil,
294
+ capture_now: false,
295
+ soft_descriptor: nil,
296
+ seller_note: nil,
297
+ platform_id: nil,
298
+ custom_information: nil,
299
+ seller_order_id: nil,
300
+ store_name: nil,
301
+ inherit_shipping_address: nil,
302
+ merchant_id: @merchant_id,
303
+ mws_auth_token: nil)
304
+
305
+ parameters = {
306
+ 'Action' => 'AuthorizeOnBillingAgreement',
307
+ 'SellerId' => merchant_id,
308
+ 'AmazonBillingAgreementId' => amazon_billing_agreement_id,
309
+ 'AuthorizationReferenceId' => authorization_reference_id,
310
+ 'AuthorizationAmount.Amount' => amount,
311
+ 'AuthorizationAmount.CurrencyCode' => currency_code
312
+ }
313
+
314
+ optional = {
315
+ 'SellerAuthorizationNote' => seller_authorization_note,
316
+ 'TransactionTimeout' => transaction_timeout,
317
+ 'CaptureNow' => capture_now,
318
+ 'SoftDescriptor' => soft_descriptor,
319
+ 'SellerNote' => seller_note,
320
+ 'PlatformId' => platform_id,
321
+ 'SellerOrderAttributes.CustomInformation' => custom_information,
322
+ 'SellerOrderAttributes.SellerOrderId' => seller_order_id,
323
+ 'SellerOrderAttributes.StoreName' => store_name,
324
+ 'InheritShippingAddress' => inherit_shipping_address,
325
+ 'MWSAuthToken' => mws_auth_token
326
+ }
327
+
328
+ operation(parameters, optional)
329
+ end
330
+
331
+ # Confirms that you want to terminate the billing agreement with the buyer
332
+ # and that you do not expect to create any new order references or
333
+ # authorizations on this billing agreement
334
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201751950
335
+ # @param amazon_billing_agreement_id [String]
336
+ # @optional closure_reason [String]
337
+ # @optional merchant_id [String]
338
+ # @optional mws_auth_token [String]
339
+ def close_billing_agreement(
340
+ amazon_billing_agreement_id,
341
+ closure_reason: nil,
342
+ merchant_id: @merchant_id,
343
+ mws_auth_token: nil)
344
+
345
+ parameters = {
346
+ 'Action' => 'CloseBillingAgreement',
347
+ 'SellerId' => merchant_id,
348
+ 'AmazonBillingAgreementId' => amazon_billing_agreement_id
349
+ }
350
+
351
+ optional = {
352
+ 'ClosureReason' => closure_reason,
353
+ 'MWSAuthToken' => mws_auth_token
354
+ }
355
+
356
+ operation(parameters, optional)
357
+ end
358
+
359
+ # Returns details about the Order Reference object and its current state
360
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201751970
361
+ # @param amazon_order_reference_id [String]
362
+ # @optional address_consent_token [String]
363
+ # @optional merchant_id [String]
364
+ # @optional mws_auth_token [String]
365
+ def get_order_reference_details(
366
+ amazon_order_reference_id,
367
+ address_consent_token: nil,
368
+ merchant_id: @merchant_id,
369
+ mws_auth_token: nil)
370
+
371
+ parameters = {
372
+ 'Action' => 'GetOrderReferenceDetails',
373
+ 'SellerId' => merchant_id,
374
+ 'AmazonOrderReferenceId' => amazon_order_reference_id
375
+ }
376
+
377
+ optional = {
378
+ 'AddressConsentToken' => address_consent_token,
379
+ 'MWSAuthToken' => mws_auth_token
380
+ }
381
+
382
+ operation(parameters, optional)
383
+ end
384
+
385
+ # Sets order reference details such as the order total and a description
386
+ # for the order
387
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201751960
388
+ # @param amazon_order_reference_id [String]
389
+ # @param amount [String]
390
+ # @optional currency_code [String]
391
+ # @optional platform_id [String]
392
+ # @optional seller_note [String]
393
+ # @optional seller_order_id [String]
394
+ # @optional store_name [String]
395
+ # @optional custom_information [String]
396
+ # @optional merchant_id [String]
397
+ # @optional mws_auth_token [String]
398
+ def set_order_reference_details(
399
+ amazon_order_reference_id,
400
+ amount,
401
+ currency_code: @currency_code,
402
+ platform_id: nil,
403
+ seller_note: nil,
404
+ seller_order_id: nil,
405
+ store_name: nil,
406
+ custom_information: nil,
407
+ merchant_id: @merchant_id,
408
+ mws_auth_token: nil)
409
+
410
+ parameters = {
411
+ 'Action' => 'SetOrderReferenceDetails',
412
+ 'SellerId' => merchant_id,
413
+ 'AmazonOrderReferenceId' => amazon_order_reference_id,
414
+ 'OrderReferenceAttributes.OrderTotal.Amount' => amount,
415
+ 'OrderReferenceAttributes.OrderTotal.CurrencyCode' => currency_code
416
+ }
417
+
418
+ optional = {
419
+ 'OrderReferenceAttributes.PlatformId' => platform_id,
420
+ 'OrderReferenceAttributes.SellerNote' => seller_note,
421
+ 'OrderReferenceAttributes.SellerOrderAttributes.SellerOrderId' => seller_order_id,
422
+ 'OrderReferenceAttributes.SellerOrderAttributes.StoreName' => store_name,
423
+ 'OrderReferenceAttributes.SellerOrderAttributes.CustomInformation' => custom_information,
424
+ 'MWSAuthToken' => mws_auth_token
425
+ }
426
+
427
+ operation(parameters, optional)
428
+ end
429
+
430
+ # Confirms that the order reference is free of constraints and all required
431
+ # information has been set on the order reference
432
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201751980
433
+ # @param amazon_order_reference_id [String]
434
+ # @optional merchant_id [String]
435
+ # @optional mws_auth_token [String]
436
+ def confirm_order_reference(
437
+ amazon_order_reference_id,
438
+ merchant_id: @merchant_id,
439
+ mws_auth_token: nil)
440
+
441
+ parameters = {
442
+ 'Action' => 'ConfirmOrderReference',
443
+ 'SellerId' => merchant_id,
444
+ 'AmazonOrderReferenceId' => amazon_order_reference_id
445
+ }
446
+
447
+ optional = {
448
+ 'MWSAuthToken' => mws_auth_token
449
+ }
450
+
451
+ operation(parameters, optional)
452
+ end
453
+
454
+ # Cancels a previously confirmed order reference
455
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201751990
456
+ # @param amazon_order_reference_id [String]
457
+ # @optional cancelation_reason [String]
458
+ # @optional merchant_id [String]
459
+ # @optional mws_auth_token [String]
460
+ def cancel_order_reference(
461
+ amazon_order_reference_id,
462
+ cancelation_reason: nil,
463
+ merchant_id: @merchant_id,
464
+ mws_auth_token: nil)
465
+
466
+ parameters = {
467
+ 'Action' => 'CancelOrderReference',
468
+ 'SellerId' => merchant_id,
469
+ 'AmazonOrderReferenceId' => amazon_order_reference_id
470
+ }
471
+
472
+ optional = {
473
+ 'CancelationReason' => cancelation_reason,
474
+ 'MWSAuthToken' => mws_auth_token
475
+ }
476
+
477
+ operation(parameters, optional)
478
+ end
479
+
480
+ # Reserves a specified amount against the payment method(s) stored in the
481
+ # order reference
482
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201752010
483
+ # @param amazon_order_reference_id [String]
484
+ # @param authorization_reference_id [String]
485
+ # @param amount [String]
486
+ # @optional currency_code [String]
487
+ # @optional seller_authorization_note [String]
488
+ # @optional transaction_timeout [Integer]
489
+ # @optional capture_now [Boolean]
490
+ # @optional soft_descriptor [String]
491
+ # @optional provider_credit_details [Array of Hash]
492
+ # @optional merchant_id [String]
493
+ # @optional mws_auth_token [String]
494
+ def authorize(
495
+ amazon_order_reference_id,
496
+ authorization_reference_id,
497
+ amount,
498
+ currency_code: @currency_code,
499
+ seller_authorization_note: nil,
500
+ transaction_timeout: nil,
501
+ capture_now: nil,
502
+ soft_descriptor: nil,
503
+ provider_credit_details: nil,
504
+ merchant_id: @merchant_id,
505
+ mws_auth_token: nil)
506
+
507
+ parameters = {
508
+ 'Action' => 'Authorize',
509
+ 'SellerId' => merchant_id,
510
+ 'AmazonOrderReferenceId' => amazon_order_reference_id,
511
+ 'AuthorizationReferenceId' => authorization_reference_id,
512
+ 'AuthorizationAmount.Amount' => amount,
513
+ 'AuthorizationAmount.CurrencyCode' => currency_code
514
+ }
515
+
516
+ optional = {
517
+ 'SellerAuthorizationNote' => seller_authorization_note,
518
+ 'TransactionTimeout' => transaction_timeout,
519
+ 'CaptureNow' => capture_now,
520
+ 'SoftDescriptor' => soft_descriptor,
521
+ 'MWSAuthToken' => mws_auth_token
522
+ }
523
+
524
+ optional.merge!(set_provider_credit_details(provider_credit_details)) if provider_credit_details
525
+
526
+ operation(parameters, optional)
527
+ end
528
+
529
+ # Returns the status of a particular authorization and the total amount
530
+ # captured on the authorization
531
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201752030
532
+ # @param amazon_authorization_id [String]
533
+ # @optional merchant_id [String]
534
+ # @optional mws_auth_token [String]
535
+ def get_authorization_details(
536
+ amazon_authorization_id,
537
+ merchant_id: @merchant_id,
538
+ mws_auth_token: nil)
539
+
540
+ parameters = {
541
+ 'Action' => 'GetAuthorizationDetails',
542
+ 'SellerId' => merchant_id,
543
+ 'AmazonAuthorizationId' => amazon_authorization_id
544
+ }
545
+
546
+ optional = {
547
+ 'MWSAuthToken' => mws_auth_token
548
+ }
549
+
550
+ operation(parameters, optional)
551
+ end
552
+
553
+ # Captures funds from an authorized payment instrument.
554
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201752040
555
+ # @param amazon_authorization_id [String]
556
+ # @param capture_reference_id [String]
557
+ # @param amount [String]
558
+ # @optional currency_code [String]
559
+ # @optional seller_capture_note [String]
560
+ # @optional soft_descriptor [String]
561
+ # @optional provider_credit_details [Array of Hash]
562
+ # @optional merchant_id [String]
563
+ # @optional mws_auth_token [String]
564
+ def capture(
565
+ amazon_authorization_id,
566
+ capture_reference_id,
567
+ amount,
568
+ currency_code: @currency_code,
569
+ seller_capture_note: nil,
570
+ soft_descriptor: nil,
571
+ provider_credit_details: nil,
572
+ merchant_id: @merchant_id,
573
+ mws_auth_token: nil)
574
+
575
+ parameters = {
576
+ 'Action' => 'Capture',
577
+ 'SellerId' => merchant_id,
578
+ 'AmazonAuthorizationId' => amazon_authorization_id,
579
+ 'CaptureReferenceId' => capture_reference_id,
580
+ 'CaptureAmount.Amount' => amount,
581
+ 'CaptureAmount.CurrencyCode' => currency_code
582
+ }
583
+
584
+ optional = {
585
+ 'SellerCaptureNote' => seller_capture_note,
586
+ 'SoftDescriptor' => soft_descriptor,
587
+ 'MWSAuthToken' => mws_auth_token
588
+ }
589
+
590
+ optional.merge!(set_provider_credit_details(provider_credit_details)) if provider_credit_details
591
+
592
+ operation(parameters, optional)
593
+ end
594
+
595
+ # Returns the status of a particular capture and the total amount refunded
596
+ # on the capture
597
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201752060
598
+ # @param amazon_capture_id [String]
599
+ # @optional merchant_id [String]
600
+ # @optional mws_auth_token [String]
601
+ def get_capture_details(
602
+ amazon_capture_id,
603
+ merchant_id: @merchant_id,
604
+ mws_auth_token: nil)
605
+
606
+ parameters = {
607
+ 'Action' => 'GetCaptureDetails',
608
+ 'SellerId' => merchant_id,
609
+ 'AmazonCaptureId' => amazon_capture_id
610
+ }
611
+
612
+ optional = {
613
+ 'MWSAuthToken' => mws_auth_token
614
+ }
615
+
616
+ operation(parameters, optional)
617
+ end
618
+
619
+ # Refunds a previously captured amount
620
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201752080
621
+ # @param amazon_capture_id [String]
622
+ # @param refund_reference_id [String]
623
+ # @param amount [String]
624
+ # @optional currency_code [String]
625
+ # @optional seller_refund_note [String]
626
+ # @optional soft_descriptor [String]
627
+ # @optional provider_credit_reversal_details [Array of Hash]
628
+ # @optional merchant_id [String]
629
+ # @optional mws_auth_token [String]
630
+ def refund(
631
+ amazon_capture_id,
632
+ refund_reference_id,
633
+ amount,
634
+ currency_code: @currency_code,
635
+ seller_refund_note: nil,
636
+ soft_descriptor: nil,
637
+ provider_credit_reversal_details: nil,
638
+ merchant_id: @merchant_id,
639
+ mws_auth_token: nil)
640
+
641
+ parameters = {
642
+ 'Action' => 'Refund',
643
+ 'SellerId' => merchant_id,
644
+ 'AmazonCaptureId' => amazon_capture_id,
645
+ 'RefundReferenceId' => refund_reference_id,
646
+ 'RefundAmount.Amount' => amount,
647
+ 'RefundAmount.CurrencyCode' => currency_code
648
+ }
649
+
650
+ optional = {
651
+ 'SellerRefundNote' => seller_refund_note,
652
+ 'SoftDescriptor' => soft_descriptor,
653
+ 'MWSAuthToken' => mws_auth_token
654
+ }
655
+
656
+ optional.merge!(set_provider_credit_reversal_details(provider_credit_reversal_details)) if provider_credit_reversal_details
657
+
658
+ operation(parameters, optional)
659
+ end
660
+
661
+ # Returns the status of a particular refund
662
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201752100
663
+ # @param amazon_refund_id [String]
664
+ # @optional merchant_id [String]
665
+ # @optional mws_auth_token [String]
666
+ def get_refund_details(
667
+ amazon_refund_id,
668
+ merchant_id: @merchant_id,
669
+ mws_auth_token: nil)
670
+
671
+ parameters = {
672
+ 'Action' => 'GetRefundDetails',
673
+ 'SellerId' => merchant_id,
674
+ 'AmazonRefundId' => amazon_refund_id
675
+ }
676
+
677
+ optional = {
678
+ 'MWSAuthToken' => mws_auth_token
679
+ }
680
+
681
+ operation(parameters, optional)
682
+ end
683
+
684
+ # Closes an authorization
685
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201752070
686
+ # @param amazon_authorization_id [String]
687
+ # @optional closure_reason [String]
688
+ # @optional merchant_id [String]
689
+ # @optional mws_auth_token [String]
690
+ def close_authorization(
691
+ amazon_authorization_id,
692
+ closure_reason: nil,
693
+ merchant_id: @merchant_id,
694
+ mws_auth_token: nil)
695
+
696
+ parameters = {
697
+ 'Action' => 'CloseAuthorization',
698
+ 'SellerId' => merchant_id,
699
+ 'AmazonAuthorizationId' => amazon_authorization_id
700
+ }
701
+
702
+ optional = {
703
+ 'ClosureReason' => closure_reason,
704
+ 'MWSAuthToken' => mws_auth_token
705
+ }
706
+
707
+ operation(parameters, optional)
708
+ end
709
+
710
+ # Confirms that an order reference has been fulfilled (fully or partially)
711
+ # and that you do not expect to create any new authorizations on this
712
+ # order reference
713
+ # @see https://pay.amazon.com/documentation/apireference/201751630#201752000
714
+ # @param amazon_order_reference_id [String]
715
+ # @optional closure_reason [String]
716
+ # @optional merchant_id [String]
717
+ # @optional mws_auth_token [String]
718
+ def close_order_reference(
719
+ amazon_order_reference_id,
720
+ closure_reason: nil,
721
+ merchant_id: @merchant_id,
722
+ mws_auth_token: nil)
723
+
724
+ parameters = {
725
+ 'Action' => 'CloseOrderReference',
726
+ 'SellerId' => merchant_id,
727
+ 'AmazonOrderReferenceId' => amazon_order_reference_id
728
+ }
729
+
730
+ optional = {
731
+ 'ClosureReason' => closure_reason,
732
+ 'MWSAuthToken' => mws_auth_token
733
+ }
734
+
735
+ operation(parameters, optional)
736
+ end
737
+
738
+ # @param amazon_provider_credit_id [String]
739
+ # @optional merchant_id [String]
740
+ # @optional mws_auth_token [String]
741
+ def get_provider_credit_details(
742
+ amazon_provider_credit_id,
743
+ merchant_id: @merchant_id,
744
+ mws_auth_token: nil)
745
+
746
+ parameters = {
747
+ 'Action' => 'GetProviderCreditDetails',
748
+ 'SellerId' => merchant_id,
749
+ 'AmazonProviderCreditId' => amazon_provider_credit_id
750
+ }
751
+
752
+ optional = {
753
+ 'MWSAuthToken' => mws_auth_token
754
+ }
755
+
756
+ operation(parameters, optional)
757
+ end
758
+
759
+ # @param amazon_provider_credit_reversal_id [String]
760
+ # @optional merchant_id [String]
761
+ # @optional mws_auth_token [String]
762
+ def get_provider_credit_reversal_details(
763
+ amazon_provider_credit_reversal_id,
764
+ merchant_id: @merchant_id,
765
+ mws_auth_token: nil)
766
+
767
+ parameters = {
768
+ 'Action' => 'GetProviderCreditReversalDetails',
769
+ 'SellerId' => merchant_id,
770
+ 'AmazonProviderCreditReversalId' => amazon_provider_credit_reversal_id
771
+ }
772
+
773
+ optional = {
774
+ 'MWSAuthToken' => mws_auth_token
775
+ }
776
+
777
+ operation(parameters, optional)
778
+ end
779
+
780
+ # @param amazon_provider_credit_id [String]
781
+ # @param credit_reversal_reference_id [String]
782
+ # @param amount [String]
783
+ # @optional currency_code [String]
784
+ # @optional credit_reversal_note [String]
785
+ # @optional merchant_id [String]
786
+ # @optional mws_auth_token [String]
787
+ def reverse_provider_credit(
788
+ amazon_provider_credit_id,
789
+ credit_reversal_reference_id,
790
+ amount,
791
+ currency_code: @currency_code,
792
+ credit_reversal_note: nil,
793
+ merchant_id: @merchant_id,
794
+ mws_auth_token: nil)
795
+
796
+ parameters = {
797
+ 'Action' => 'ReverseProviderCredit',
798
+ 'SellerId' => merchant_id,
799
+ 'AmazonProviderCreditId' => amazon_provider_credit_id,
800
+ 'CreditReversalReferenceId' => credit_reversal_reference_id,
801
+ 'CreditReversalAmount.Amount' => amount,
802
+ 'CreditReversalAmount.CurrencyCode' => currency_code
803
+ }
804
+
805
+ optional = {
806
+ 'CreditReversalNote' => credit_reversal_note,
807
+ 'MWSAuthToken' => mws_auth_token
808
+ }
809
+
810
+ operation(parameters, optional)
811
+ end
812
+
813
+ private
814
+
815
+ def region_hash
816
+ {
817
+ :jp => 'mws.amazonservices.jp',
818
+ :uk => 'mws-eu.amazonservices.com',
819
+ :de => 'mws-eu.amazonservices.com',
820
+ :eu => 'mws-eu.amazonservices.com',
821
+ :us => 'mws.amazonservices.com',
822
+ :na => 'mws.amazonservices.com'
823
+ }
824
+ end
825
+
826
+ # This method builds the provider credit details hash
827
+ # that will be combined with either the authorize or capture
828
+ # API call.
829
+ def set_provider_credit_details(provider_credit_details)
830
+ member_details = {}
831
+ provider_credit_details.each_with_index { |val, index|
832
+ member = index + 1
833
+ member_details["ProviderCreditList.member.#{member}.ProviderId"] = val[:provider_id]
834
+ member_details["ProviderCreditList.member.#{member}.CreditAmount.Amount"] = val[:amount]
835
+ member_details["ProviderCreditList.member.#{member}.CreditAmount.CurrencyCode"] = val[:currency_code]
836
+ }
837
+
838
+ return member_details
839
+ end
840
+
841
+ # This method builds the provider credit reversal
842
+ # details hash that will be combined with the refund
843
+ # API call.
844
+ def set_provider_credit_reversal_details(provider_credit_reversal_details)
845
+ member_details = {}
846
+ provider_credit_reversal_details.each_with_index { |val, index|
847
+ member = index + 1
848
+ member_details["ProviderCreditReversalList.member.#{member}.ProviderId"] = val[:provider_id]
849
+ member_details["ProviderCreditReversalList.member.#{member}.CreditReversalAmount.Amount"] = val[:amount]
850
+ member_details["ProviderCreditReversalList.member.#{member}.CreditReversalAmount.CurrencyCode"] = val[:currency_code]
851
+ }
852
+
853
+ return member_details
854
+ end
855
+
856
+ def operation(parameters, optional)
857
+ AmazonPay::Request.new(
858
+ parameters,
859
+ optional,
860
+ @default_hash,
861
+ @mws_endpoint,
862
+ @sandbox_str,
863
+ @secret_key,
864
+ @proxy_addr,
865
+ @proxy_port,
866
+ @proxy_user,
867
+ @proxy_pass,
868
+ @throttle,
869
+ @application_name,
870
+ @application_version).send_post
871
+ end
872
+
873
+ end
874
+
875
+ end