31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | public class ThreeDSServerAuthenticationRequest { /** * Indicates the type of channel interface being used to initiate the transaction. The accepted values are: * * 01 -> App-based (APP) * 02 -> Browser (BRW) * 03 -> 3DS Requestor Initiated (3RI) * * This is a required field. */ private DeviceChannelEnum deviceChannel; /** * Identifies the category of the message for a specific use case. The accepted values are: * * 01 -> PA * 02 -> NPA * * This is a required field. */ private MessageCategoryEnum messageCategory; /** * Indicates whether the 3DS Method successfully completed. The value is used only when deviceChannel = 02 (Browser). * * The accepted values are: * * Y -> Successfully completed * N -> Did not successfully complete * U -> Unavailable - 3DS Method URL was not present in the PRes message data for the card range associated * with the Cardholder Account Number. * * If the 3DS Server handles the 3DS Method response, then this field is not required and it will be resolved * internally. If there is no 3DS Method URL associated with the Directory Server to which the cardholder belongs, * then this field is not required and 3DS Server will send U. Otherwise, this field should be sent. */ private ThreeDSMethodCompletionIndicatorEnum threeDSCompInd; /** * Contains information for the 3DS Requestor. More details can be found at {@link ThreeDSRequestor}. */ private ThreeDSRequestor threeDSRequestor; /** * Universally unique transaction identifier assigned by the 3DS Server to identify a single transaction. * This value has 36 characters in a format defined in IETF RFC 4122. In case 3DS Method is previously invoked, * the threeDSServerTransID should be sent. If not, 3DS Server will generate a new transaction identifier. */ private String threeDSServerTransID; /** * Fully qualified URL of 3DS Requestor website or customer care site. This field is optional and it is recommended * to be configured in the configuration. */ private URL threeDSRequestorURL; /** * Contains information for the Cardholder Account. More details can be found at {@link CardholderAccount}. */ private CardholderAccount cardholderAccount; /** * Contains information for the Cardholder. More details can be found at {@link Cardholder}. * * This field is required unless market or regional mandate restricts sending this information. */ private Cardholder cardholder; /** * Boolean flag indicating whether the validation for required cardholder data should not be applied in case when * market or regional mandate restricts sending the information. * * This field is not required and if not provided, it will be checked in the 3DS Server configuration. If it's not * configured there, default value is false meaning no relaxation of validation rules on cardholder data. */ private Boolean relaxRegionalValidationRules; /** * Contains purchase information. More details can be found at {@link Purchase}. */ private Purchase purchase; /** * Contains information for the Acquirer. More details can be found at {@link AcquirerData}. */ private AcquirerData acquirer; /** * Contains merchant information. More details can be found at {@link MerchantData}. */ private MerchantData merchant; /** * Unstructured information sent between the 3DS Server, the DS and the ACS. * * This field is not required to be filled by the Requestor and the requirements for the presence of this field * are DS specific. */ @JsonDeserialize (using = BroadcastInfoDeserializer. class ) @JsonSerialize (using = BroadcastInfoSerializer. class ) private String broadInfo; /** * Defines the SDK UI types that the device supports for displaying specific challenge user interfaces within the SDK. * * This field is required only when deviceChannel=01 (APP). * * Fields in this object: * sdkInterface -> Specifies all of the SDK Interface types that the device supports for displaying specific * challenge user interfaces within the SDK. Accepted values are: * 01 -> Native * 02 -> HTML * 03 -> Both * sdkUiType -> Contains a list of all UI types that the device supports for displaying specific challenge user * interfaces within the SDK. Accepted values for each UI type are: * 01 -> Text * 02 -> Single select * 03 -> Multi select * 04 -> OOB * 05 -> Html Other (valid only for HTML UI) * For Native UI SDK Interface accepted values are 01-04 and for HTML UI accepted values are 01-05. */ private DeviceRenderingOptionsSupported deviceRenderOptions; /** * Data necessary to support requirements not otherwise defined in the 3D Secure message are * carried in a Message Extension. This field is limited to 81.920 characters. * * Requirements of this field are set by each Directory Server. * * The fields for each message extension attribute are: * id -> A unique identifier for the extension. Payment System Registered Application Provider Identifier (RID) is * required as prefix of the ID. The maximum length is 64 characters. * name -> The name of the extension data set as defined by the extension owner. Maximum length is 64 characters. * criticalityIndicator -> A boolean value indicating whether the recipient must understand the contents * of the extension to interpret the entire message. * data -> The data carried in the extension. The maximum lenght is 8059 characters. */ private List<MessageExtensionAttribute> messageExtension; /** * Contains browser information. More details can be found at {@link Browser}. * * This field is required when deviceChannel=02 (BRW). */ private Browser browserInformation; /** * Indicates the type of 3RI request. This data element provides additional information to the ACS to determine the * best approach for handling a 3RI request. The accepted values are: * 01 -> Recurring transaction * 02 -> Installment transaction * 03 -> Add card * 04 -> Maintain card information * 05 -> Account verification * * This field is required only when deviceChannel=03 (3RI) and messageCategory=02 (NPA). */ private ThreeRIIndicatorEnum threeRIInd; /** * Contains SDK information. More details can be found at {@link Sdk}. * * All fields in this object are required for App-based transactions. */ private Sdk sdkInformation; } |
For more information on the ThreeDSServerAuthenticationRequest fields, visit:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | { "deviceChannel" : "02" , "messageCategory" : "01" , "threeDSCompInd" : "Y" , "threeDSRequestor" : { "threeDSRequestorAuthenticationInd" : "02" , "threeDSRequestorAuthenticationInfo" : { "threeDSReqAuthMethod" : "04" , "threeDSReqAuthTimestamp" : "201812201735" , "threeDSReqAuthData" : "threeDSReqAuthData" }, "threeDSRequestorChallengeInd" : "03" , "threeDSRequestorPriorAuthenticationInfo" : { "threeDSReqPriorRef" : "VOGXpZvTlCmBUyPnnZfmsGDKqxRsRwPovkAE" , "threeDSReqPriorAuthMethod" : "01" , "threeDSReqPriorAuthTimestamp" : "201812201735" , "threeDSReqPriorAuthData" : "threeDSReqPriorAuthData" } }, "threeDSServerTransID" : "df4b3490-db44-4a88-9619-ab173ff76fbe" , "cardholderAccount" : { "acctType" : "02" , "cardExpiryDate" : "1812" , "acctInfo" : { "chAccAgeInd" : "04" , "chAccDate" : "20181220" , "chAccChangeInd" : "03" , "chAccChange" : "20181220" , "chAccPwChangeInd" : "04" , "chAccPwChange" : "20181220" , "shipAddressUsageInd" : "03" , "shipAddressUsage" : "20181220" , "txnActivityDay" : 1, "txnActivityYear" : 1, "provisionAttemptsDay" : 1, "nbPurchaseAccount" : 1, "suspiciousAccActivity" : "01" , "shipNameIndicator" : "01" , "paymentAccInd" : "03" , "paymentAccAge" : "20181220" }, "chAccChangeInd" : "03" , "chAccChange" : "20181220" , "chAccPwChangeInd" : "04" , "chAccPwChange" : "20181220" , "shipAddressUsageInd" : "03" , "shipAddressUsage" : "20181220" , "txnActivityDay" : 1, "txnActivityYear" : 1, "provisionAttemptsDay" : 1, "nbPurchaseAccount" : 1, "suspiciousAccActivity" : "01" , "shipNameIndicator" : "01" , "paymentAccInd" : "03" , "paymentAccAge" : "20181220" , "acctNumber" : "1111111111111111" , "schemeId" : "Visa" , "acctID" : "acct-Id" , "payTokenInd" : true }, "cardholder" : { "addrMatch" : "N" , "billAddrCity" : "billAddrCity" , "billAddrCountry" : "222" , "billAddrLine1" : "billAddrLine1" , "billAddrLine2" : "billAddrLine2" , "billAddrLine3" : "billAddrLine3" , "billAddrPostCode" : "billAddrPostCode" , "billAddrState" : "111" , "email" : "aaa-bbb@example.com" , "homePhone" : { "cc" : "cc" , "subscriber" : "subs" }, "mobilePhone" : { "cc" : "cc" , "subscriber" : "subs" }, "workPhone" : { "cc" : "cc" , "subscriber" : "subs" }, "cardholderName" : "cardholderName" , "shipAddrCity" : "shipAddrCity" , "shipAddrCountry" : "111" , "shipAddrLine1" : "shipAddrLine1" , "shipAddrLine2" : "shipAddrLine2" , "shipAddrLine3" : "shipAddrLine3" , "shipAddrPostCode" : "shipAddrPostCode" , "shipAddrState" : "222" }, "relaxRegionalValidationRules" : false , "purchase" : { "purchaseInstalData" : 3, "merchantRiskIndicator" : { "shipIndicator" : "01" , "deliveryTimeframe" : "02" , "deliveryEmailAddress" : "a-b@example.com" , "reorderItemsInd" : "01" , "preOrderPurchaseInd" : "01" , "preOrderDate" : "20181220" , "giftCardAmount" : 2, "giftCardCurr" : "111" , "giftCardCount" : 1 }, "purchaseAmount" : 1, "purchaseCurrency" : "111" , "purchaseExponent" : 1, "purchaseDate" : "20181220173550" , "recurringExpiry" : "20181220" , "recurringFrequency" : 1, "transType" : "01" }, "acquirer" : { "acquirerBin" : "acq-bin" , "acquirerMerchantId" : "acq-mer-id" }, "merchant" : { "mcc" : "code" , "merchantCountryCode" : "333" , "merchantName" : "name" }, "broadInfo" : { "message" : "TLS 1.x will be turned off starting summer 2019 " }, "messageExtension" : [ { "name" : "name" , "id" : "id" , "criticalityIndicator" : false , "data" : { "valueOne" : "value1" , "valueTwo" : "value2" } } ], "browserInformation" : { "browserAcceptHeader" : "brw-accept-header" , "browserIP" : "brw-ip" , "browserJavaEnabled" : true , "browserLanguage" : "brw-lang" , "browserColorDepth" : "8" , "browserScreenHeight" : 1, "browserScreenWidth" : 1, "browserTZ" : 1, "browserUserAgent" : "brw-user" , "challengeWindowSize" : "01" } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | { "deviceChannel" : "02" , "messageCategory" : "01" , "threeDSCompInd" : "Y" , "threeDSRequestor" : { "threeDSRequestorAuthenticationInd" : "02" , "threeDSRequestorAuthenticationInfo" : { "threeDSReqAuthMethod" : "04" , "threeDSReqAuthTimestamp" : "201812201735" , "threeDSReqAuthData" : "threeDSReqAuthData" }, "threeDSRequestorChallengeInd" : "03" , "threeDSRequestorPriorAuthenticationInfo" : { "threeDSReqPriorRef" : "VOGXpZvTlCmBUyPnnZfmsGDKqxRsRwPovkAE" , "threeDSReqPriorAuthMethod" : "01" , "threeDSReqPriorAuthTimestamp" : "201812201735" , "threeDSReqPriorAuthData" : "threeDSReqPriorAuthData" } }, "threeDSServerTransID" : "df4b3490-db44-4a88-9619-ab173ff76fbe" , "cardholderAccount" : { "acctType" : "02" , "cardExpiryDate" : "1812" , "acctInfo" : { "chAccAgeInd" : "04" , "chAccDate" : "20181220" , "chAccChangeInd" : "03" , "chAccChange" : "20181220" , "chAccPwChangeInd" : "04" , "chAccPwChange" : "20181220" , "shipAddressUsageInd" : "03" , "shipAddressUsage" : "20181220" , "txnActivityDay" : 1, "txnActivityYear" : 1, "provisionAttemptsDay" : 1, "nbPurchaseAccount" : 1, "suspiciousAccActivity" : "01" , "shipNameIndicator" : "01" , "paymentAccInd" : "03" , "paymentAccAge" : "20181220" }, "schemeId" : "Visa" , "acctNumber" : "1111111111111111" , "acctID" : "acct-Id" , "payTokenInd" : true }, "cardholder" : { "addrMatch" : "N" , "billAddrCity" : "billAddrCity" , "billAddrCountry" : "222" , "billAddrLine1" : "billAddrLine1" , "billAddrLine2" : "billAddrLine2" , "billAddrLine3" : "billAddrLine3" , "billAddrPostCode" : "billAddrPostCode" , "billAddrState" : "111" , "email" : "aaa-bbb@example.com" , "homePhone" : { "cc" : "cc" , "subscriber" : "subs" }, "mobilePhone" : { "cc" : "cc" , "subscriber" : "subs" }, "workPhone" : { "cc" : "cc" , "subscriber" : "subs" }, "cardholderName" : "cardholderName" , "shipAddrCity" : "shipAddrCity" , "shipAddrCountry" : "111" , "shipAddrLine1" : "shipAddrLine1" , "shipAddrLine2" : "shipAddrLine2" , "shipAddrLine3" : "shipAddrLine3" , "shipAddrPostCode" : "shipAddrPostCode" , "shipAddrState" : "222" }, "relaxRegionalValidationRules" : false , "purchase" : { "purchaseInstalData" : 3, "merchantRiskIndicator" : { "shipIndicator" : "01" , "deliveryTimeframe" : "02" , "deliveryEmailAddress" : "a-b@example.com" , "reorderItemsInd" : "01" , "preOrderPurchaseInd" : "01" , "preOrderDate" : "20181220" , "giftCardAmount" : 2, "giftCardCurr" : "111" , "giftCardCount" : 1 }, "purchaseAmount" : 1, "purchaseCurrency" : "111" , "purchaseExponent" : 1, "purchaseDate" : "20181220173550" , "recurringExpiry" : "20181220" , "recurringFrequency" : 1, "transType" : "01" }, "acquirer" : { "acquirerBin" : "acq-bin" , "acquirerMerchantId" : "acq-mer-id" }, "merchant" : { "merchantConfigurationId" : "merId" }, "broadInfo" : { "message" : "TLS 1.x will be turned off starting summer 2019 " }, "messageExtension" : [ { "name" : "name" , "id" : "id" , "criticalityIndicator" : false , "data" : { "valueOne" : "value1" , "valueTwo" : "value2" } } ], "browserInformation" : { "browserAcceptHeader" : "brw-accept-header" , "browserIP" : "brw-ip" , "browserJavaEnabled" : true , "browserLanguage" : "brw-lang" , "browserColorDepth" : "8" , "browserScreenHeight" : 1, "browserScreenWidth" : 1, "browserTZ" : 1, "browserUserAgent" : "brw-user" , "challengeWindowSize" : "01" } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | { "deviceChannel" : "01" , "messageCategory" : "01" , "threeDSCompInd" : "U" , "threeDSRequestor" : { "threeDSRequestorAuthenticationInd" : "02" , "threeDSRequestorAuthenticationInfo" : { "threeDSReqAuthMethod" : "04" , "threeDSReqAuthTimestamp" : "201812201735" , "threeDSReqAuthData" : "threeDSReqAuthData" }, "threeDSRequestorChallengeInd" : "03" , "threeDSRequestorPriorAuthenticationInfo" : { "threeDSReqPriorRef" : "VOGXpZvTlCmBUyPnnZfmsGDKqxRsRwPovkAE" , "threeDSReqPriorAuthMethod" : "01" , "threeDSReqPriorAuthTimestamp" : "201812201735" , "threeDSReqPriorAuthData" : "threeDSReqPriorAuthData" } }, "threeDSServerTransID" : "df4b3490-db44-4a88-9619-ab173ff76fbe" , "cardholderAccount" : { "acctType" : "02" , "cardExpiryDate" : "1812" , "acctInfo" : { "chAccAgeInd" : "04" , "chAccDate" : "20181220" , "chAccChangeInd" : "03" , "chAccChange" : "20181220" , "chAccPwChangeInd" : "04" , "chAccPwChange" : "20181220" , "shipAddressUsageInd" : "03" , "shipAddressUsage" : "20181220" , "txnActivityDay" : 1, "txnActivityYear" : 1, "provisionAttemptsDay" : 1, "nbPurchaseAccount" : 1, "suspiciousAccActivity" : "01" , "shipNameIndicator" : "01" , "paymentAccInd" : "03" , "paymentAccAge" : "20181220" }, "schemeId" : "Visa" , "acctNumber" : "1111111111111111" , "acctID" : "acct-Id" , "payTokenInd" : true }, "cardholder" : { "addrMatch" : "N" , "billAddrCity" : "billAddrCity" , "billAddrCountry" : "222" , "billAddrLine1" : "billAddrLine1" , "billAddrLine2" : "billAddrLine2" , "billAddrLine3" : "billAddrLine3" , "billAddrPostCode" : "billAddrPostCode" , "billAddrState" : "111" , "email" : "aaa-bbb@example.com" , "homePhone" : { "cc" : "cc" , "subscriber" : "subs" }, "mobilePhone" : { "cc" : "cc" , "subscriber" : "subs" }, "workPhone" : { "cc" : "cc" , "subscriber" : "subs" }, "cardholderName" : "cardholderName" , "shipAddrCity" : "shipAddrCity" , "shipAddrCountry" : "111" , "shipAddrLine1" : "shipAddrLine1" , "shipAddrLine2" : "shipAddrLine2" , "shipAddrLine3" : "shipAddrLine3" , "shipAddrPostCode" : "shipAddrPostCode" , "shipAddrState" : "222" }, "relaxRegionalValidationRules" : false , "purchase" : { "purchaseInstalData" : 3, "merchantRiskIndicator" : { "shipIndicator" : "01" , "deliveryTimeframe" : "02" , "deliveryEmailAddress" : "a-b@example.com" , "reorderItemsInd" : "01" , "preOrderPurchaseInd" : "01" , "preOrderDate" : "20181220" , "giftCardAmount" : 2, "giftCardCurr" : "111" , "giftCardCount" : 1 }, "purchaseAmount" : 1, "purchaseCurrency" : "111" , "purchaseExponent" : 1, "purchaseDate" : "20181220173550" , "recurringExpiry" : "20181220" , "recurringFrequency" : 1, "transType" : "01" }, "acquirer" : { "acquirerBin" : "acq-bin" , "acquirerMerchantId" : "acq-mer-id" }, "merchant" : { "mcc" : "code" , "merchantCountryCode" : "333" , "merchantName" : "name" }, "broadInfo" : { "message" : "TLS 1.x will be turned off starting summer 2019 " }, "deviceRenderOptions" : { "sdkInterface" : "01" , "sdkUiType" : [ "02" ] }, "messageExtension" : [ { "name" : "name" , "id" : "id" , "criticalityIndicator" : false , "data" : { "valueOne" : "value1" , "valueTwo" : "value2" } } ], "sdkInformation" : { "sdkAppID" : "90d9b629-e639-4188-82d8-09e5c508bc86" , "sdkEncData" : "enc-data" , "sdkEphemPubKey" : { "kty" : "EC" , "crv" : "P-256" , "x" : "test" , "y" : "test" }, "sdkMaxTimeout" : 5, "sdkReferenceNumber" : "ref-num" , "sdkTransID" : "7f101033-df46-4f5c-9e96-9575c924e1e7" } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | { "deviceChannel" : "03" , "messageCategory" : "01" , "threeDSCompInd" : "U" , "threeDSRequestor" : { "threeDSRequestorAuthenticationInd" : "02" , "threeDSRequestorAuthenticationInfo" : { "threeDSReqAuthMethod" : "04" , "threeDSReqAuthTimestamp" : "201812201735" , "threeDSReqAuthData" : "threeDSReqAuthData" }, "threeDSRequestorChallengeInd" : "03" , "threeDSRequestorPriorAuthenticationInfo" : { "threeDSReqPriorRef" : "VOGXpZvTlCmBUyPnnZfmsGDKqxRsRwPovkAE" , "threeDSReqPriorAuthMethod" : "01" , "threeDSReqPriorAuthTimestamp" : "201812201735" , "threeDSReqPriorAuthData" : "threeDSReqPriorAuthData" } }, "threeDSServerTransID" : "df4b3490-db44-4a88-9619-ab173ff76fbe" , "cardholderAccount" : { "acctType" : "02" , "cardExpiryDate" : "1812" , "acctInfo" : { "chAccAgeInd" : "04" , "chAccDate" : "20181220" , "chAccChangeInd" : "03" , "chAccChange" : "20181220" , "chAccPwChangeInd" : "04" , "chAccPwChange" : "20181220" , "shipAddressUsageInd" : "03" , "shipAddressUsage" : "20181220" , "txnActivityDay" : 1, "txnActivityYear" : 1, "provisionAttemptsDay" : 1, "nbPurchaseAccount" : 1, "suspiciousAccActivity" : "01" , "shipNameIndicator" : "01" , "paymentAccInd" : "03" , "paymentAccAge" : "20181220" }, "schemeId" : "Visa" , "acctNumber" : "1111111111111111" , "acctID" : "acct-Id" , "payTokenInd" : true }, "cardholder" : { "addrMatch" : "N" , "billAddrCity" : "billAddrCity" , "billAddrCountry" : "222" , "billAddrLine1" : "billAddrLine1" , "billAddrLine2" : "billAddrLine2" , "billAddrLine3" : "billAddrLine3" , "billAddrPostCode" : "billAddrPostCode" , "billAddrState" : "111" , "email" : "aaa-bbb@example.com" , "homePhone" : { "cc" : "cc" , "subscriber" : "subs" }, "mobilePhone" : { "cc" : "cc" , "subscriber" : "subs" }, "workPhone" : { "cc" : "cc" , "subscriber" : "subs" }, "cardholderName" : "cardholderName" , "shipAddrCity" : "shipAddrCity" , "shipAddrCountry" : "111" , "shipAddrLine1" : "shipAddrLine1" , "shipAddrLine2" : "shipAddrLine2" , "shipAddrLine3" : "shipAddrLine3" , "shipAddrPostCode" : "shipAddrPostCode" , "shipAddrState" : "222" }, "relaxRegionalValidationRules" : false , "purchase" : { }, "acquirer" : { "acquirerBin" : "acq-bin" , "acquirerMerchantId" : "acq-mer-id" }, "merchant" : { "mcc" : "code" , "merchantCountryCode" : "333" , "merchantName" : "name" }, "broadInfo" : { "message" : "TLS 1.x will be turned off starting summer 2019 " }, "messageExtension" : [ { "name" : "name" , "id" : "id" , "criticalityIndicator" : false , "data" : { "valueOne" : "value1" , "valueTwo" : "value2" } } ], "threeRIInd" : "02" } |
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | public class ThreeDSServerAuthenticationResponse { /** * Universally unique transaction identifier assigned by the 3DS Server to identify a single transaction. It has * the same value as the corresponding received authentication request. This value has 36 characters in a format * defined in IETF RFC 4122. */ private String threeDSServerTransID; /** * Fully qualified URL of the ACS in case the authentication response message indicates that further * Cardholder interaction is required to complete the authentication. */ private URL acsURL; /** * Indicates whether a transaction qualifies as an authenticated transaction. */ private TransactionStatusEnum transStatus; /** * Payment System-specific value provided as part of the ACS registration for each supported DS. Authentication Value * may be used to provide proof of authentication. */ private String authenticationValue; /** * Payment System-specific value provided by the ACS to indicate the results of the attempt to authenticate the * Cardholder. */ private String eci; /** * Indication of whether a challenge is required for the transaction to be authorised due to local/regional * mandates or other variable. */ private ACSChallengeMandatedIndicatorEnum acsChallengeMandated; /** * The sent Authentication Request to the Directory Server. */ private AuthenticationRequest authenticationRequest; /** * The received Authentication Response from the Directory Server. */ private AuthenticationResponse authenticationResponse; /** * Date and time of the purchase, expressed in UTC. The field is limited to 14 characters, formatted as * YYYYMMDDHHMMSS. */ @JsonFormat (pattern = "yyyyMMddHHmmss" ) private LocalDateTime purchaseDate; /** * Object containing error details if any errors occurred. */ private ErrorDetails errorDetails; /** * Challenge Request object in case the authentication response message indicates that further Cardholder * interaction is required to complete the authentication. */ private ChallengeRequest challengeRequest; /** * Base64-encoded Challenge Request object in case the authentication response message indicates that further * Cardholder interaction is required to complete the authentication. */ private String base64EncodedChallengeRequest; } |
The 3DS Server prepares an initial challengeRequest (CReq) and includes it in the response only if the device channel is Browser and the the authentication response message indicates that further Cardholder interaction is required to complete the authentication. The 3DS Server also generates a base64-encoded CReq of the same initial challengeRequest.
The 3DS Server fills out the following fields of the CReq:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | { "threeDSServerTransID" : "8a880dc0-d2d2-4067-bcb1-b08d1690b26e" , "transStatus" : "C" , "acsChallengeMandated" : "Y" , "authenticationRequest" : { "threeDSCompInd" : "Y" , "threeDSRequestorID" : "az0123456789" , "threeDSRequestorName" : "Example Requestor name" , "acquirerBIN" : "868491" , "acquirerMerchantID" : "mGm6AJZ1YotkJJmOk0fx" , "addrMatch" : "N" , "cardExpiryDate" : "1910" , "acctNumber" : "8944988785642183" , "billAddrCity" : "Bill City Name" , "billAddrCountry" : "840" , "billAddrLine1" : "Bill Address Line 1" , "billAddrLine2" : "Bill Address Line 2" , "billAddrLine3" : "Bill Address Line 3" , "billAddrPostCode" : "Bill Post Code" , "billAddrState" : "CO" , "email" : "example@example.com" , "homePhone" : { "cc" : "123" , "subscriber" : "123456789" }, "mobilePhone" : { "cc" : "123" , "subscriber" : "123456789" }, "cardholderName" : "Cardholder Name" , "shipAddrCity" : "Ship City Name" , "shipAddrCountry" : "840" , "shipAddrLine1" : "Ship Address Line 1" , "shipAddrLine2" : "Ship Address Line 2" , "shipAddrLine3" : "Ship Address Line 3" , "shipAddrPostCode" : "Ship Post Code" , "shipAddrState" : "CO" , "workPhone" : { "cc" : "123" , "subscriber" : "123456789" }, "deviceChannel" : "02" , "browserAcceptHeader" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" , "browserIP" : "192.168.1.11" , "browserJavaEnabled" : true , "browserLanguage" : "en" , "browserColorDepth" : "48" , "browserScreenHeight" : "400" , "browserScreenWidth" : "600" , "browserTZ" : "0" , "browserUserAgent" : "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0" , "mcc" : "5411" , "merchantCountryCode" : "840" , "merchantName" : "UL TS BV" , "messageCategory" : "01" , "messageType" : "AReq" , "messageVersion" : "2.1.0" , "purchaseAmount" : "101" , "purchaseCurrency" : "978" , "purchaseExponent" : "2" , "purchaseDate" : "20170316141312" , "transType" : "01" , "threeDSServerTransID" : "8a880dc0-d2d2-4067-bcb1-b08d1690b26e" , "threeDSServerRefNumber" : "3DS_LOA_SER_201_12345" , "threeDSRequestorAuthenticationInd" : "03" , "threeDSRequestorAuthenticationInfo" : { "threeDSReqAuthMethod" : "02" , "threeDSReqAuthTimestamp" : "201711071307" , "threeDSReqAuthData" : "validlogin at UL TS BV" }, "threeDSRequestorChallengeInd" : "02" , "threeDSRequestorPriorAuthenticationInfo" : { "threeDSReqPriorRef" : "d7c1ee99-9478-44a6-b1f2-391e29c6b340" , "threeDSReqPriorAuthMethod" : "02" , "threeDSReqPriorAuthTimestamp" : "201710282113" , "threeDSReqPriorAuthData" : "cKTYtrvvKU7gUoiqbbO7Po" }, "threeDSServerOperatorID" : "1jpeeLAWgGFgS1Ri9tX9" , "acctType" : "03" , "acctInfo" : { "chAccAgeInd" : "03" , "chAccDate" : "20140328" , "chAccChangeInd" : "04" , "chAccChange" : "20160712" , "chAccPwChangeInd" : "02" , "chAccPwChange" : "20170328" , "shipAddressUsageInd" : "04" , "shipAddressUsage" : "20160714" , "txnActivityDay" : "1" , "txnActivityYear" : "21" , "provisionAttemptsDay" : "0" , "nbPurchaseAccount" : "11" , "suspiciousAccActivity" : "01" , "shipNameIndicator" : "02" , "paymentAccInd" : "04" , "paymentAccAge" : "20160917" }, "acctID" : "personal account" , "dsReferenceNumber" : "DS18693744953364703075" , "dsTransID" : "1jpe0dc0-i9t2-4067-bcb1-nmt866956sgd" , "payTokenInd" : true , "purchaseInstalData" : "024" , "merchantRiskIndicator" : { "shipIndicator" : "02" , "deliveryTimeframe" : "01" , "deliveryEmailAddress" : "deliver@email.com" , "reorderItemsInd" : "01" , "preOrderPurchaseInd" : "02" , "preOrderDate" : "20170519" , "giftCardAmount" : "337" , "giftCardCurr" : "840" , "giftCardCount" : "02" }, "messageExtension" : [ { "name" : "emvcomsgext" , "id" : "tc8Qtm465Ln1FX0nZprA" , "criticalityIndicator" : false , "data" : "messageExtensionData" } ], "recurringExpiry" : "20180131" , "recurringFrequency" : "6" , "broadInfo" : { "message" : "TLS 1.x will be turned off starting summer 2019" } }, "authenticationResponse" : { "threeDSServerTransID" : "8a880dc0-d2d2-4067-bcb1-b08d1690b26e" , "acsTransID" : "d7c1ee99-9478-44a6-b1f2-391e29c6b340" , "acsReferenceNumber" : "3DS_LOA_ACS_201_13579" , "acsOperatorID" : "AcsOpId 4138359541" , "dsReferenceNumber" : "DS186937449533647030" , "dsTransID" : "f25084f0-5b16-4c0a-ae5d-b24808a95e4b" , "sdkTransID" : "b2385523-a66c-4907-ac3c-91848e8c0067" , "transStatus" : "C" , "acsChallengeMandated" : "Y" , "messageType" : "ARes" , "messageVersion" : "2.1.0" }, "purchaseDate" : "20170316141312" , "challengeRequest" : { "threeDSServerTransID" : "8a880dc0-d2d2-4067-bcb1-b08d1690b26e" , "acsTransID" : "d7c1ee99-9478-44a6-b1f2-391e29c6b340" , "messageType" : "CReq" , "messageVersion" : "2.1.0" , "challengeWindowSize" : "01" }, "base64EncodedChallengeRequest" : "eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IjhhODgwZGMwLWQyZDItNDA2Ny1iY2IxLWIwOGQxNjkwYjI2ZSIsImFjc1RyYW5zSUQiOiJkN2MxZWU5OS05NDc4LTQ0YTYtYjFmMi0zOTFlMjljNmIzNDAiLCJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMS4wIiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjAxIn0g" } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | { "threeDSServerTransID" : "8a880dc0-d2d2-4067-bcb1-b08d1690b26e" , "transStatus" : "Y" , "authenticationValue" : "MTIzNDU2Nzg5MDA5ODc2NTQzMjE=" , "eci" : "05" , "authenticationRequest" : { "threeDSCompInd" : "Y" , "threeDSRequestorID" : "az0123456789" , "threeDSRequestorName" : "Example Requestor name" , "acquirerBIN" : "868491" , "acquirerMerchantID" : "mGm6AJZ1YotkJJmOk0fx" , "addrMatch" : "N" , "cardExpiryDate" : "1910" , "acctNumber" : "8944988785642183" , "billAddrCity" : "Bill City Name" , "billAddrCountry" : "840" , "billAddrLine1" : "Bill Address Line 1" , "billAddrLine2" : "Bill Address Line 2" , "billAddrLine3" : "Bill Address Line 3" , "billAddrPostCode" : "Bill Post Code" , "billAddrState" : "CO" , "email" : "example@example.com" , "homePhone" : { "cc" : "123" , "subscriber" : "123456789" }, "mobilePhone" : { "cc" : "123" , "subscriber" : "123456789" }, "cardholderName" : "Cardholder Name" , "shipAddrCity" : "Ship City Name" , "shipAddrCountry" : "840" , "shipAddrLine1" : "Ship Address Line 1" , "shipAddrLine2" : "Ship Address Line 2" , "shipAddrLine3" : "Ship Address Line 3" , "shipAddrPostCode" : "Ship Post Code" , "shipAddrState" : "CO" , "workPhone" : { "cc" : "123" , "subscriber" : "123456789" }, "deviceChannel" : "02" , "browserAcceptHeader" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" , "browserIP" : "192.168.1.11" , "browserJavaEnabled" : true , "browserLanguage" : "en" , "browserColorDepth" : "48" , "browserScreenHeight" : "400" , "browserScreenWidth" : "600" , "browserTZ" : "0" , "browserUserAgent" : "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0" , "mcc" : "5411" , "merchantCountryCode" : "840" , "merchantName" : "UL TS BV" , "messageCategory" : "01" , "messageType" : "AReq" , "messageVersion" : "2.1.0" , "purchaseAmount" : "101" , "purchaseCurrency" : "978" , "purchaseExponent" : "2" , "purchaseDate" : "20170316141312" , "transType" : "01" , "threeDSServerTransID" : "8a880dc0-d2d2-4067-bcb1-b08d1690b26e" , "threeDSServerRefNumber" : "3DS_LOA_SER_201_12345" , "threeDSRequestorAuthenticationInd" : "03" , "threeDSRequestorAuthenticationInfo" : { "threeDSReqAuthMethod" : "02" , "threeDSReqAuthTimestamp" : "201711071307" , "threeDSReqAuthData" : "validlogin at UL TS BV" }, "threeDSRequestorChallengeInd" : "02" , "threeDSRequestorPriorAuthenticationInfo" : { "threeDSReqPriorRef" : "d7c1ee99-9478-44a6-b1f2-391e29c6b340" , "threeDSReqPriorAuthMethod" : "02" , "threeDSReqPriorAuthTimestamp" : "201710282113" , "threeDSReqPriorAuthData" : "cKTYtrvvKU7gUoiqbbO7Po" }, "threeDSServerOperatorID" : "1jpeeLAWgGFgS1Ri9tX9" , "acctType" : "03" , "acctInfo" : { "chAccAgeInd" : "03" , "chAccDate" : "20140328" , "chAccChangeInd" : "04" , "chAccChange" : "20160712" , "chAccPwChangeInd" : "02" , "chAccPwChange" : "20170328" , "shipAddressUsageInd" : "04" , "shipAddressUsage" : "20160714" , "txnActivityDay" : "1" , "txnActivityYear" : "21" , "provisionAttemptsDay" : "0" , "nbPurchaseAccount" : "11" , "suspiciousAccActivity" : "01" , "shipNameIndicator" : "02" , "paymentAccInd" : "04" , "paymentAccAge" : "20160917" }, "acctID" : "personal account" , "dsReferenceNumber" : "DS18693744953364703075" , "dsTransID" : "1jpe0dc0-i9t2-4067-bcb1-nmt866956sgd" , "payTokenInd" : true , "purchaseInstalData" : "024" , "merchantRiskIndicator" : { "shipIndicator" : "02" , "deliveryTimeframe" : "01" , "deliveryEmailAddress" : "deliver@email.com" , "reorderItemsInd" : "01" , "preOrderPurchaseInd" : "02" , "preOrderDate" : "20170519" , "giftCardAmount" : "337" , "giftCardCurr" : "840" , "giftCardCount" : "02" }, "messageExtension" : [ { "name" : "emvcomsgext" , "id" : "tc8Qtm465Ln1FX0nZprA" , "criticalityIndicator" : false , "data" : "messageExtensionData" } ], "recurringExpiry" : "20180131" , "recurringFrequency" : "6" , "broadInfo" : { "message" : "TLS 1.x will be turned off starting summer 2019" } }, "authenticationResponse" : { "threeDSServerTransID" : "8a880dc0-d2d2-4067-bcb1-b08d1690b26e" , "dsReferenceNumber" : "DS186937449533647030" , "dsTransID" : "f25084f0-5b16-4c0a-ae5d-b24808a95e4b" , "messageVersion" : "2.1.0" , "sdkTransID" : "b2385523-a66c-4907-ac3c-91848e8c0067" , "messageType" : "ARes" , "transStatus" : "Y" , "acsChallengeMandated" : "N" , "acsOperatorID" : "AcsOpId 4138359541" , "acsReferenceNumber" : "3DS_LOA_ACS_201_13579" , "acsTransID" : "d7c1ee99-9478-44a6-b1f2-391e29c6b340" , "authenticationValue" : "MTIzNDU2Nzg5MDA5ODc2NTQzMjE=" , "eci" : "05" }, "purchaseDate" : "20170316141312" } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | { "threeDSServerTransID" : "8a880dc0-d2d2-4067-bcb1-b08d1690b26e" , "transStatus" : "Y" , "authenticationValue" : "MTIzNDU2Nzg5MDA5ODc2NTQzMjE=" , "eci" : "05" , "acsChallengeMandated" : "N" , "authenticationRequest" : { "threeDSCompInd" : "Y" , "threeDSRequestorID" : "az0123456789" , "threeDSRequestorName" : "Example Requestor name" , "acquirerBIN" : "868491" , "acquirerMerchantID" : "mGm6AJZ1YotkJJmOk0fx" , "addrMatch" : "N" , "cardExpiryDate" : "1910" , "acctNumber" : "8944988785642183" , "billAddrCity" : "Bill City Name" , "billAddrCountry" : "840" , "billAddrLine1" : "Bill Address Line 1" , "billAddrLine2" : "Bill Address Line 2" , "billAddrLine3" : "Bill Address Line 3" , "billAddrPostCode" : "Bill Post Code" , "billAddrState" : "CO" , "email" : "example@example.com" , "homePhone" : { "cc" : "123" , "subscriber" : "123456789" }, "mobilePhone" : { "cc" : "123" , "subscriber" : "123456789" }, "cardholderName" : "Cardholder Name" , "shipAddrCity" : "Ship City Name" , "shipAddrCountry" : "840" , "shipAddrLine1" : "Ship Address Line 1" , "shipAddrLine2" : "Ship Address Line 2" , "shipAddrLine3" : "Ship Address Line 3" , "shipAddrPostCode" : "Ship Post Code" , "shipAddrState" : "CO" , "workPhone" : { "cc" : "123" , "subscriber" : "123456789" }, "deviceChannel" : "02" , "browserAcceptHeader" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" , "browserIP" : "192.168.1.11" , "browserJavaEnabled" : true , "browserLanguage" : "en" , "browserColorDepth" : "48" , "browserScreenHeight" : "400" , "browserScreenWidth" : "600" , "browserTZ" : "0" , "browserUserAgent" : "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0" , "mcc" : "5411" , "merchantCountryCode" : "840" , "merchantName" : "UL TS BV" , "messageCategory" : "01" , "messageType" : "AReq" , "messageVersion" : "2.1.0" , "purchaseAmount" : "101" , "purchaseCurrency" : "978" , "purchaseExponent" : "2" , "purchaseDate" : "20170316141312" , "transType" : "01" , "threeDSServerTransID" : "8a880dc0-d2d2-4067-bcb1-b08d1690b26e" , "threeDSServerRefNumber" : "3DS_LOA_SER_201_12345" , "threeDSRequestorAuthenticationInd" : "03" , "threeDSRequestorAuthenticationInfo" : { "threeDSReqAuthMethod" : "02" , "threeDSReqAuthTimestamp" : "201711071307" , "threeDSReqAuthData" : "validlogin at UL TS BV" }, "threeDSRequestorChallengeInd" : "02" , "threeDSRequestorPriorAuthenticationInfo" : { "threeDSReqPriorRef" : "d7c1ee99-9478-44a6-b1f2-391e29c6b340" , "threeDSReqPriorAuthMethod" : "02" , "threeDSReqPriorAuthTimestamp" : "201710282113" , "threeDSReqPriorAuthData" : "cKTYtrvvKU7gUoiqbbO7Po" }, "threeDSServerOperatorID" : "1jpeeLAWgGFgS1Ri9tX9" , "acctType" : "03" , "acctInfo" : { "chAccAgeInd" : "03" , "chAccDate" : "20140328" , "chAccChangeInd" : "04" , "chAccChange" : "20160712" , "chAccPwChangeInd" : "02" , "chAccPwChange" : "20170328" , "shipAddressUsageInd" : "04" , "shipAddressUsage" : "20160714" , "txnActivityDay" : "1" , "txnActivityYear" : "21" , "provisionAttemptsDay" : "0" , "nbPurchaseAccount" : "11" , "suspiciousAccActivity" : "01" , "shipNameIndicator" : "02" , "paymentAccInd" : "04" , "paymentAccAge" : "20160917" }, "acctID" : "personal account" , "dsReferenceNumber" : "DS18693744953364703075" , "dsTransID" : "1jpe0dc0-i9t2-4067-bcb1-nmt866956sgd" , "payTokenInd" : true , "purchaseInstalData" : "024" , "merchantRiskIndicator" : { "shipIndicator" : "02" , "deliveryTimeframe" : "01" , "deliveryEmailAddress" : "deliver@email.com" , "reorderItemsInd" : "01" , "preOrderPurchaseInd" : "02" , "preOrderDate" : "20170519" , "giftCardAmount" : "337" , "giftCardCurr" : "840" , "giftCardCount" : "02" }, "messageExtension" : [ { "name" : "emvcomsgext" , "id" : "tc8Qtm465Ln1FX0nZprA" , "criticalityIndicator" : false , "data" : "messageExtensionData" } ], "recurringExpiry" : "20180131" , "recurringFrequency" : "6" , "broadInfo" : { "message" : "TLS 1.x will be turned off starting summer 2019" } }, "authenticationResponse" : { "threeDSServerTransID" : "8a880dc0-d2d2-4067-bcb1-b08d1690b26" , "acsTransID" : "d7c1ee99-9478-44a6-b1f2-391e29c6b340" , "acsReferenceNumber" : "3DS_LOA_ACS_201_13579" , "acsOperatorID" : "AcsOpId 4138359541" , "authenticationValue" : "MTIzNDU2Nzg5MDA5ODc2NTQzMjE=" , "dsReferenceNumber" : "DS186937449533647030" , "dsTransID" : null , "eci" : "05" , "sdkTransID" : "b2385523-a66c-4907-ac3c-91848e8c0067" , "transStatus" : "Y" , "acsChallengeMandated" : "Y" , "messageType" : "ARes" , "messageVersion" : "2.1.0" }, "purchaseDate" : "20170316141312" , "errorDetails" : { "threeDSServerTransID" : "8a880dc0-d2d2-4067-bcb1-b08d1690b26" , "acsTransID" : "d7c1ee99-9478-44a6-b1f2-391e29c6b340" , "dsTransID" : null , "sdkTransID" : "b2385523-a66c-4907-ac3c-91848e8c0067" , "errorCode" : "201" , "errorComponent" : "S" , "errorDescription" : "Validation of 3DS Authentication Response failed. A message element required is missing from the message." , "errorDetail" : "dsTransID" } } |