pcp-server-ruby-sdk 1.9.0 → 1.11.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 +4 -4
- data/CHANGELOG.md +12 -0
- data/README.md +1 -1
- data/api-definition.yaml +204 -9
- data/lib/PCP-server-Ruby-SDK/endpoints/payment_execution_api_client.rb +26 -0
- data/lib/PCP-server-Ruby-SDK/models/cancel_payment_request.rb +16 -4
- data/lib/PCP-server-Ruby-SDK/models/cart_item_invoice_data.rb +2 -1
- data/lib/PCP-server-Ruby-SDK/models/fund_split_request.rb +153 -0
- data/lib/PCP-server-Ruby-SDK/models/fund_split_response.rb +180 -0
- data/lib/PCP-server-Ruby-SDK/models/order_line_details_input.rb +14 -4
- data/lib/PCP-server-Ruby-SDK/models/payment_references_for_refund.rb +9 -2
- data/lib/PCP-server-Ruby-SDK/models/redirect_payment_method_specific_input.rb +10 -1
- data/lib/PCP-server-Ruby-SDK/models/redirect_payment_product900_specific_input.rb +183 -0
- data/lib/PCP-server-Ruby-SDK/version.rb +1 -1
- data/lib/PCP-server-Ruby-SDK.rb +3 -0
- data/package-lock.json +2 -2
- data/package.json +1 -1
- data/spec/endpoints/payment_execution_api_client_spec.rb +52 -0
- metadata +9 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e89a0ce54e0a015e5d996c8254813071f3e05b2621fe075944b9e9f2ea40a239
|
|
4
|
+
data.tar.gz: 7076f0fcb063887f9076ce2798702dc7fa5e25b8eef7b910c871477806c7fefd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cbfa4b1bf86b4ed13035f6e2a898ec80560d2a08d7bb95f771eb662176f7faa58ca6fef75408b1c74e05dd188880ee69f38970d6fffb029a67adc0f354c00e48
|
|
7
|
+
data.tar.gz: fa301ebac3dc0f2cb457fa2cbca283e0e300b08f10d17457064a75feebf6948cc73500de91dbdbadb0a827151edc353ce964c6fb9a476a8555227d259f0b8203
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
# [1.11.0](https://github.com/PAYONE-GmbH/PCP-ServerSDK-ruby/compare/v1.10.0...v1.11.0) (2026-06-15)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* feat: update API version to 1.56.0 ([a70747bcc908f5f27798eb24770f4e2d015a8977](https://github.com/PAYONE-GmbH/PCP-ServerSDK-ruby/commit/a70747bcc908f5f27798eb24770f4e2d015a8977))
|
|
6
|
+
|
|
7
|
+
# [1.10.0](https://github.com/PAYONE-GmbH/PCP-ServerSDK-ruby/compare/v1.9.0...v1.10.0) (2026-05-22)
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* feat: update API version to 1.55.0 ([55d757f9427b16513b6c48bd9a8d7332d82bd886](https://github.com/PAYONE-GmbH/PCP-ServerSDK-ruby/commit/55d757f9427b16513b6c48bd9a8d7332d82bd886))
|
|
12
|
+
|
|
1
13
|
# [1.9.0](https://github.com/PAYONE-GmbH/PCP-ServerSDK-ruby/compare/v1.8.0...v1.9.0) (2026-04-29)
|
|
2
14
|
|
|
3
15
|
### Features
|
data/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|

|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
Welcome to the Ruby SDK for the PAYONE Commerce Platform (api-version 1.
|
|
9
|
+
Welcome to the Ruby SDK for the PAYONE Commerce Platform (api-version 1.56.0)! This repository contains a powerful, easy-to-use software development kit (SDK) designed to simplify the integration of online payment processing into your applications.
|
|
10
10
|
|
|
11
11
|
## Requirements
|
|
12
12
|
|
data/api-definition.yaml
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
openapi: "3.0.3"
|
|
2
2
|
|
|
3
3
|
info:
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.56.0
|
|
5
5
|
title: "Commerce Platform API"
|
|
6
6
|
description: |
|
|
7
7
|
RESTful API for the creation of Commerce Cases with Checkouts and the execution of Payments.
|
|
8
8
|
|
|
9
9
|
servers:
|
|
10
|
-
- url: "https://
|
|
10
|
+
- url: "https://api.commerce.payone.com"
|
|
11
11
|
description: Production URL
|
|
12
|
-
- url: "https://preprod.commerce
|
|
12
|
+
- url: "https://api.preprod.commerce.payone.com"
|
|
13
13
|
description: Pre-Production URL
|
|
14
14
|
|
|
15
15
|
tags:
|
|
@@ -1245,6 +1245,100 @@ paths:
|
|
|
1245
1245
|
schema:
|
|
1246
1246
|
$ref: '#/components/schemas/ErrorResponse'
|
|
1247
1247
|
|
|
1248
|
+
'/v1/{merchantId}/commerce-cases/{commerceCaseId}/checkouts/{checkoutId}/payment-executions/{paymentExecutionId}/events/{eventId}/fund-splits':
|
|
1249
|
+
post:
|
|
1250
|
+
summary: Create a Fund Split for a Chargeback Event
|
|
1251
|
+
description: |-
|
|
1252
|
+
This endpoint allows merchants to instruct fund split distributions for a specific chargeback event
|
|
1253
|
+
within a marketplace transaction. When a chargeback event is received and allocated to a Payment Execution
|
|
1254
|
+
that belongs to a marketplace transaction, the merchant can use this endpoint to specify how the chargeback
|
|
1255
|
+
amount should be distributed among the different sellers (fund recipients) involved in the original order.
|
|
1256
|
+
|
|
1257
|
+
The fund split instruction contains one or more fund distributions, each specifying a target account,
|
|
1258
|
+
the amount to be allocated, and the type of distribution (e.g. seller revenue, platform commission, etc.).
|
|
1259
|
+
|
|
1260
|
+
This endpoint is only applicable for Payment Executions that belong to a marketplace transaction.
|
|
1261
|
+
If the Payment Execution is not part of a marketplace transaction, a 400 error will be returned.
|
|
1262
|
+
tags:
|
|
1263
|
+
- PaymentExecution
|
|
1264
|
+
operationId: createFundSplit
|
|
1265
|
+
parameters:
|
|
1266
|
+
- $ref: '#/components/parameters/merchantIdPath'
|
|
1267
|
+
- $ref: '#/components/parameters/commerceCaseIdPath'
|
|
1268
|
+
- $ref: '#/components/parameters/checkoutIdPath'
|
|
1269
|
+
- $ref: '#/components/parameters/paymentExecutionId'
|
|
1270
|
+
- $ref: '#/components/parameters/eventIdPath'
|
|
1271
|
+
requestBody:
|
|
1272
|
+
required: true
|
|
1273
|
+
content:
|
|
1274
|
+
application/json:
|
|
1275
|
+
schema:
|
|
1276
|
+
$ref: '#/components/schemas/FundSplitRequest'
|
|
1277
|
+
responses:
|
|
1278
|
+
'201':
|
|
1279
|
+
x-nullable: true
|
|
1280
|
+
description: The fund split instruction was successfully created and will be processed.
|
|
1281
|
+
content:
|
|
1282
|
+
application/json:
|
|
1283
|
+
schema:
|
|
1284
|
+
$ref: '#/components/schemas/FundSplitResponse'
|
|
1285
|
+
'400':
|
|
1286
|
+
x-nullable: true
|
|
1287
|
+
description: |-
|
|
1288
|
+
The request was malformed, was missing required data, or the Payment Execution does not belong to a
|
|
1289
|
+
marketplace transaction. The error message will indicate the specific issue.
|
|
1290
|
+
content:
|
|
1291
|
+
application/json:
|
|
1292
|
+
schema:
|
|
1293
|
+
$ref: '#/components/schemas/ErrorResponse'
|
|
1294
|
+
'403':
|
|
1295
|
+
x-nullable: true
|
|
1296
|
+
description: You are not allowed to access the service or account or your API authentication failed.
|
|
1297
|
+
content:
|
|
1298
|
+
application/json:
|
|
1299
|
+
schema:
|
|
1300
|
+
$ref: '#/components/schemas/ErrorResponse'
|
|
1301
|
+
'404':
|
|
1302
|
+
x-nullable: true
|
|
1303
|
+
description: The Commerce Case, Checkout, Payment Execution, or Event was not found.
|
|
1304
|
+
content:
|
|
1305
|
+
application/json:
|
|
1306
|
+
schema:
|
|
1307
|
+
$ref: '#/components/schemas/ErrorResponse'
|
|
1308
|
+
'409':
|
|
1309
|
+
x-nullable: true
|
|
1310
|
+
description: |-
|
|
1311
|
+
A fund split instruction has already been submitted for this event, or the event is in a state
|
|
1312
|
+
that does not allow fund split creation.
|
|
1313
|
+
content:
|
|
1314
|
+
application/json:
|
|
1315
|
+
schema:
|
|
1316
|
+
$ref: '#/components/schemas/ErrorResponse'
|
|
1317
|
+
'500':
|
|
1318
|
+
x-nullable: true
|
|
1319
|
+
description: Internal server exception.
|
|
1320
|
+
content:
|
|
1321
|
+
application/json:
|
|
1322
|
+
schema:
|
|
1323
|
+
$ref: '#/components/schemas/ErrorResponse'
|
|
1324
|
+
'502':
|
|
1325
|
+
x-nullable: true
|
|
1326
|
+
description: |-
|
|
1327
|
+
Any 5XX response points to something that went wrong on our end. This could also be that the system was
|
|
1328
|
+
unable to route the transaction to an appropriate acquirer/3rd party. Another reason for such a response
|
|
1329
|
+
is when the 3rd party's response could not be understood.
|
|
1330
|
+
content:
|
|
1331
|
+
application/json:
|
|
1332
|
+
schema:
|
|
1333
|
+
$ref: '#/components/schemas/ErrorResponse'
|
|
1334
|
+
'503':
|
|
1335
|
+
x-nullable: true
|
|
1336
|
+
description: Service unavailable.
|
|
1337
|
+
content:
|
|
1338
|
+
application/json:
|
|
1339
|
+
schema:
|
|
1340
|
+
$ref: '#/components/schemas/ErrorResponse'
|
|
1341
|
+
|
|
1248
1342
|
'/v1/{merchantId}/commerce-cases/{commerceCaseId}/checkouts/{checkoutId}/payment-information':
|
|
1249
1343
|
post:
|
|
1250
1344
|
summary: Create a Payment Information
|
|
@@ -1405,6 +1499,16 @@ components:
|
|
|
1405
1499
|
schema:
|
|
1406
1500
|
type: string
|
|
1407
1501
|
format: UUID
|
|
1502
|
+
eventIdPath:
|
|
1503
|
+
in: path
|
|
1504
|
+
name: eventId
|
|
1505
|
+
description: |-
|
|
1506
|
+
Unique identifier of a payment event (e.g. a chargeback event) that is associated with a Payment Execution.
|
|
1507
|
+
This ID is used to link the fund split instruction to the specific event that triggered the chargeback allocation.
|
|
1508
|
+
required: true
|
|
1509
|
+
schema:
|
|
1510
|
+
type: string
|
|
1511
|
+
format: UUID
|
|
1408
1512
|
commerceCaseIdQuery:
|
|
1409
1513
|
in: query
|
|
1410
1514
|
name: commerceCaseId
|
|
@@ -2110,6 +2214,15 @@ components:
|
|
|
2110
2214
|
properties:
|
|
2111
2215
|
cancellationReason:
|
|
2112
2216
|
$ref: '#/components/schemas/CancellationReason'
|
|
2217
|
+
amount:
|
|
2218
|
+
type: integer
|
|
2219
|
+
format: int64
|
|
2220
|
+
maximum: 999999999999
|
|
2221
|
+
minimum: 1
|
|
2222
|
+
description: |-
|
|
2223
|
+
Here you can specify the amount that you want to cancel (specified in cents, where single digit currencies
|
|
2224
|
+
are presumed to have 2 digits). The amount can be lower than the amount that was authorized, but not higher.
|
|
2225
|
+
If left empty, the remaining open amount will be cancelled.
|
|
2113
2226
|
CancelPaymentResponse:
|
|
2114
2227
|
type: object
|
|
2115
2228
|
additionalProperties: false
|
|
@@ -2466,7 +2579,7 @@ components:
|
|
|
2466
2579
|
type: string
|
|
2467
2580
|
description: |
|
|
2468
2581
|
Shopping cart item description.
|
|
2469
|
-
The description will also be displayed in the portal as the product name.
|
|
2582
|
+
The description will also be displayed in the portal as the product name if orderLineDetails.productName is not set.
|
|
2470
2583
|
example: Smartwatch
|
|
2471
2584
|
x-trim-at: 116
|
|
2472
2585
|
CartItemPatch:
|
|
@@ -2595,6 +2708,7 @@ components:
|
|
|
2595
2708
|
* false = the payment does not require approval, and the funds will be captured automatically
|
|
2596
2709
|
|
|
2597
2710
|
If the parameter is not provided in the request, the default value will be true
|
|
2711
|
+
default: true
|
|
2598
2712
|
paymentProduct3391SpecificInput:
|
|
2599
2713
|
$ref: '#/components/schemas/PaymentProduct3391SpecificInput'
|
|
2600
2714
|
CompleteOrderRequest:
|
|
@@ -2977,7 +3091,7 @@ components:
|
|
|
2977
3091
|
properties:
|
|
2978
3092
|
acceptHeader:
|
|
2979
3093
|
type: string
|
|
2980
|
-
description: |
|
|
3094
|
+
description: |
|
|
2981
3095
|
The accept-header of the customer client from the HTTP Headers.
|
|
2982
3096
|
This field can be mandatory depending on the selected payment method and routing option.
|
|
2983
3097
|
maxLength: 2048
|
|
@@ -3147,6 +3261,7 @@ components:
|
|
|
3147
3261
|
* false = the payment does not require approval, and the funds will be captured automatically
|
|
3148
3262
|
|
|
3149
3263
|
If the parameter is not provided in the request, the default value will be true
|
|
3264
|
+
default: true
|
|
3150
3265
|
paymentProduct3392SpecificInput:
|
|
3151
3266
|
$ref: '#/components/schemas/PaymentProduct3392SpecificInput'
|
|
3152
3267
|
FinancingPaymentMethodSpecificOutput:
|
|
@@ -3240,6 +3355,46 @@ components:
|
|
|
3240
3355
|
type: array
|
|
3241
3356
|
items:
|
|
3242
3357
|
$ref: '#/components/schemas/FundDistribution'
|
|
3358
|
+
FundSplitRequest:
|
|
3359
|
+
type: object
|
|
3360
|
+
description: |-
|
|
3361
|
+
Request object for creating a fund split instruction for a chargeback event in a marketplace transaction.
|
|
3362
|
+
Contains the fund split details specifying how the chargeback amount should be distributed among the
|
|
3363
|
+
different sellers and/or the platform involved in the original marketplace order.
|
|
3364
|
+
additionalProperties: false
|
|
3365
|
+
required:
|
|
3366
|
+
- fundSplit
|
|
3367
|
+
properties:
|
|
3368
|
+
fundSplit:
|
|
3369
|
+
$ref: '#/components/schemas/FundSplit'
|
|
3370
|
+
FundSplitResponse:
|
|
3371
|
+
type: object
|
|
3372
|
+
description: |-
|
|
3373
|
+
Response object returned after successfully creating a fund split instruction. Contains the unique
|
|
3374
|
+
identifier of the created fund split and the processing status.
|
|
3375
|
+
additionalProperties: false
|
|
3376
|
+
properties:
|
|
3377
|
+
fundSplitId:
|
|
3378
|
+
type: string
|
|
3379
|
+
format: UUID
|
|
3380
|
+
description: |-
|
|
3381
|
+
Unique identifier assigned to the created fund split instruction. This ID can be used for tracking
|
|
3382
|
+
and referencing the fund split in subsequent operations or inquiries.
|
|
3383
|
+
example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
|
|
3384
|
+
paymentExecutionId:
|
|
3385
|
+
type: string
|
|
3386
|
+
format: UUID
|
|
3387
|
+
description: |-
|
|
3388
|
+
Unique identifier of the Payment Execution that this fund split is associated with.
|
|
3389
|
+
example: "f47ac10b-58cc-4372-a567-0e02b2c3d479"
|
|
3390
|
+
eventId:
|
|
3391
|
+
type: string
|
|
3392
|
+
format: UUID
|
|
3393
|
+
description: |-
|
|
3394
|
+
Unique identifier of the chargeback event that this fund split instruction was created for.
|
|
3395
|
+
example: "c56a4180-65aa-42ec-a945-5fd21dec0538"
|
|
3396
|
+
fundSplit:
|
|
3397
|
+
$ref: '#/components/schemas/FundSplit'
|
|
3243
3398
|
InstallmentOption:
|
|
3244
3399
|
type: object
|
|
3245
3400
|
properties:
|
|
@@ -3509,7 +3664,7 @@ components:
|
|
|
3509
3664
|
example: 0
|
|
3510
3665
|
taxAmountPerUnit:
|
|
3511
3666
|
type: boolean
|
|
3512
|
-
description: |-
|
|
3667
|
+
description: |-
|
|
3513
3668
|
This field indicates if the `taxAmount` is to be interpreted as the tax amount per unit rather than for the entire line item.
|
|
3514
3669
|
This field is included in the response only when `taxAmount` is set; otherwise, it will return as `null`.
|
|
3515
3670
|
format: int64
|
|
@@ -3548,6 +3703,12 @@ components:
|
|
|
3548
3703
|
Click & Collect or Click & Reserve).
|
|
3549
3704
|
x-trim-at: 50
|
|
3550
3705
|
example: Store-12345
|
|
3706
|
+
productName:
|
|
3707
|
+
type: string
|
|
3708
|
+
description: |-
|
|
3709
|
+
The name of the product, will be displayed in Portal if set.
|
|
3710
|
+
maxLength: 116
|
|
3711
|
+
example: Smartwatch-123
|
|
3551
3712
|
required:
|
|
3552
3713
|
- productPrice
|
|
3553
3714
|
- quantity
|
|
@@ -4207,7 +4368,10 @@ components:
|
|
|
4207
4368
|
example: your-order-6372
|
|
4208
4369
|
PaymentReferencesForRefund:
|
|
4209
4370
|
type: object
|
|
4210
|
-
description:
|
|
4371
|
+
description: |-
|
|
4372
|
+
Object that holds all reference properties that are linked to this refund transaction.
|
|
4373
|
+
Extends the standard PaymentReferences with an additional captureReference field to support
|
|
4374
|
+
scenarios where a Checkout may contain multiple partial captures from different sellers.
|
|
4211
4375
|
additionalProperties: false
|
|
4212
4376
|
allOf:
|
|
4213
4377
|
- $ref: '#/components/schemas/PaymentReferences'
|
|
@@ -4215,9 +4379,16 @@ components:
|
|
|
4215
4379
|
properties:
|
|
4216
4380
|
captureReference:
|
|
4217
4381
|
description: |-
|
|
4218
|
-
|
|
4382
|
+
Merchant-provided reference of the capture that this refund should be applied to.
|
|
4383
|
+
A single Checkout can contain multiple partial captures.
|
|
4384
|
+
By supplying the captureReference the merchant ensures the refund is allocated to the correct
|
|
4385
|
+
capture.
|
|
4386
|
+
|
|
4387
|
+
This value must match the merchantReference that was provided in the PaymentReferences of the
|
|
4388
|
+
original capture request.
|
|
4219
4389
|
example: your-order-6372
|
|
4220
4390
|
type: string
|
|
4391
|
+
maxLength: 20
|
|
4221
4392
|
PaymentResponse:
|
|
4222
4393
|
type: object
|
|
4223
4394
|
description: Object that holds the payment related properties.
|
|
@@ -4454,6 +4625,7 @@ components:
|
|
|
4454
4625
|
* false = the payment does not require approval, and the funds will be captured automatically
|
|
4455
4626
|
|
|
4456
4627
|
If the parameter is not provided in the request, the default value will be true
|
|
4628
|
+
default: true
|
|
4457
4629
|
paymentProcessingToken:
|
|
4458
4630
|
type: string
|
|
4459
4631
|
description: ID of the token to use to create the payment.
|
|
@@ -4477,6 +4649,8 @@ components:
|
|
|
4477
4649
|
$ref: '#/components/schemas/PaymentProductId'
|
|
4478
4650
|
paymentProduct840SpecificInput:
|
|
4479
4651
|
$ref: '#/components/schemas/RedirectPaymentProduct840SpecificInput'
|
|
4652
|
+
paymentProduct900SpecificInput:
|
|
4653
|
+
$ref: '#/components/schemas/RedirectPaymentProduct900SpecificInput'
|
|
4480
4654
|
redirectionData:
|
|
4481
4655
|
$ref: '#/components/schemas/RedirectionData'
|
|
4482
4656
|
RedirectPaymentMethodSpecificOutput:
|
|
@@ -4529,6 +4703,27 @@ components:
|
|
|
4529
4703
|
Default value is false.
|
|
4530
4704
|
default: false
|
|
4531
4705
|
example: true
|
|
4706
|
+
RedirectPaymentProduct900SpecificInput:
|
|
4707
|
+
type: object
|
|
4708
|
+
properties:
|
|
4709
|
+
captureTrigger:
|
|
4710
|
+
type: string
|
|
4711
|
+
description: |-
|
|
4712
|
+
Indicates the event upon which the payment should be captured.
|
|
4713
|
+
This value is shown to customers in the Wero portal to clarify
|
|
4714
|
+
when the capture will occur.
|
|
4715
|
+
Has the following possible values:
|
|
4716
|
+
- shipping: Upon shipping the order.
|
|
4717
|
+
- delivery: Upon delivering the order.
|
|
4718
|
+
- availability: As soon as the order is available.
|
|
4719
|
+
- serviceFulfillment: Upon fulfilling the service.
|
|
4720
|
+
- other: For any other use case.
|
|
4721
|
+
enum:
|
|
4722
|
+
- shipping
|
|
4723
|
+
- delivery
|
|
4724
|
+
- availability
|
|
4725
|
+
- serviceFulfillment
|
|
4726
|
+
- other
|
|
4532
4727
|
References:
|
|
4533
4728
|
type: object
|
|
4534
4729
|
description: Object that holds all reference properties that are linked to this transaction.
|
|
@@ -5008,4 +5203,4 @@ components:
|
|
|
5008
5203
|
enum:
|
|
5009
5204
|
- first
|
|
5010
5205
|
- subsequent
|
|
5011
|
-
x-enum-to-string: false
|
|
5206
|
+
x-enum-to-string: false
|
|
@@ -6,6 +6,7 @@ require_relative '../models/cancel_payment_response'
|
|
|
6
6
|
require_relative '../models/capture_payment_response'
|
|
7
7
|
require_relative '../models/complete_payment_response'
|
|
8
8
|
require_relative '../models/create_payment_response'
|
|
9
|
+
require_relative '../models/fund_split_response'
|
|
9
10
|
require_relative '../models/refund_payment_response'
|
|
10
11
|
module PCPServerSDK
|
|
11
12
|
module Endpoints
|
|
@@ -176,6 +177,31 @@ module PCPServerSDK
|
|
|
176
177
|
deserialize_json(response, PCPServerSDK::Models::PaymentExecution)
|
|
177
178
|
end
|
|
178
179
|
|
|
180
|
+
# Create a fund split for a payment event
|
|
181
|
+
# @param merchant_id [String] The merchant identifier
|
|
182
|
+
# @param commerce_case_id [String] The commerce case identifier
|
|
183
|
+
# @param checkout_id [String] The checkout identifier
|
|
184
|
+
# @param payment_execution_id [String] The payment execution identifier
|
|
185
|
+
# @param event_id [String] The payment event identifier
|
|
186
|
+
# @param payload [PCPServerSDK::Models::FundSplitRequest] The fund split request
|
|
187
|
+
# @return [PCPServerSDK::Models::FundSplitResponse] The fund split response
|
|
188
|
+
def create_fund_split(merchant_id, commerce_case_id, checkout_id, payment_execution_id, event_id, payload)
|
|
189
|
+
validate_ids(merchant_id, commerce_case_id, checkout_id)
|
|
190
|
+
raise TypeError, PAYMENT_EXECUTION_ID_REQUIRED_ERROR if payment_execution_id.nil? || payment_execution_id.empty?
|
|
191
|
+
raise TypeError, 'Event ID is required' if event_id.nil? || event_id.empty?
|
|
192
|
+
|
|
193
|
+
url = URI.join(get_config.host, "/v1/#{merchant_id}/commerce-cases/#{commerce_case_id}/checkouts/#{checkout_id}/payment-executions/#{payment_execution_id}/events/#{event_id}/fund-splits")
|
|
194
|
+
|
|
195
|
+
request_init = {
|
|
196
|
+
method: 'POST',
|
|
197
|
+
headers: { 'Content-Type' => 'application/json' },
|
|
198
|
+
body: JSON.generate(payload)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
response = make_api_call(url.to_s, request_init)
|
|
202
|
+
deserialize_json(response, PCPServerSDK::Models::FundSplitResponse)
|
|
203
|
+
end
|
|
204
|
+
|
|
179
205
|
|
|
180
206
|
private
|
|
181
207
|
|
|
@@ -6,6 +6,11 @@ module PCPServerSDK
|
|
|
6
6
|
class CancelPaymentRequest
|
|
7
7
|
attr_accessor :cancellation_reason
|
|
8
8
|
|
|
9
|
+
# Here you can specify the amount that you want to cancel (specified in cents, where single digit currencies
|
|
10
|
+
# are presumed to have 2 digits). The amount can be lower than the amount that was authorized, but not higher.
|
|
11
|
+
# If left empty, the remaining open amount will be cancelled.
|
|
12
|
+
attr_accessor :amount
|
|
13
|
+
|
|
9
14
|
class EnumAttributeValidator
|
|
10
15
|
attr_reader :datatype
|
|
11
16
|
attr_reader :allowable_values
|
|
@@ -31,7 +36,8 @@ module PCPServerSDK
|
|
|
31
36
|
# Attribute mapping from ruby-style variable name to JSON key.
|
|
32
37
|
def self.attribute_map
|
|
33
38
|
{
|
|
34
|
-
:'cancellation_reason' => :'cancellationReason'
|
|
39
|
+
:'cancellation_reason' => :'cancellationReason',
|
|
40
|
+
:'amount' => :'amount'
|
|
35
41
|
}
|
|
36
42
|
end
|
|
37
43
|
|
|
@@ -43,7 +49,8 @@ module PCPServerSDK
|
|
|
43
49
|
# Attribute type mapping.
|
|
44
50
|
def self.openapi_types
|
|
45
51
|
{
|
|
46
|
-
:'cancellation_reason' => :'CancellationReason'
|
|
52
|
+
:'cancellation_reason' => :'CancellationReason',
|
|
53
|
+
:'amount' => :'Integer'
|
|
47
54
|
}
|
|
48
55
|
end
|
|
49
56
|
|
|
@@ -71,6 +78,10 @@ module PCPServerSDK
|
|
|
71
78
|
if attributes.key?(:'cancellation_reason')
|
|
72
79
|
self.cancellation_reason = attributes[:'cancellation_reason']
|
|
73
80
|
end
|
|
81
|
+
|
|
82
|
+
if attributes.key?(:'amount')
|
|
83
|
+
self.amount = attributes[:'amount']
|
|
84
|
+
end
|
|
74
85
|
end
|
|
75
86
|
|
|
76
87
|
# Checks equality by comparing each attribute.
|
|
@@ -78,7 +89,8 @@ module PCPServerSDK
|
|
|
78
89
|
def ==(o)
|
|
79
90
|
return true if self.equal?(o)
|
|
80
91
|
self.class == o.class &&
|
|
81
|
-
cancellation_reason == o.cancellation_reason
|
|
92
|
+
cancellation_reason == o.cancellation_reason &&
|
|
93
|
+
amount == o.amount
|
|
82
94
|
end
|
|
83
95
|
|
|
84
96
|
# @see the `==` method
|
|
@@ -90,7 +102,7 @@ module PCPServerSDK
|
|
|
90
102
|
# Calculates hash code according to all attributes.
|
|
91
103
|
# @return [Integer] Hash code
|
|
92
104
|
def hash
|
|
93
|
-
[cancellation_reason].hash
|
|
105
|
+
[cancellation_reason, amount].hash
|
|
94
106
|
end
|
|
95
107
|
|
|
96
108
|
# Builds the object from hash
|
|
@@ -5,7 +5,8 @@ module PCPServerSDK
|
|
|
5
5
|
module Models
|
|
6
6
|
# Object containing the line items of the invoice or shopping cart.
|
|
7
7
|
class CartItemInvoiceData
|
|
8
|
-
# Shopping cart item description. The description will also be displayed in the portal as the product name
|
|
8
|
+
# Shopping cart item description. The description will also be displayed in the portal as the product name
|
|
9
|
+
# if orderLineDetails.productName is not set.
|
|
9
10
|
attr_accessor :description
|
|
10
11
|
|
|
11
12
|
# Attribute mapping from ruby-style variable name to JSON key.
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
|
|
2
|
+
require 'date'
|
|
3
|
+
require 'time'
|
|
4
|
+
|
|
5
|
+
module PCPServerSDK
|
|
6
|
+
module Models
|
|
7
|
+
class FundSplitRequest
|
|
8
|
+
attr_accessor :fund_split
|
|
9
|
+
|
|
10
|
+
def self.attribute_map
|
|
11
|
+
{
|
|
12
|
+
:'fund_split' => :'fundSplit'
|
|
13
|
+
}
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.acceptable_attributes
|
|
17
|
+
attribute_map.values
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.openapi_types
|
|
21
|
+
{
|
|
22
|
+
:'fund_split' => :'FundSplit'
|
|
23
|
+
}
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.openapi_nullable
|
|
27
|
+
Set.new([])
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def initialize(attributes = {})
|
|
31
|
+
if (!attributes.is_a?(Hash))
|
|
32
|
+
fail ArgumentError, "The input argument (attributes) must be a hash in `FundSplitRequest` initialize method"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
attributes = attributes.each_with_object({}) { |(k, v), h|
|
|
36
|
+
if (!self.class.attribute_map.key?(k.to_sym))
|
|
37
|
+
fail ArgumentError, "`#{k}` is not a valid attribute in `FundSplitRequest`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
|
|
38
|
+
end
|
|
39
|
+
h[k.to_sym] = v
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if attributes.key?(:'fund_split')
|
|
43
|
+
self.fund_split = attributes[:'fund_split']
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def ==(o)
|
|
48
|
+
return true if self.equal?(o)
|
|
49
|
+
self.class == o.class &&
|
|
50
|
+
fund_split == o.fund_split
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def eql?(o)
|
|
54
|
+
self == o
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def hash
|
|
58
|
+
[fund_split].hash
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def self.build_from_hash(attributes)
|
|
62
|
+
return nil unless attributes.is_a?(Hash)
|
|
63
|
+
attributes = attributes.transform_keys(&:to_sym)
|
|
64
|
+
transformed_hash = {}
|
|
65
|
+
openapi_types.each_pair do |key, type|
|
|
66
|
+
if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
|
|
67
|
+
transformed_hash["#{key}"] = nil
|
|
68
|
+
elsif type =~ /\AArray<(.*)>/i
|
|
69
|
+
if attributes[attribute_map[key]].is_a?(Array)
|
|
70
|
+
transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
|
|
71
|
+
end
|
|
72
|
+
elsif !attributes[attribute_map[key]].nil?
|
|
73
|
+
transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
new(transformed_hash)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def self._deserialize(type, value)
|
|
80
|
+
case type.to_sym
|
|
81
|
+
when :Time
|
|
82
|
+
Time.parse(value)
|
|
83
|
+
when :Date
|
|
84
|
+
Date.parse(value)
|
|
85
|
+
when :String
|
|
86
|
+
value.to_s
|
|
87
|
+
when :Integer
|
|
88
|
+
value.to_i
|
|
89
|
+
when :Float
|
|
90
|
+
value.to_f
|
|
91
|
+
when :Boolean
|
|
92
|
+
if value.to_s =~ /\A(true|t|yes|y|1)\z/i
|
|
93
|
+
true
|
|
94
|
+
else
|
|
95
|
+
false
|
|
96
|
+
end
|
|
97
|
+
when :Object
|
|
98
|
+
value
|
|
99
|
+
when /\AArray<(?<inner_type>.+)>\z/
|
|
100
|
+
inner_type = Regexp.last_match[:inner_type]
|
|
101
|
+
value.map { |v| _deserialize(inner_type, v) }
|
|
102
|
+
when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
|
|
103
|
+
k_type = Regexp.last_match[:k_type]
|
|
104
|
+
v_type = Regexp.last_match[:v_type]
|
|
105
|
+
{}.tap do |hash|
|
|
106
|
+
value.each do |k, v|
|
|
107
|
+
hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
else
|
|
111
|
+
klass = PCPServerSDK::Models.const_get(type)
|
|
112
|
+
klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def to_s
|
|
117
|
+
to_hash.to_s
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def to_body
|
|
121
|
+
to_hash
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def to_hash
|
|
125
|
+
hash = {}
|
|
126
|
+
self.class.attribute_map.each_pair do |attr, param|
|
|
127
|
+
value = self.send(attr)
|
|
128
|
+
if value.nil?
|
|
129
|
+
is_nullable = self.class.openapi_nullable.include?(attr)
|
|
130
|
+
next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
hash[param] = _to_hash(value)
|
|
134
|
+
end
|
|
135
|
+
hash
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def _to_hash(value)
|
|
139
|
+
if value.is_a?(Array)
|
|
140
|
+
value.compact.map { |v| _to_hash(v) }
|
|
141
|
+
elsif value.is_a?(Hash)
|
|
142
|
+
{}.tap do |hash|
|
|
143
|
+
value.each { |k, v| hash[k] = _to_hash(v) }
|
|
144
|
+
end
|
|
145
|
+
elsif value.respond_to? :to_hash
|
|
146
|
+
value.to_hash
|
|
147
|
+
else
|
|
148
|
+
value
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
|
|
2
|
+
require 'date'
|
|
3
|
+
require 'time'
|
|
4
|
+
|
|
5
|
+
module PCPServerSDK
|
|
6
|
+
module Models
|
|
7
|
+
class FundSplitResponse
|
|
8
|
+
attr_accessor :fund_split_id
|
|
9
|
+
|
|
10
|
+
attr_accessor :payment_execution_id
|
|
11
|
+
|
|
12
|
+
attr_accessor :event_id
|
|
13
|
+
|
|
14
|
+
attr_accessor :fund_split
|
|
15
|
+
|
|
16
|
+
def self.attribute_map
|
|
17
|
+
{
|
|
18
|
+
:'fund_split_id' => :'fundSplitId',
|
|
19
|
+
:'payment_execution_id' => :'paymentExecutionId',
|
|
20
|
+
:'event_id' => :'eventId',
|
|
21
|
+
:'fund_split' => :'fundSplit'
|
|
22
|
+
}
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.acceptable_attributes
|
|
26
|
+
attribute_map.values
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.openapi_types
|
|
30
|
+
{
|
|
31
|
+
:'fund_split_id' => :'String',
|
|
32
|
+
:'payment_execution_id' => :'String',
|
|
33
|
+
:'event_id' => :'String',
|
|
34
|
+
:'fund_split' => :'FundSplit'
|
|
35
|
+
}
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def self.openapi_nullable
|
|
39
|
+
Set.new([])
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def initialize(attributes = {})
|
|
43
|
+
if (!attributes.is_a?(Hash))
|
|
44
|
+
fail ArgumentError, "The input argument (attributes) must be a hash in `FundSplitResponse` initialize method"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
attributes = attributes.each_with_object({}) { |(k, v), h|
|
|
48
|
+
if (!self.class.attribute_map.key?(k.to_sym))
|
|
49
|
+
fail ArgumentError, "`#{k}` is not a valid attribute in `FundSplitResponse`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
|
|
50
|
+
end
|
|
51
|
+
h[k.to_sym] = v
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if attributes.key?(:'fund_split_id')
|
|
55
|
+
self.fund_split_id = attributes[:'fund_split_id']
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
if attributes.key?(:'payment_execution_id')
|
|
59
|
+
self.payment_execution_id = attributes[:'payment_execution_id']
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
if attributes.key?(:'event_id')
|
|
63
|
+
self.event_id = attributes[:'event_id']
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
if attributes.key?(:'fund_split')
|
|
67
|
+
self.fund_split = attributes[:'fund_split']
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def ==(o)
|
|
72
|
+
return true if self.equal?(o)
|
|
73
|
+
self.class == o.class &&
|
|
74
|
+
fund_split_id == o.fund_split_id &&
|
|
75
|
+
payment_execution_id == o.payment_execution_id &&
|
|
76
|
+
event_id == o.event_id &&
|
|
77
|
+
fund_split == o.fund_split
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def eql?(o)
|
|
81
|
+
self == o
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def hash
|
|
85
|
+
[fund_split_id, payment_execution_id, event_id, fund_split].hash
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def self.build_from_hash(attributes)
|
|
89
|
+
return nil unless attributes.is_a?(Hash)
|
|
90
|
+
attributes = attributes.transform_keys(&:to_sym)
|
|
91
|
+
transformed_hash = {}
|
|
92
|
+
openapi_types.each_pair do |key, type|
|
|
93
|
+
if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
|
|
94
|
+
transformed_hash["#{key}"] = nil
|
|
95
|
+
elsif type =~ /\AArray<(.*)>/i
|
|
96
|
+
if attributes[attribute_map[key]].is_a?(Array)
|
|
97
|
+
transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
|
|
98
|
+
end
|
|
99
|
+
elsif !attributes[attribute_map[key]].nil?
|
|
100
|
+
transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
new(transformed_hash)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def self._deserialize(type, value)
|
|
107
|
+
case type.to_sym
|
|
108
|
+
when :Time
|
|
109
|
+
Time.parse(value)
|
|
110
|
+
when :Date
|
|
111
|
+
Date.parse(value)
|
|
112
|
+
when :String
|
|
113
|
+
value.to_s
|
|
114
|
+
when :Integer
|
|
115
|
+
value.to_i
|
|
116
|
+
when :Float
|
|
117
|
+
value.to_f
|
|
118
|
+
when :Boolean
|
|
119
|
+
if value.to_s =~ /\A(true|t|yes|y|1)\z/i
|
|
120
|
+
true
|
|
121
|
+
else
|
|
122
|
+
false
|
|
123
|
+
end
|
|
124
|
+
when :Object
|
|
125
|
+
value
|
|
126
|
+
when /\AArray<(?<inner_type>.+)>\z/
|
|
127
|
+
inner_type = Regexp.last_match[:inner_type]
|
|
128
|
+
value.map { |v| _deserialize(inner_type, v) }
|
|
129
|
+
when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
|
|
130
|
+
k_type = Regexp.last_match[:k_type]
|
|
131
|
+
v_type = Regexp.last_match[:v_type]
|
|
132
|
+
{}.tap do |hash|
|
|
133
|
+
value.each do |k, v|
|
|
134
|
+
hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
else
|
|
138
|
+
klass = PCPServerSDK::Models.const_get(type)
|
|
139
|
+
klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def to_s
|
|
144
|
+
to_hash.to_s
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def to_body
|
|
148
|
+
to_hash
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def to_hash
|
|
152
|
+
hash = {}
|
|
153
|
+
self.class.attribute_map.each_pair do |attr, param|
|
|
154
|
+
value = self.send(attr)
|
|
155
|
+
if value.nil?
|
|
156
|
+
is_nullable = self.class.openapi_nullable.include?(attr)
|
|
157
|
+
next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
hash[param] = _to_hash(value)
|
|
161
|
+
end
|
|
162
|
+
hash
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def _to_hash(value)
|
|
166
|
+
if value.is_a?(Array)
|
|
167
|
+
value.compact.map { |v| _to_hash(v) }
|
|
168
|
+
elsif value.is_a?(Hash)
|
|
169
|
+
{}.tap do |hash|
|
|
170
|
+
value.each { |k, v| hash[k] = _to_hash(v) }
|
|
171
|
+
end
|
|
172
|
+
elsif value.respond_to? :to_hash
|
|
173
|
+
value.to_hash
|
|
174
|
+
else
|
|
175
|
+
value
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
end
|
|
@@ -34,6 +34,9 @@ module PCPServerSDK
|
|
|
34
34
|
# Optional parameter to define the delivery shop or touchpoint where an item has been collected (e.g. for Click & Collect or Click & Reserve).
|
|
35
35
|
attr_accessor :merchant_shop_delivery_reference
|
|
36
36
|
|
|
37
|
+
# The name of the product, will be displayed in Portal if set.
|
|
38
|
+
attr_accessor :product_name
|
|
39
|
+
|
|
37
40
|
class EnumAttributeValidator
|
|
38
41
|
attr_reader :datatype
|
|
39
42
|
attr_reader :allowable_values
|
|
@@ -68,7 +71,8 @@ module PCPServerSDK
|
|
|
68
71
|
:'product_url' => :'productUrl',
|
|
69
72
|
:'product_image_url' => :'productImageUrl',
|
|
70
73
|
:'product_category_path' => :'productCategoryPath',
|
|
71
|
-
:'merchant_shop_delivery_reference' => :'merchantShopDeliveryReference'
|
|
74
|
+
:'merchant_shop_delivery_reference' => :'merchantShopDeliveryReference',
|
|
75
|
+
:'product_name' => :'productName'
|
|
72
76
|
}
|
|
73
77
|
end
|
|
74
78
|
|
|
@@ -89,7 +93,8 @@ module PCPServerSDK
|
|
|
89
93
|
:'product_url' => :'String',
|
|
90
94
|
:'product_image_url' => :'String',
|
|
91
95
|
:'product_category_path' => :'String',
|
|
92
|
-
:'merchant_shop_delivery_reference' => :'String'
|
|
96
|
+
:'merchant_shop_delivery_reference' => :'String',
|
|
97
|
+
:'product_name' => :'String'
|
|
93
98
|
}
|
|
94
99
|
end
|
|
95
100
|
|
|
@@ -157,6 +162,10 @@ module PCPServerSDK
|
|
|
157
162
|
if attributes.key?(:'merchant_shop_delivery_reference')
|
|
158
163
|
self.merchant_shop_delivery_reference = attributes[:'merchant_shop_delivery_reference']
|
|
159
164
|
end
|
|
165
|
+
|
|
166
|
+
if attributes.key?(:'product_name')
|
|
167
|
+
self.product_name = attributes[:'product_name']
|
|
168
|
+
end
|
|
160
169
|
end
|
|
161
170
|
|
|
162
171
|
# Checks equality by comparing each attribute.
|
|
@@ -173,7 +182,8 @@ module PCPServerSDK
|
|
|
173
182
|
product_url == o.product_url &&
|
|
174
183
|
product_image_url == o.product_image_url &&
|
|
175
184
|
product_category_path == o.product_category_path &&
|
|
176
|
-
merchant_shop_delivery_reference == o.merchant_shop_delivery_reference
|
|
185
|
+
merchant_shop_delivery_reference == o.merchant_shop_delivery_reference &&
|
|
186
|
+
product_name == o.product_name
|
|
177
187
|
end
|
|
178
188
|
|
|
179
189
|
# @see the `==` method
|
|
@@ -185,7 +195,7 @@ module PCPServerSDK
|
|
|
185
195
|
# Calculates hash code according to all attributes.
|
|
186
196
|
# @return [Integer] Hash code
|
|
187
197
|
def hash
|
|
188
|
-
[product_code, product_price, product_type, quantity, tax_amount, tax_amount_per_unit, product_url, product_image_url, product_category_path, merchant_shop_delivery_reference].hash
|
|
198
|
+
[product_code, product_price, product_type, quantity, tax_amount, tax_amount_per_unit, product_url, product_image_url, product_category_path, merchant_shop_delivery_reference, product_name].hash
|
|
189
199
|
end
|
|
190
200
|
|
|
191
201
|
# Builds the object from hash
|
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
require 'date'
|
|
2
2
|
require 'time'
|
|
3
3
|
|
|
4
|
-
# Object that holds all reference properties
|
|
4
|
+
# Object that holds all reference properties that are linked to this refund transaction.
|
|
5
|
+
# Extends the standard PaymentReferences with an additional captureReference field to support
|
|
6
|
+
# scenarios where a Checkout may contain multiple partial captures from different sellers.
|
|
5
7
|
module PCPServerSDK
|
|
6
8
|
module Models
|
|
7
9
|
class PaymentReferencesForRefund
|
|
8
10
|
# Unique reference of the Commerce Case that is also returned for reporting and reconciliation purposes.
|
|
9
11
|
attr_accessor :merchant_reference
|
|
10
12
|
|
|
11
|
-
#
|
|
13
|
+
# Merchant-provided reference of the capture that this refund should be applied to.
|
|
14
|
+
# A single Checkout can contain multiple partial captures.
|
|
15
|
+
# By supplying the captureReference the merchant ensures the refund is allocated to the correct
|
|
16
|
+
# capture.
|
|
17
|
+
# This value must match the merchantReference that was provided in the PaymentReferences of the
|
|
18
|
+
# original capture request.
|
|
12
19
|
attr_accessor :capture_reference
|
|
13
20
|
|
|
14
21
|
# Attribute mapping from ruby-style variable name to JSON key.
|
|
@@ -23,6 +23,8 @@ module PCPServerSDK
|
|
|
23
23
|
|
|
24
24
|
attr_accessor :payment_product840_specific_input
|
|
25
25
|
|
|
26
|
+
attr_accessor :payment_product900_specific_input
|
|
27
|
+
|
|
26
28
|
attr_accessor :redirection_data
|
|
27
29
|
|
|
28
30
|
# Attribute mapping from ruby-style variable name to JSON key.
|
|
@@ -34,6 +36,7 @@ module PCPServerSDK
|
|
|
34
36
|
:'tokenize' => :'tokenize',
|
|
35
37
|
:'payment_product_id' => :'paymentProductId',
|
|
36
38
|
:'payment_product840_specific_input' => :'paymentProduct840SpecificInput',
|
|
39
|
+
:'payment_product900_specific_input' => :'paymentProduct900SpecificInput',
|
|
37
40
|
:'redirection_data' => :'redirectionData'
|
|
38
41
|
}
|
|
39
42
|
end
|
|
@@ -52,6 +55,7 @@ module PCPServerSDK
|
|
|
52
55
|
:'tokenize' => :'Boolean',
|
|
53
56
|
:'payment_product_id' => :'Integer',
|
|
54
57
|
:'payment_product840_specific_input' => :'RedirectPaymentProduct840SpecificInput',
|
|
58
|
+
:'payment_product900_specific_input' => :'RedirectPaymentProduct900SpecificInput',
|
|
55
59
|
:'redirection_data' => :'RedirectionData'
|
|
56
60
|
}
|
|
57
61
|
end
|
|
@@ -101,6 +105,10 @@ module PCPServerSDK
|
|
|
101
105
|
self.payment_product840_specific_input = attributes[:'payment_product840_specific_input']
|
|
102
106
|
end
|
|
103
107
|
|
|
108
|
+
if attributes.key?(:'payment_product900_specific_input')
|
|
109
|
+
self.payment_product900_specific_input = attributes[:'payment_product900_specific_input']
|
|
110
|
+
end
|
|
111
|
+
|
|
104
112
|
if attributes.key?(:'redirection_data')
|
|
105
113
|
self.redirection_data = attributes[:'redirection_data']
|
|
106
114
|
end
|
|
@@ -117,6 +125,7 @@ module PCPServerSDK
|
|
|
117
125
|
tokenize == o.tokenize &&
|
|
118
126
|
payment_product_id == o.payment_product_id &&
|
|
119
127
|
payment_product840_specific_input == o.payment_product840_specific_input &&
|
|
128
|
+
payment_product900_specific_input == o.payment_product900_specific_input &&
|
|
120
129
|
redirection_data == o.redirection_data
|
|
121
130
|
end
|
|
122
131
|
|
|
@@ -129,7 +138,7 @@ module PCPServerSDK
|
|
|
129
138
|
# Calculates hash code according to all attributes.
|
|
130
139
|
# @return [Integer] Hash code
|
|
131
140
|
def hash
|
|
132
|
-
[requires_approval, payment_processing_token, reporting_token, tokenize, payment_product_id, payment_product840_specific_input, redirection_data].hash
|
|
141
|
+
[requires_approval, payment_processing_token, reporting_token, tokenize, payment_product_id, payment_product840_specific_input, payment_product900_specific_input, redirection_data].hash
|
|
133
142
|
end
|
|
134
143
|
|
|
135
144
|
# Builds the object from hash
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
|
|
2
|
+
require 'date'
|
|
3
|
+
require 'time'
|
|
4
|
+
|
|
5
|
+
module PCPServerSDK
|
|
6
|
+
module Models
|
|
7
|
+
class RedirectPaymentProduct900SpecificInput
|
|
8
|
+
attr_accessor :capture_trigger
|
|
9
|
+
|
|
10
|
+
class EnumAttributeValidator
|
|
11
|
+
attr_reader :datatype
|
|
12
|
+
attr_reader :allowable_values
|
|
13
|
+
|
|
14
|
+
def initialize(datatype, allowable_values)
|
|
15
|
+
@allowable_values = allowable_values.map do |value|
|
|
16
|
+
case datatype.to_s
|
|
17
|
+
when /Integer/i
|
|
18
|
+
value.to_i
|
|
19
|
+
when /Float/i
|
|
20
|
+
value.to_f
|
|
21
|
+
else
|
|
22
|
+
value
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def valid?(value)
|
|
28
|
+
!value || allowable_values.include?(value)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.attribute_map
|
|
33
|
+
{
|
|
34
|
+
:'capture_trigger' => :'captureTrigger'
|
|
35
|
+
}
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def self.acceptable_attributes
|
|
39
|
+
attribute_map.values
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.openapi_types
|
|
43
|
+
{
|
|
44
|
+
:'capture_trigger' => :'String'
|
|
45
|
+
}
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def self.openapi_nullable
|
|
49
|
+
Set.new([])
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def initialize(attributes = {})
|
|
53
|
+
if (!attributes.is_a?(Hash))
|
|
54
|
+
fail ArgumentError, "The input argument (attributes) must be a hash in `RedirectPaymentProduct900SpecificInput` initialize method"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
attributes = attributes.each_with_object({}) { |(k, v), h|
|
|
58
|
+
if (!self.class.attribute_map.key?(k.to_sym))
|
|
59
|
+
fail ArgumentError, "`#{k}` is not a valid attribute in `RedirectPaymentProduct900SpecificInput`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
|
|
60
|
+
end
|
|
61
|
+
h[k.to_sym] = v
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if attributes.key?(:'capture_trigger')
|
|
65
|
+
self.capture_trigger = attributes[:'capture_trigger']
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def ==(o)
|
|
70
|
+
return true if self.equal?(o)
|
|
71
|
+
self.class == o.class &&
|
|
72
|
+
capture_trigger == o.capture_trigger
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def eql?(o)
|
|
76
|
+
self == o
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def hash
|
|
80
|
+
[capture_trigger].hash
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def self.build_from_hash(attributes)
|
|
84
|
+
return nil unless attributes.is_a?(Hash)
|
|
85
|
+
attributes = attributes.transform_keys(&:to_sym)
|
|
86
|
+
transformed_hash = {}
|
|
87
|
+
openapi_types.each_pair do |key, type|
|
|
88
|
+
if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
|
|
89
|
+
transformed_hash["#{key}"] = nil
|
|
90
|
+
elsif type =~ /\AArray<(.*)>/i
|
|
91
|
+
if attributes[attribute_map[key]].is_a?(Array)
|
|
92
|
+
transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
|
|
93
|
+
end
|
|
94
|
+
elsif !attributes[attribute_map[key]].nil?
|
|
95
|
+
transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
new(transformed_hash)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def self._deserialize(type, value)
|
|
102
|
+
case type.to_sym
|
|
103
|
+
when :Time
|
|
104
|
+
Time.parse(value)
|
|
105
|
+
when :Date
|
|
106
|
+
Date.parse(value)
|
|
107
|
+
when :String
|
|
108
|
+
value.to_s
|
|
109
|
+
when :Integer
|
|
110
|
+
value.to_i
|
|
111
|
+
when :Float
|
|
112
|
+
value.to_f
|
|
113
|
+
when :Boolean
|
|
114
|
+
if value.to_s =~ /\A(true|t|yes|y|1)\z/i
|
|
115
|
+
true
|
|
116
|
+
else
|
|
117
|
+
false
|
|
118
|
+
end
|
|
119
|
+
when :Object
|
|
120
|
+
value
|
|
121
|
+
when /\AArray<(?<inner_type>.+)>\z/
|
|
122
|
+
inner_type = Regexp.last_match[:inner_type]
|
|
123
|
+
value.map { |v| _deserialize(inner_type, v) }
|
|
124
|
+
when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
|
|
125
|
+
k_type = Regexp.last_match[:k_type]
|
|
126
|
+
v_type = Regexp.last_match[:v_type]
|
|
127
|
+
{}.tap do |hash|
|
|
128
|
+
value.each do |k, v|
|
|
129
|
+
hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
else
|
|
133
|
+
klass = PCPServerSDK::Models.const_get(type)
|
|
134
|
+
klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def to_s
|
|
139
|
+
to_hash.to_s
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def to_body
|
|
143
|
+
to_hash
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def to_hash
|
|
147
|
+
hash = {}
|
|
148
|
+
self.class.attribute_map.each_pair do |attr, param|
|
|
149
|
+
value = self.send(attr)
|
|
150
|
+
if value.nil?
|
|
151
|
+
is_nullable = self.class.openapi_nullable.include?(attr)
|
|
152
|
+
next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
hash[param] = _to_hash(value)
|
|
156
|
+
end
|
|
157
|
+
hash
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def _to_hash(value)
|
|
161
|
+
if value.is_a?(Array)
|
|
162
|
+
value.compact.map { |v| _to_hash(v) }
|
|
163
|
+
elsif value.is_a?(Hash)
|
|
164
|
+
{}.tap do |hash|
|
|
165
|
+
value.each { |k, v| hash[k] = _to_hash(v) }
|
|
166
|
+
end
|
|
167
|
+
elsif value.respond_to? :to_hash
|
|
168
|
+
value.to_hash
|
|
169
|
+
else
|
|
170
|
+
value
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def capture_trigger=(capture_trigger)
|
|
175
|
+
validator = EnumAttributeValidator.new('String', ['shipping', 'delivery', 'availability', 'serviceFulfillment', 'other'])
|
|
176
|
+
unless validator.valid?(capture_trigger)
|
|
177
|
+
fail ArgumentError, "invalid value for \"capture_trigger\", must be one of #{validator.allowable_values}."
|
|
178
|
+
end
|
|
179
|
+
@capture_trigger = capture_trigger
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
data/lib/PCP-server-Ruby-SDK.rb
CHANGED
|
@@ -78,6 +78,8 @@ require_relative 'PCP-server-Ruby-SDK/models/financing_payment_method_specific_i
|
|
|
78
78
|
require_relative 'PCP-server-Ruby-SDK/models/financing_payment_method_specific_output'
|
|
79
79
|
require_relative 'PCP-server-Ruby-SDK/models/fund_distribution'
|
|
80
80
|
require_relative 'PCP-server-Ruby-SDK/models/fund_split'
|
|
81
|
+
require_relative 'PCP-server-Ruby-SDK/models/fund_split_request'
|
|
82
|
+
require_relative 'PCP-server-Ruby-SDK/models/fund_split_response'
|
|
81
83
|
require_relative 'PCP-server-Ruby-SDK/models/installment_option'
|
|
82
84
|
require_relative 'PCP-server-Ruby-SDK/models/link_information'
|
|
83
85
|
require_relative 'PCP-server-Ruby-SDK/models/mandate_recurrence_type'
|
|
@@ -138,6 +140,7 @@ require_relative 'PCP-server-Ruby-SDK/models/complete_payment_product840_specifi
|
|
|
138
140
|
require_relative 'PCP-server-Ruby-SDK/models/complete_redirect_payment_method_specific_input'
|
|
139
141
|
require_relative 'PCP-server-Ruby-SDK/models/redirect_payment_method_specific_output'
|
|
140
142
|
require_relative 'PCP-server-Ruby-SDK/models/redirect_payment_product840_specific_input'
|
|
143
|
+
require_relative 'PCP-server-Ruby-SDK/models/redirect_payment_product900_specific_input'
|
|
141
144
|
require_relative 'PCP-server-Ruby-SDK/models/redirection_data'
|
|
142
145
|
require_relative 'PCP-server-Ruby-SDK/models/references'
|
|
143
146
|
require_relative 'PCP-server-Ruby-SDK/models/refresh_payment_request'
|
data/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pcp-serversdk-ruby",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pcp-serversdk-ruby",
|
|
9
|
-
"version": "1.
|
|
9
|
+
"version": "1.11.0",
|
|
10
10
|
"devDependencies": {
|
|
11
11
|
"@commitlint/cli": "19.4.0",
|
|
12
12
|
"@commitlint/config-conventional": "19.2.2",
|
data/package.json
CHANGED
|
@@ -377,4 +377,56 @@ RSpec.describe PCPServerSDK::Endpoints::PaymentExecutionApiClient do
|
|
|
377
377
|
end
|
|
378
378
|
end
|
|
379
379
|
end
|
|
380
|
+
|
|
381
|
+
describe '#create_fund_split' do
|
|
382
|
+
let(:payload) { double('PCPServerSDK::Models::FundSplitRequest') }
|
|
383
|
+
|
|
384
|
+
context 'when request is successful' do
|
|
385
|
+
let(:response) { double('Response', body: '{}', code: '200') }
|
|
386
|
+
let(:expected_response) { PCPServerSDK::Models::FundSplitResponse.new }
|
|
387
|
+
|
|
388
|
+
before do
|
|
389
|
+
allow(client).to receive(:get_response).and_return(response)
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
it 'returns a successful response' do
|
|
393
|
+
result = client.create_fund_split('1', '2', '3', '4', '5', payload)
|
|
394
|
+
expect(result).to eq(expected_response)
|
|
395
|
+
end
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
context 'when request is unsuccessful (400)' do
|
|
399
|
+
let(:response) { double('Response', body: error_body, code: '400') }
|
|
400
|
+
|
|
401
|
+
before do
|
|
402
|
+
allow(client).to receive(:get_response).and_return(response)
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
it 'raises an PCPServerSDK::Errors::ApiErrorResponseException' do
|
|
406
|
+
expect { client.create_fund_split('1', '2', '3', '4', '5', payload) }.to raise_error(PCPServerSDK::Errors::ApiErrorResponseException)
|
|
407
|
+
end
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
context 'when request is unsuccessful (500)' do
|
|
411
|
+
let(:response) { double('Response', body: '{}', code: '500') }
|
|
412
|
+
|
|
413
|
+
before do
|
|
414
|
+
allow(client).to receive(:get_response).and_return(response)
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
it 'raises an PCPServerSDK::Errors::ApiResponseRetrievalException' do
|
|
418
|
+
expect { client.create_fund_split('1', '2', '3', '4', '5', payload) }.to raise_error(PCPServerSDK::Errors::ApiResponseRetrievalException)
|
|
419
|
+
end
|
|
420
|
+
end
|
|
421
|
+
|
|
422
|
+
context 'when some params are nil' do
|
|
423
|
+
it 'raises a TypeError' do
|
|
424
|
+
expect { client.create_fund_split(nil, '2', '3', '4', '5', payload) }.to raise_error(TypeError, 'Merchant ID is required')
|
|
425
|
+
expect { client.create_fund_split('1', nil, '3', '4', '5', payload) }.to raise_error(TypeError, 'Commerce Case ID is required')
|
|
426
|
+
expect { client.create_fund_split('1', '2', nil, '4', '5', payload) }.to raise_error(TypeError, 'Checkout ID is required')
|
|
427
|
+
expect { client.create_fund_split('1', '2', '3', nil, '5', payload) }.to raise_error(TypeError, 'Payment Execution ID is required')
|
|
428
|
+
expect { client.create_fund_split('1', '2', '3', '4', nil, payload) }.to raise_error(TypeError, 'Event ID is required')
|
|
429
|
+
end
|
|
430
|
+
end
|
|
431
|
+
end
|
|
380
432
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pcp-server-ruby-sdk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.11.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- PAYONE GmbH
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-06-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: net-http
|
|
@@ -190,6 +190,8 @@ files:
|
|
|
190
190
|
- lib/PCP-server-Ruby-SDK/models/financing_payment_method_specific_output.rb
|
|
191
191
|
- lib/PCP-server-Ruby-SDK/models/fund_distribution.rb
|
|
192
192
|
- lib/PCP-server-Ruby-SDK/models/fund_split.rb
|
|
193
|
+
- lib/PCP-server-Ruby-SDK/models/fund_split_request.rb
|
|
194
|
+
- lib/PCP-server-Ruby-SDK/models/fund_split_response.rb
|
|
193
195
|
- lib/PCP-server-Ruby-SDK/models/installment_option.rb
|
|
194
196
|
- lib/PCP-server-Ruby-SDK/models/link_information.rb
|
|
195
197
|
- lib/PCP-server-Ruby-SDK/models/mandate_recurrence_type.rb
|
|
@@ -249,6 +251,7 @@ files:
|
|
|
249
251
|
- lib/PCP-server-Ruby-SDK/models/redirect_payment_method_specific_input.rb
|
|
250
252
|
- lib/PCP-server-Ruby-SDK/models/redirect_payment_method_specific_output.rb
|
|
251
253
|
- lib/PCP-server-Ruby-SDK/models/redirect_payment_product840_specific_input.rb
|
|
254
|
+
- lib/PCP-server-Ruby-SDK/models/redirect_payment_product900_specific_input.rb
|
|
252
255
|
- lib/PCP-server-Ruby-SDK/models/redirection_data.rb
|
|
253
256
|
- lib/PCP-server-Ruby-SDK/models/references.rb
|
|
254
257
|
- lib/PCP-server-Ruby-SDK/models/refresh_payment_request.rb
|
|
@@ -333,18 +336,18 @@ summary: Commerce Platform API Ruby Gem
|
|
|
333
336
|
test_files:
|
|
334
337
|
- spec/communicator_configuration_spec.rb
|
|
335
338
|
- spec/endpoints/payment_execution_api_client_spec.rb
|
|
339
|
+
- spec/endpoints/base_api_client_spec.rb
|
|
340
|
+
- spec/endpoints/commerce_case_api_client_spec.rb
|
|
336
341
|
- spec/endpoints/checkout_api_client_spec.rb
|
|
337
342
|
- spec/endpoints/payment_information_api_client_spec.rb
|
|
338
|
-
- spec/endpoints/commerce_case_api_client_spec.rb
|
|
339
|
-
- spec/endpoints/base_api_client_spec.rb
|
|
340
343
|
- spec/endpoints/order_management_checkout_actions_api_client_spec.rb
|
|
341
344
|
- spec/endpoints/authentication_api_client_spec.rb
|
|
345
|
+
- spec/errors/api_error_response_exception_spec.rb
|
|
342
346
|
- spec/errors/api_exception_spec.rb
|
|
343
347
|
- spec/errors/api_response_retrieval_exception_spec.rb
|
|
344
|
-
- spec/errors/api_error_response_exception_spec.rb
|
|
345
348
|
- spec/models/required_field_validation_spec.rb
|
|
346
|
-
- spec/queries/get_checkouts_query_spec.rb
|
|
347
349
|
- spec/queries/get_commerce_cases_query_spec.rb
|
|
350
|
+
- spec/queries/get_checkouts_query_spec.rb
|
|
348
351
|
- spec/request_header_generator_spec.rb
|
|
349
352
|
- spec/spec_helper.rb
|
|
350
353
|
- spec/transformer/apple_pay_transformer_spec.rb
|