Releases: Fiserv/TTPSampleApp
Release list
COM-40513
Fiserv ATTP v1.0.8 Release Notes
Idempotency
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
Increased minimum iOS version
Added Support for Pin Debit
Added Support for Pin Debit
Open Refund Changes
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
Added Additional Commerce Hub APIs