Create payment request
To keep our API logical and easy to understand, we decided to change some of the existing object definitions. Our system will accept both the old definition and the new definition, as long as you don't mix old and new definitions in one API call.
This means that your current implementation will keep working, but will most likely not support all the properties required to ensure the maximum number of consumers use the frictionless flow. Our new SDKs will support the new object definitions and will require some development work on your side to adopt.
Create Payment API
Request properties for 3D Secure version 2
The below overview shows all properties in the input that are used in the 3D Secure version 2 authentication. In the description it is mentioned if the property is required and under which conditions.
Property | Type | Details |
---|---|---|
fraudFields | object | Object containing additional data that will be used to assess the risk of fraud. |
merchant | object | Object containing information on you, the merchant. |
websiteUrl | string (60) | The website from which the purchase was made. The '+' character is not allowed in this property for transactions that are processed by TechProcess Payment Platform. |
contactWebsiteUrl | string (2048) | URL to find contact or support details to contact in case of questions. |
order | object | Order object containing order related data. |
shipping | object | Object containing information regarding shipping / delivery. |
addressIndicator | string | Indicates shipping method chosen for the transaction. Possible values:
|
additionalInput | object | Object containing additional input on the order. |
typeInformation | object | Object that holds the purchase and usage type indicators. |
transactionType | string | Required for merchants from Brazil in case order.amountOfMoney.amount is not 0. Identifies the type of transaction being authenticated. Possible values are:
|
customer | object | Object containing the details of the customer. |
account | object | Object containing data related to the account the customer has with you. |
createDate | string (8) | The date (YYYYMMDD) on which the customer created their account with you. We will calculate the CustomerAccountAgeIndicator using this property and the order.customer.accountType |
changeDate | string (8) | The last date (YYYYMMDD) on which the customer made changes to their account with you. These are changes to billing & shipping address details, new payment account (tokens), or new users(s) added. We will use the data from this property and the order.customer.account.changedDuringCheckout to determine the 'age' of the changes. For 3D Secure version 2 this property and the 'age' of the changes are used. |
changedDuringCheckout | boolean |
We will use the data from this property and the order.customer.account.chang . eDate to determine the 'age' of the changes. For 3D Secure version 2 only the resulting 'age' of the changes is used. |
passwordChangeDate | string (8) | The last date (YYYYMMDD) on which the customer changed their password for the account used in this transaction. We will use the data from this property and the order.customer.account.passwordChangedDuring kout to determine the 'age' of the changes. For 3D Secure version 2 this property and the 'age' of the password change are used. |
passwordChangedDuringCheckout | boolean | Indicates if the password of an account is changed during this checkout.
|
hasForgottenPassword | boolean | Specifies if the consumer (initially) had forgotten their password
|
hadSuspiciousActivity | boolean | Specifies if you have experienced suspicious activity on the account of the consumer.
|
authentication | object | Object containing data on the authentication used by the consumer to access their account. |
utcTimestamp | string (12) | Timestamp (YYYYMMDDHHmm) of the authentication of the consumer to their account with you. |
method | string | Authentication used by the consumer on your website.
|
paymentActivity | object | Object containing data on the purchase history of the consumer with you. |
numberOfPurchasesLast6Months | integer (4) | Number of successful purchases made by this consumer with you in the last 6 months. |
numberOfPaymentAttemptsLast24Hours | integer (3) | Number of payment attempts (so including unsuccessful ones) made by this consumer with you in the last 24 hours. |
numberOfPaymentAttemptsLastYear | integer (3) | Number of payment attempts (so including unsuccessful ones) made by this consumer with you in the last 12 months. |
paymentAccountOnFileType | string | Required for merchants in Brazil Indicates the type of account. For example, for a multi-account card product.
|
paymentAccountOnFile | object | Object containing information on the payment account data on file (tokens). |
numberOfCardOnFileCreationAttemptsLast24Hours | integer (3) | Number of attempts made to add new card to the consumer account in the last 24 hours. |
createDate | string (8) | The date (YYYYMMDD) when the payment account on file was first created. In case a token is used for the transaction we will use the creation date of the token in our system in case you leave this property empty. |
accountType | string | Type of the customer account that is used to place this order. Can have one of the following values:
|
companyInformation | object | Object containing information of the company in case the consumer is a company. |
vatNumber | Local VAT number of the 'consumer' Moved from order.customer This property is not used for 3D Secure version 2. | |
billingAddress | object | Object containing the billing address details. |
additionalInfo | string (50) | Additional address information. |
city | string (40) | City. |
countryCode | string (2) | ISO 3166-1 alpha-2 country code. |
houseNumber | string (15) | House number. |
stateCode | string | |
street | string (50) | Street name. |
zip | string (10) | Zip code. |
device | object | Object containing information on the device and browser of the consumer. |
acceptHeader | string (2408) | Required for 3D Secure version 2 for the authenticationFlow "browser" The accept-header of the consumer client from the HTTP Headers. |
ipAddress | string (45) | Required for 3D Secure version 2 for the authenticationFlow "browser" The IP address of the consumer client from the HTTP Headers. Moved from fraudFields, increased in size (to also accommodate IPv6 addresses) and renamed (previously fraudFields.customerIpAddress). |
deviceFingerprintTransactionId | string (50) | One must use the deviceFingerprintTransactionId received by the response of the endpoint /{merchant}/products/{paymentProductId}/ deviceFingerprint which was also used by the JavaScript code Moved from fraudFields.deviceFingerprintTransactionId This property is not used for 3D Secure version 2, although in the future we might use this service to populate the device and browser related properties. |
defaultFormFill | string | Degree of default form fill, with the following possible values:
|
timezoneOffsetUtcMinutes | string (6) | Required for 3D Secure version 2 for the authenticationFlow "browser" Offset in minutes of timezone of the client vs the UTC. Value is returned by the JavaScript getTimezoneOffset() Method. If you use the latest version of our JavaScript Client SDK, we will collect this data and include it in the encryptedCustomerInput . property. We will then automatically populate this data if available. Note: This data can only be collected if JavaScript is enabled in the browser. This means that 3D Secure version 2.1 requires the use of JavaScript to be enabled. In the upcoming version 2.2 of the specification this is no longer a requirement. As we currently support version 2.1 it means that this property is required when is set to "browser". |
locale | string (8) | Required for 3D Secure version 2 for the authenticationFlow "browser" Locale of the client device/browser. Returned in the browser from the navigator.language property. If you use the latest version of our JavaScript Client SDK, we will collect this data and include it in the encryptedCustomerInput . property. We will then automatically populate this data if available. Note: This data can only be collected if JavaScript is enabled in the browser. This means that 3D Secure version 2.1 requires the use of JavaScript to be enabled. In the upcoming version 2.2 of the specification this is no longer a requirement. As we currently support version 2.1 it means that this property is required when is set to "browser". |
userAgent | string (2048) | Required for 3D Secure version 2 for the authenticationFlow "browser" User-Agent of the client device/browser from the HTTP Headers. As a fall-back we will use the userAgent that might be included in the encryptedCustomerInput, but this is captured client side using JavaScript and might be different. |
browserData | object | Object containing information regarding the browser of the consumer. |
javaEnabled | boolean | Required for 3D Secure version 2 for the authenticationFlow "browser"
If you use the latest version of our JavaScript Client SDK, we will collect this data and include it in the encryptedCustomerInput . property. We will then automatically populate this data if available. Note: This data can only be collected if JavaScript is enabled in the browser. This means that 3D Secure version 2.1 requires the use of JavaScript to be enabled. In the upcoming version 2.2 of the specification this is no longer a requirement. As we currently support version 2.1 it means that this property is required when is set to "browser". |
javaScriptEnabled | boolean | Required for 3D Secure version 2 for the authenticationFlow "browser"
|
colorDepth | integer (2) | Required for 3D Secure version 2 for the authenticationFlow "browser" ColorDepth in bits. Value is returned from the screen.colorDepth property. If you use the latest version of our JavaScript Client SDK, we will collect this data and include it in the encryptedCustomerInput . property. We will then automatically populate this data if available. Note: This data can only be collected if JavaScript is enabled in the browser. This means that 3D Secure version 2.1 requires the use of JavaScript to be enabled. In the upcoming version 2.2 of the specification this is no longer a requirement. As we currently support version 2.1 it means that this property is required when is set to "browser". |
screenHeight | string (6) | Required for 3D Secure version 2 for the authenticationFlow "browser" Height of the screen in pixels. Value is returned from the screen.height property. If you use the latest version of our JavaScript Client SDK, we will collect this data and include it in the encryptedCustomerInput . property. We will then automatically populate this data if available. Note: This data can only be collected if JavaScript is enabled in the browser. This means that 3D Secure version 2.1 requires the use of JavaScript to be enabled. In the upcoming version 2.2 of the specification this is no longer a requirement. As we currently support version 2.1 it means that this property is required when is set to "browser". |
screenWidth | string (6) | Required for 3D Secure version 2 for the authenticationFlow "browser" Width of the screen in pixels. Value is returned from the screen.width property. If you use the latest version of our JavaScript Client SDK, we will collect this data and include it in the encryptedCustomerInput . property. We will then automatically populate this data if available. Note: This data can only be collected if JavaScript is enabled in the browser. This means that 3D Secure version 2.1 requires the use of JavaScript to be enabled. In the upcoming version 2.2 of the specification this is no longer a requirement. As we currently support version 2.1 it means that this property is required when is set to "browser". |
innerHeight | string (6) | The innerHeight of the frame in case you are capturing your payments in a frame. We will use this to validate if the height provided in the will actually fit in the iframe you use. If you use the latest version of our JavaScript Client SDK, we will collect this data and include it in the encryptedCustomerInput property. We will then automatically populate this data if available. Note: This data can only be collected if JavaScript is enabled in the browser. |
innerWidth | string (6) | The innerWidth of the frame in case you are capturing your payments in a frame. We will use this to validate if the width provided in the will actually fit in the iframe you use. If you use the latest version of our JavaScript Client SDK, we will collect this data and include it in the encryptedCustomerInput property. We will then automatically populate this data if available. Note: This data can only be collected if JavaScript is enabled in the browser. |
contactDetails | object | Object containing contact details of the consumer. |
mobilePhoneNumber | string (20) | International version of the mobile phone number of the customer including the leading + (i.e. +16127779311). Official max length is string (15) making it string (16) to include the leading + sign |
phoneNumber | string (20) | International version of the home phone number of the consumer including the leading + (i.e. +16127779311). Official max length is string (15) making it string (16) to include the leading + sign |
workPhoneNumber | string (20) | International version of the work phone number of the consumer including the leading + (i.e. +31235671500). Official max length is string (15) making it string (16) to include the leading + sign |
shipping | object | Object containing information regarding shipping / delivery. |
type | string | Indicates the merchandise delivery timeframe.
|
firstUsageDate | boolean | Date (YYYYMMDD) when the shipping details for this transaction where first used. We will use the data from this property and the order.shipping.isFirstUsage to determine the 'age' of the shipping details. For 3D Secure version 2 this property and the 'age' of the shipping details change are used. |
isFirstUsage | boolean | Indicator if this shipping address is used for the first time to ship an order:
For 3D Secure version 2 only the resulting 'age' of the shipping details is used. |
addressIndicator | string | Indicates shipping method chosen for the transaction.
|
emailAddress | string (70) | Email address linked to the shipping. |
address | object | Object containing address information. |
additionalInfo | string (50) | Additional address information. Moved from order.customer.shippingaddress |
city | string (40) | City Moved from order.customer.shippingaddress |
countryCode | string (2) | ISO 3166-1 alpha-2 country code. Moved from order.customer.shippingaddress |
houseNumber | string (15) | |
name | object | Object containing the name elements. Moved from order.customer.shippingaddress.name |
firstName | string (15) | Given name(s) or first name(s) of the consumer. Moved from order.customer.shippingaddress.name.firstName This property is not used for 3D Secure version 2. |
surname | string (70) | Surname(s) or last name(s) of the consumer. Moved from order.customer.shippingaddress.name.surname This property is not used for 3D Secure version 2. |
surnamePrefix | string (15) | Middle name - In between first name and surname - of the consumer. Moved from order.customer.shippingaddress.name.surnamePrefix This property is not used for 3D Secure version 2. |
title | Title of consumer. Moved from order.customer.shippingaddress.name.title This property is not used for 3D Secure version 2. |
|
state | string (35) | State of the consumer. Moved from order.customer.shippingaddress.state This property is not used for 3D Secure version 2. |
stateCode | string (3) | ISO 3166-2 alpha-3 state code. Please note that the max length used for 3D Secure version 2 is string (3). Moved from order.customer.shippingaddress.stateCode |
street | string (50) | Street name. oved from order.customer.shippingaddress.street |
zip | string | Zip code. Moved from order.customer.shippingaddress.zip |
trackingNumber | string (19) | Shipment tracking number. Moved from fraudFields and renamed (old name = shipmentTrackingNumber ) to bundle all the shipping related properties together. This property is not used for 3D Secure version 2. |
comments | string (160) | Comments included during shipping. Moved from fraudFields and renamed (old name = shipComments . ) to bundle all the shipping related properties together. This property is not used for 3D Secure version 2. |
shoppingCart | object | Object containing information on the item(s) in the shopping cart. |
isPreOrder | boolean | The consumer is pre-ordering one or more items. |
preOrderItemAvailabilityDate | string (8) | Date (YYYYMMDD) when the preordered item becomes available. |
giftCardPurchase | object | Object containing information on purchased gift card(s). |
amountOfMoney | object | Object containing information on an amount of money. |
amount | integer (12) | Amount in cents and always having 2 decimals. |
currencyCode | string (3) | Three-letter ISO currency code representing the currency for the amount. |
numberOfGiftCards | integer (2) | Number of gift cards that are purchased through this transaction. |
reOrderIndicator | boolean | Indicates whether the cardholder is reordering previously purchased item(s).
|
cardPaymentMethodSpecificInput | object | Object containing data regarding card payments. |
transactionChannel | string | Indicates the channel via which the payment is created. Allowed values:
All transactions flagged as MAIL, MOTO or TELEPHONE are out of scope for PSD2 Strong Customer Authentication. |
card | object | Object containing card data. |
cardNumber | string (19) | The complete credit/debit card number (also know as the PAN). The card number is always obfuscated in any of our responses Required, except when a token or encryptedCustomerInput that includes this data is provided. |
cardholderName | string (51) | Required for 3D Secure version 2, except when a token or encryptedCustomerInput that includes this data is provided. The card holder's name on the card. This property was optional for payments on the GlobalCollect platform, but will be required for transactions that utilize 3D Secure version 2. |
expiryDate | string (4) | Expiry date of the cardFormat: MMYY Required, except when a token or encryptedCustomerInput that includes this data is provided. |
isRecurring | boolean | Indicates if this transaction is of a one-off or a recurring type:
|
recurring | object | Object containing data related to recurring. |
endDate | string (8) | Date (YYYYMMDD) in the future after which no further authorizations shall be performed. Note: This property is required when isRecurring is set to true, property recurringPaymentSequenceIndicato is set to first and 3D Secure version 2 is enabled for the merchant. |
minFrequency | integer (4) | This indicates the number of days between the recurring authorizations. Can be set to "1" to indicate that the frequency is variable. Note: This property is required when isRecurring is set to true, property recurringPaymentSequenceIndicator is set to first and 3D Secure version 2 is enabled for the merchant. |
recurringPaymentSequenceIndicator | string |
Note: This property is required when isRecurring is set to true. 3D Secure will not be used when this property is set to recurring Moved from cardPaymentMethodSpecificInput. recurringPaymentSequenceIndicator |
threeDSecure | object | Object containing specific data regarding 3D Secure. |
authenticationFlow | string | Indicates whether a transaction is performed in-app using an EMVco certified mobile SDK or inside a browser.
|
challengeCanvasSize | string | Required for 3D Secure version 2 for the browser flow. Dimensions of the challenge window that potentially will be displayed to the consumer. The challenge content is formatted to appropriately render in this window to provide the best possible user experience. Preconfigured sizes are width x height in pixels of the window displayed in the consumer browser window. Possible values are: 250x400 (default), 390x400, 500x600, 600x400, full-screen. |
challengeIndicator | string | Allows you to indicate if you want the consumer to be challenged for extra security on this transaction. no-preference = You have no preference whether or not to challenge the consumer (default) no-challenge-requested = you prefer the cardholder not to be challenged challenge-requested = you prefer the consumer to be challenged challenge-required = you require the consumer to be challenged |
exemptionRequest | string | Allows you to indicate if you want us to request a certain type of exemption.
|
externalCardholderAuthenticationData | object | Object containing results of an external authentication (not performed by Worldline). Moved from cardPaymentMethodSpecificInput.externalCardHolderAuthenticationData |
cavv | string (50) | The CAVV (cardholder authentication verification value) or AAV (accountholder authentication value) provides an authentication validation value. This is mandatory for ECI 1, 2, 5 and 6. Moved from cardPaymentMethodSpecificInput.externalCardHolderAuthenticationData |
cavvAlgoritm | string (1) | The algorithm, from your 3D Secure provider, used to generate the authentication CAVV. Required when The 3D Secure authentication for the transaction is managed by a non-Worldline 3D Secure authentication provider. You process the transaction through Atos. Moved from cardPayment |
eci | integer (2) | Electronic Commerce Indicator provides authentication validation results returned after AUTHENTICATIONVALIDATION. 0 = No authentication, Internet (no liability shift, not a 3D Secure transaction) 1 = Authentication attempted (Mastercard) 2 = Successful authentication (Mastercard) 5 = Successful authentication (Visa, Diners Club, Amex) 6 = Authentication attempted (Visa, Diners Club, Amex) 7 = No authentication, Internet (no liability shift, not a 3D Secure transaction) (empty) = Not checked or not enrolled Moved from cardPaymentMethodSpecificInput.externalCardHolderAuthenticationData |
directoryServerTransactionId | string | The 3D Secure Directory Server transaction ID that is used for the 3D Secure version 2 Authentication. |
validationResult | The 3D Secure authentication result from your 3D Secure provider. Required when The 3D Secure authentication for the transaction is managed by a non-Worldline 3D Secure authentication provider You process the transaction through Atos. Moved from cardPaymentMethodSpecificInput.externalCardHolderAuthenticationData | |
xid | string | Transaction ID for the Authentication. Moved from cardPaymentMethodSpecificInput.externalCardHolderAuthenticationData |
priorThreeDSecureData | object | Object containing data regarding the consumer authentication that occurred prior to the current transaction. |
acsTransactionId | string (36) | The ACS Transaction ID for a prior 3D Secure authenticated transaction (for example, the first recurring transaction that was authenticated with the consumer). |
method | string | Method of authentication used for this transaction. Possible values:
|
utcTimestamp | string (12) | Timestamp in UTC (YYYYMMDDHHmm) of the prior 3D Secure authentication. |
sdkData | object | Object containing 3D Secure in-app SDK data. |
sdkAppId | string (36) | Required for 3D Secure version 2 for the in-app flow. Universally unique ID created upon all installations and updates of your app on a consumer Device. This will be newly generated and stored by the 3DS SDK for each installation or update. |
deviceRenderOptions | object | Required for 3D Secure version 2 for the in-app flow. Device information gathered by the 3DS SDK on a consumer device. This is JSON name/value pairs that as a whole is Base64url encoded. |
sdkInterface | string | Required for 3D Secure version 2 for the in-app flow. Lists all of the SDK Interface types that the device supports for displaying specific challenge user interfaces within the SDK.
|
sdkEncryptedData | string (64000) | Required for 3D Secure version 2 for the in-app flow. JWE Object containing data encrypted by the 3D Secure SDK. |
sdkEphemeralPublicKey | string (256) | Required for 3D Secure version 2 for the in-app flow. Public key component of the ephemeral key pair generated by the 3D Secure SDK and used to establish session keys between the 3D Secure SDK and ACS. |
sdkMaxTimeout | string (2) | Required for 3D Secure version 2 for the in-app flow, except when order.amountOfMoney.amount is zero. Indicates maximum amount of time (in minutes) for all exchanges. Minimum amount of minutes is 5. |
sdkReferenceNumber | string (32) | Required for 3D Secure version 2 for the in-app flow. Identifies the vendor and version for the 3D Secure SDK that is integrated in your app, assigned by EMVCo when the 3D Secure SDK is approved. |
sdkTransactionId | string (36) | Required for 3D Secure version 2 for the in-app flow. Universally unique transaction identifier assigned by the 3D Secure SDK to identify a single transaction. |
skipAuthentication | boolean |
Note: Any configured Dynamic 3D rules will be ignored when you submit this property. Moved from cardPaymentMethodSpecificInput |
unscheduledCardOnFileRequestor | string | Indicates which party initiated the unscheduled recurring transaction. Allowed values:
|
unscheduledCardOnFileSequenceIndicator | string |
|
initialSchemeTransactionId | The unique scheme transactionId of the initial transaction that was performed with SCA. In case this is unknown a scheme transactionId of an earlier transaction part of the same sequence can be used as a fall-back. Strongly advised to be submitted for any MerchantInitiated or recurring transaction (subsequent one). |
Additional response properties related to 3D Secure version 2
It's possible that the Authentication fails, and the reason why will be detailed in the errors. It is also possible that the issuer will require Strong Customer Authentication (SCA) to be provided before the issuer will authorize the transaction. Put simply, you should process the transaction in a way that allows SCA through for instance a challenge to take place.
The below overview shows all properties in the output that are used in the 3D Secure version 2 authentication.
Property name | Type | Description | |||||
---|---|---|---|---|---|---|---|
payment | Object | Object containing data regarding the payment | |||||
paymentOutput | Object | Object containing output data regarding the payment | |||||
cardPaymentMethodSpecificOutput | Object | Object containing card payment method specific output | |||||
initialSchemeTransactionId | AN100 | The unique scheme transactionId of the initial transaction that was performed with SCA. Should be stored by the merchant to allow it to be submitted in future transactions. |
|||||
schemeTransactionId | AN100 | The unique scheme transactionId of this transaction. Should be stored by the merchant to allow it to be submitted in future transactions. Use this value in case the initialSchemeTransactionId property is empty. |
|||||
threeDSecureResults | Object | Object containing results of the 3D Secure authentication | |||||
sdkData | Object | Object containing 3D Secure in-app SDK data | |||||
sdkTransactionId | AN36 | Universally unique transaction identifier assigned by the 3D Secure SDK to identify this transaction. | |||||
threeDSecureData | Object | Object containing data regarding the 3D Secure authentication | |||||
acsTransactionId | AN36 | The ACS Transaction ID for this transaction. You should store this data as you will need it for the next transaction with the same card | |||||
method | Enum (String) | Method of authentication used for this transaction. Possible values:
|
|||||
utcTimestamp | AN12 | Timestamp in UTC (YYYYMMDDHHmm) of the 3D Secure authentication of this transaction. You should store this data as you will need it for the next transaction with the same card | |||||
directoryServerTransactionId | AN36 | The 3D Secure Directory Server transaction ID that is used for the 3D Secure version 2 Authentication. This property is used in the communication with the acquirer. | |||||
threeDServerTransactionId | AN36 | The 3D Secure Server transaction ID that is used for the 3D Secure version 2 Authentication. | |||||
threeDSecureVersion | AN10 | The 3D Secure version used for the authentication. This property is used in the communication with the acquirer. |
The above mentioned additional properties in the response to the Create Payment request have been added generically. This means that they are also returned on a Get Payment request and all other requests that return a paymentOutput object. Please note that they are only returned in case of a 3D Secure version 2 authentication, with the exception of the initialSchemeTransactionId and the schemeTransactionId. One or both of these will be returned based on acquirer capabilities.
Examples
{
"cardPaymentMethodSpecificInput": {
"card": {
"cvv": "352",
"cardNumber": "4012000033330026",
"expiryDate": "1220",
"cardholderName": "Wile E. Coyote"
},
"isRecurring": false,
"paymentProductId": 1,
"transactionChannel": "ECOMMERCE",
"threeDSecure": {
"challengeIndicator": "no-preference",
"challengeCanvasSize": "600x400",
"authenticationFlow": "browser",
"redirectionData": {
"returnUrl": "https://hostname.myownwebsite.url"
}
}
},
"order": {
"amountOfMoney": {
"currencyCode": "EUR",
"amount": 100
},
"customer": {
"accountType": "none",
"billingAddress": {
"countryCode": "NL"
},
"device": {
"acceptHeader": "texthtml,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"browserData": {
"colorDepth": 24,
"javaEnabled": false,
"screenHeight": "1200",
"screenWidth": "1920"
},
"ipAddress": "123.123.123.123",
"locale": "en-US",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1 Safari/605.1.15",
"timezoneOffsetUtcMinutes": "420"
},
"locale": "en_US",
"merchantCustomerId": "1234"
},
"references": {
"merchantOrderId": 123456,
"merchantReference": "vlSjO1XpvQgF3EYNvpA6rUDymoY6yD"
}
}
}
{
"creationOutput" : {
"additionalReference" : "gUnulVY5fw3gjcuVpUgG",
"externalReference" : "gUnulVY5fw3gjcuVpUgG3hMOPHU3Ry"
},
"payment" : {
"id" : "000007041700000008370000100001",
"paymentOutput" : {
"amountOfMoney" : {
"amount" : 100,
"currencyCode" : "EUR"
},
"references" : {
"merchantOrderId" : 123456,
"merchantReference" : "gUnulVY5fw3gjcuVpUgG3hMOPHU3Ry",
"paymentReference" : "0"
},
"paymentMethod" : "card",
"cardPaymentMethodSpecificOutput" : {
"paymentProductId" : 1,
"fraudResults" : {
"fraudServiceResult" : "no-advice",
"avsResult" : "0",
"cvvResult" : "0"
},
"threeDSecureResults" : {
"cavv" : "AAABBEg0VhI0VniQEjRWAAAAAAA=",
"directoryServerTransactionId" : "f25084f0-5b16-4c0a-ae5d-b24808a95e4b",
"eci" : "05",
"threeDSecureData" : {
"acsTransactionId" : "A9885E27-797D-4726-BDE6-18C502D62C04",
"method" : "frictionless",
"utcTimestamp" : "201907082235"
},
"threeDSecureVersion" : "2.1.0",
"threeDServerTransactionId" : "1aaeac7f-3736-425f-b23b-f93051d1cc64"
},
"card" : {
"cardNumber" : "************0026",
"expiryDate" : "1220"
}
}
},
"status" : "PENDING_APPROVAL",
"statusOutput" : {
"isCancellable" : true,
"statusCategory" : "PENDING_MERCHANT",
"statusCode" : 600,
"statusCodeChangeDateTime" : "20190708223547",
"isAuthorized" : true,
"isRefundable" : false
}
}
}
{
"creationOutput" : {
"additionalReference" : "Jb0dIphrG82esg5YA83K",
"externalReference" : "Jb0dIphrG82esg5YA83KcjY0Rh8il5"
},
"merchantAction" : {
"actionType" : "REDIRECT",
"redirectData" : {
"RETURNMAC" : "d317d15e-0fb5-48ef-b177-cbebb282ff0d",
"redirectURL" : "http://payment.globalcollect-cc100.com:20105/3dsecure/0be7decc-5fb8-4e29-a71a-5b0f1bc93926?returnMAC=d317d15e-0fb5-48ef-b177-cbebb282ff0d"
}
},
"payment" : {
"id" : "000007041700000008380000100001",
"paymentOutput" : {
"amountOfMoney" : {
"amount" : 100,
"currencyCode" : "EUR"
},
"references" : {
"merchantOrderId" : 123456,
"merchantReference" : "Jb0dIphrG82esg5YA83KcjY0Rh8il5",
"paymentReference" : "0"
},
"paymentMethod" : "card",
"cardPaymentMethodSpecificOutput" : {
"paymentProductId" : 1,
"threeDSecureResults" : {
"threeDSecureData" : {
"utcTimestamp" : "201907082250"
},
"threeDSecureVersion" : "2.1.0",
"threeDServerTransactionId" : "054379bc-3745-49ae-8756-5ee36641a5f9"
},
"card" : {
"cardNumber" : "************7977",
"expiryDate" : "1220"
}
}
},
"status" : "REDIRECTED",
"statusOutput" : {
"isCancellable" : false,
"statusCategory" : "PENDING_PAYMENT",
"statusCode" : 50,
"statusCodeChangeDateTime" : "20190708225051",
"isAuthorized" : false,
"isRefundable" : false,
"threeDSecureStatus" : "ENROLLED"
}
}
}
The additional threeDSecureStatus returns ENROLLED as the card is available for authentication via either 3D Secure version. We continue to use the same terminology and statusses as before to make your transition to support 3D Secure as smooth as possible. We take care of the optional additional methodURL step on our side, to reduce the impact of implementing 3D Secure version 2 to only the submission of the new properties.
Redirection is always handled in the exact same way regardless of the 3D Secure version of flow. We did remove some steps in the process resulting in the following statusCodes no longer being returned: 20, 25 and 30.
{
"creationOutput" : {
"additionalReference" : "YQPU7omuq4m4L8DJPmGh",
"externalReference" : "YQPU7omuq4m4L8DJPmGhK5ybC0DxFn"
},
"merchantAction" : {
"actionType" : "REDIRECT",
"redirectData" : {
"RETURNMAC" : "a59255a0-2d1e-4b65-ad8e-7666d9eaa51a",
"redirectURL" : "http://payment.globalcollect-cc100.com:20105/redirector/70ad24f4-4c0a-442c-99b2-e4bdfd1aa0ec?locale=en_US"
},
"showData" : [ ]
},
"payment" : {
"id" : "000007041700000008390000100001",
"paymentOutput" : {
"amountOfMoney" : {
"amount" : 100,
"currencyCode" : "EUR"
},
"references" : {
"merchantOrderId" : 123456,
"merchantReference" : "YQPU7omuq4m4L8DJPmGhK5ybC0DxFn",
"paymentReference" : "0"
},
"paymentMethod" : "card",
"cardPaymentMethodSpecificOutput" : {
"paymentProductId" : 1,
"threeDSecureResults" : {
"directoryServerTransactionId" : "f25084f0-5b16-4c0a-ae5d-b24808a95e4b",
"threeDSecureData" : {
"acsTransactionId" : "A9885E27-797D-4726-BDE6-18C502D62C18",
"method" : "frictionless",
"utcTimestamp" : "201907082256"
},
"threeDSecureVersion" : "2.1.0",
"threeDServerTransactionId" : "7e583802-8f45-4c67-81a9-07f975e2413d"
},
"card" : {
"cardNumber" : "************2672",
"expiryDate" : "1220"
}
}
},
"status" : "REDIRECTED",
"statusOutput" : {
"isCancellable" : false,
"statusCategory" : "PENDING_PAYMENT",
"statusCode" : 50,
"statusCodeChangeDateTime" : "20190708225626",
"isAuthorized" : false,
"isRefundable" : false,
"threeDSecureStatus" : "ENROLLED"
}
}
}
The additional threeDSecureStatus returns ENROLLED as the card ia available for authentication via either 3D Secure version. We continue to use the same terminology and statusses as before to make your transition to support 3D Secure as smooth as possble. We take care of the optional additional methodURL step on our side, to reduce the impact of implementing 3D Secure version 2 to only the submission of the new properties.
Redirection is always handled in the exact same way regardless of the 3D Secure version of flow. We did remove some steps in the process resulting in the following statusCodes no longer being returned: 20, 25 and 30.
{
"creationOutput" : {
"additionalReference" : "fU3pYUGRWRippBwdyliJ",
"externalReference" : "fU3pYUGRWRippBwdyliJV2tsKubTrN"
},
"merchantAction" : {
"actionType" : "REDIRECT",
"redirectData" : {
"RETURNMAC" : "f6708f89-68fe-4e65-9e55-bfe8f638da34",
"redirectURL" : "http://payment.globalcollect-cc100.com:20105/redirector/319ea199-4094-44ba-b28d-c17a10089b0c?locale=en_US"
},
"showData" : [ ]
},
"payment" : {
"id" : "000007041700000008410000100001",
"paymentOutput" : {
"amountOfMoney" : {
"amount" : 100,
"currencyCode" : "EUR"
},
"references" : {
"merchantOrderId" : 123456,
"merchantReference" : "fU3pYUGRWRippBwdyliJV2tsKubTrN",
"paymentReference" : "0"
},
"paymentMethod" : "card",
"cardPaymentMethodSpecificOutput" : {
"paymentProductId" : 1,
"card" : {
"cardNumber" : "************0002",
"expiryDate" : "1220"
}
}
},
"status" : "REDIRECTED",
"statusOutput" : {
"isCancellable" : false,
"statusCategory" : "PENDING_PAYMENT",
"statusCode" : 50,
"statusCodeChangeDateTime" : "20190708230724",
"isAuthorized" : false,
"isRefundable" : false,
"threeDSecureStatus" : "ENROLLED"
}
}
}
The additional threeDSecureStatus returns ENROLLED as the card ia available for authentication via either 3D Secure version. We continue to use the same terminology and statusses as before to make your transition to support 3D Secure as smooth as possble. We take care of the optional additional methodURL step on our side, to reduce the impact of implementing 3D Secure version 2 to only the submission of the new properties.
Redirection is always handled in the exact same way regardless of the 3D Secure version of flow. We did remove some steps in the process resulting in the following statusCodes no longer being returned: 20, 25 and 30.
{
"errorId": "5d23642a18a1c3fe481964da5a96df5f",
"errors": [
{
"code": "401025",
"message": "MEDIUM_CONFIDENCE",
"httpStatusCode": 402
}
],
"paymentResult": {
"creationOutput": {
"additionalReference": "EEeYqOtEOFMnmf1oLPmr",
"externalReference": "EEeYqOtEOFMnmf1oLPmrliDjr568mC"
},
"merchantAction": {
"actionType": "SHOW_TRANSACTION_RESULTS",
"renderingData": "eyJ0eXBlIjoicnBwSG9zdGVkQ2hlY2tvdXQiLCJob3N0ZWRTZXNzaW9uU3BlY2lmaWNJbnB1dCI6eyJ0eXBlIjoicnBwU3BlY2lmaWNJbnB1dCIsImNhcnQiOnsiY3VycmVuY3lTeW1ib2wiOiLigqwiLCJ0b3RhbFByaWNlIjoxMDB9LCJyZXR1cm5DYW5jZWxTdGF0ZSI6ZmFsc2V9LCJjcmVhdGVkUGF5bWVudE91dHB1dCI6eyJwYXltZW50Ijp7ImlkIjoiMDAwMDA3MDQxNzAwMDAwMDA4NDUwMDAwMTAwMDAxIiwic3RhdHVzIjoiUEVORElOR19BUFBST1ZBTCJ9LCJtZXJjaGFudEFjdGlvbiI6eyJhY3Rpb25UeXBlIjoiU0hPV19UUkFOU0FDVElPTl9SRVNVTFRTIiwic2hvd0RhdGEiOlt7ImtleSI6IkNBUkRIT0xERVJJTkZPIiwidmFsdWUiOiJjYXJkaG9sZGVyIn1dfX0sInBhcnRpYWxQYXltZW50SW5wdXQiOnsiYW1vdW50IjoxMDAsImNvdW50cnlDb2RlIjoiTkwiLCJjdXJyZW5jeUNvZGUiOiJFVVIiLCJpc1JlY3VycmluZyI6ZmFsc2UsIm1lcmNoYW50SWQiOiI3MDQxNyIsInBheW1lbnRQcm9kdWN0SWQiOjF9LCJycHBTcGVjaWZpY0lucHV0Ijp7ImNhcnQiOnsiY3VycmVuY3lTeW1ib2wiOiLigqwiLCJ0b3RhbFByaWNlIjoxMDB9LCJyZXR1cm5DYW5jZWxTdGF0ZSI6ZmFsc2V9fQ==",
"showData": [
{
"key": "CARDHOLDERINFO",
"value": "Additional authentication is needed for this transaction, please contact (Issuer Name) at xxx-xxx-xxxx."
}
]
},
"payment": {
"id": "000007041700000008440000100001",
"paymentOutput": {
"amountOfMoney": {
"amount": 100,
"currencyCode": "EUR"
},
"references": {
"merchantOrderId": 123456,
"merchantReference": "EEeYqOtEOFMnmf1oLPmrliDjr568mC",
"paymentReference": "0"
},
"paymentMethod": "card",
"cardPaymentMethodSpecificOutput": {
"paymentProductId": 1,
"threeDSecureResults": {
"directoryServerTransactionId": "f25084f0-5b16-4c0a-ae5d-b24808a95e4b",
"threeDSecureData": {
"acsTransactionId": "A9885E27-797D-4726-BDE6-18C502D62C08",
"method": "frictionless",
"utcTimestamp": "201907082309"
},
"threeDSecureVersion": "2.1.0",
"threeDServerTransactionId": "77737c0c-9a6b-432f-a2c6-c66a0438476b"
},
"card": {
"cardNumber": "************5550",
"expiryDate": "1220"
}
}
},
"status": "REJECTED",
"statusOutput": {
"errors": [
{
"code": "401025",
"requestId": "7830",
"message": "MEDIUM_CONFIDENCE",
"httpStatusCode": 402
}
],
"isCancellable": false,
"statusCategory": "UNSUCCESSFUL",
"statusCode": 180,
"statusCodeChangeDateTime": "20190708230928",
"isAuthorized": false,
"isRefundable": false,
"threeDSecureStatus": "INVALID_PARES_OR_NOT_COMPLETED"
}
}
}
}
The above scenario returns a new element in the 3D Secure flow. For transactions that have not been authenticated successfully using a frictionless flow the issuer might return so called cardholderInfo. In case this is returned we will return this as part of a SHOW_TRANSACTION_RESULTS merchantAction. Presenting this data back to the consumer is optional. In our hostedCheckouts we will always show it to the consumer, but in the Create Payment flow this is left to you.
{
"creationOutput" : {
"additionalReference" : "3PY2aFLDIusp0ESjdaon",
"externalReference" : "3PY2aFLDIusp0ESjdaonVichbsybYn"
},
"payment" : {
"id" : "000007041700000008420000100001",
"paymentOutput" : {
"amountOfMoney" : {
"amount" : 100,
"currencyCode" : "EUR"
},
"references" : {
"merchantOrderId" : 123456,
"merchantReference" : "3PY2aFLDIusp0ESjdaonVichbsybYn",
"paymentReference" : "0"
},
"paymentMethod" : "card",
"cardPaymentMethodSpecificOutput" : {
"paymentProductId" : 1,
"fraudResults" : {
"fraudServiceResult" : "no-advice",
"avsResult" : "0",
"cvvResult" : "0"
},
"threeDSecureResults" : {
"eci" : "7"
},
"card" : {
"cardNumber" : "************9026",
"expiryDate" : "1220"
}
}
},
"status" : "PENDING_APPROVAL",
"statusOutput" : {
"isCancellable" : true,
"statusCategory" : "PENDING_MERCHANT",
"statusCode" : 600,
"statusCodeChangeDateTime" : "20190708230903",
"isAuthorized" : true,
"isRefundable" : false
}
}
}
Additional information
- Introduction
- Highlevel implementation
- Consumer user experience
- MyCheckout hosted payment pages implementation
- Create Payment API implementation
- Test cases
- Special use cases
- Webhooks