Skip to content

Releases: Fiserv/TTPSampleApp

COM-40513

Choose a tag to compare

@fs-rich-tilt fs-rich-tilt released this 07 Jul 18:34
531ba94

Fiserv ATTP v1.0.8 Release Notes


Idempotency

https://developer.fiserv.com/product/CommerceHub/docs/Developer-Resources/API-Reference/Idempotency.mdx

Commerce Hub supports an idempotency operation that allows the same API call to be submitted repeatedly while producing the same result. For example, in the case of a timeout error, a merchant can retry the same API call multiple times; this guarantees that the transaction processes once. Our APIs use the Client-Request-Id element to ensure idempotency on transaction requests.

The Client-Request-Id is a client-generated number that is unique for each request. It is used as a nonce and validated against all Client-Request-Ids received by Commerce Hub within a predetermined time frame (24 hours is the default) to prevent replay attacks. Commerce Hub uses the timestamp of the request to validate against stale requests. Any request older than the specified duration is rejected.

The following transaction types support and require a unique identifier. The recommended value is a 128-bit UUID.

1) Session Token

let clientRequestId = UUID().uuidString

try await self.fiservTTPCardReader.requestSessionToken(clientRequestId: clientRequestId)

2) Account Verification

let clientRequestId = UUID().uuidString

let response = try await self.fiservTTPCardReader.accountVerification(clientRequestId: clientRequestId,
                                                                      transactionDetailsRequest: transactionDetailsRequest,
                                                                      paymentTokenSourceRequest: self.paymentTokens?.first,
                                                                      billingAddressRequest: billingAddressRequest)

3) Tokenize Card

let clientRequestId = UUID().uuidString

let response = try await self.fiservTTPCardReader.tokenizeCard(clientRequestId: clientRequestId,
                                                               transactionDetailsRequest: transactionDetailsRequest)

4) Transaction Inquiry

let clientRequestId = UUID().uuidString

let response = try await self.fiservTTPCardReader.transactionInquiry(clientRequestId: clientRequestId,
                                                                     referenceTransactionDetailsRequest: referenceTransactionDetails)

5) Charges

let clientRequestId = UUID().uuidString

let response = try await self.fiservTTPCardReader.charges(clientRequestId: clientRequestId,
                                                          amount: bankersAmount(amount: amount),
                                                          transactionType: transactionType,
                                                          transactionDetailsRequest: transactionDetails,
                                                          referenceTransactionDetailsRequest: referenceTransactionDetails,
                                                          paymentTokenSourceRequest: paymentTokenSource)

6) Refunds

let clientRequestId = UUID().uuidString

let response = try await self.fiservTTPCardReader.refunds(clientRequestId: clientRequestId,
                                                          amount: bankersAmount(amount: amount),
                                                          refundTransactionType: refundTransactionType,
                                                          transactionDetails: transactionDetailsRequest,
                                                          referenceTransactionDetails: referenceTransactionDetails)

7) Cancels

let clientRequestId = UUID().uuidString

let response = try await self.fiservTTPCardReader.cancels(clientRequestId: clientRequestId,
                                                          amount: bankersAmount(amount: amount),
                                                          referenceTransactionDetailsRequest: referenceTransactionDetails)

Time Out Reversals

In the rare but possible event that a response from the server is not received, there is a new facility to attempt to reverse (cancel) a primary transaction. If the expected response is not received within 30 seconds, the Apple Tap To Pay package will attempt a cancel. This will continue for a maximum of 3 times after the initial timeout, with the first wait period of 30 seconds and then 3 10 seconds wait periods. After each wait period, a cancel will be attempted. In the event a response is received at anytime during a wait cycle, the response will be returned as expected. If all of the attempts do not return a response, an error will be thrown and no further cancel attempts will be made.

Timeout Reversals are supported for:

  • Charges and Refunds

Transaction Serialization

A new transaction may only begin once the previous transaction has thrown an error, or returned a success or failure response. A concurrent attempt throws a FiservTTPCardReaderError.

The following transactions support Transaction Serialization:

  • Validate Card, Account Verification, Tokenize Card, Transaction Inquiry, Charges, Refunds, Cancels

Increased minimum iOS version

Choose a tag to compare

@fs-rich-tilt fs-rich-tilt released this 17 Jul 15:47
32cbb7f

Increased minimum iOS version

Added Support for Pin Debit

Choose a tag to compare

@fs-rich-tilt fs-rich-tilt released this 21 Jun 18:21
920e98a

Added Support for Pin Debit

Open Refund Changes

Choose a tag to compare

@fs-rich-tilt fs-rich-tilt released this 01 May 18:04
295698a

Added support for Open Refunds that allow transaction details to be included for later reference

0.0.5: Merge pull request #4 from Fiserv/no_config

Choose a tag to compare

@fs-rich-tilt fs-rich-tilt released this 12 Apr 19:52
120dbf9

Added Additional Commerce Hub APIs