Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apple Pay: Opaque data can only be used with ECOM market type. #210

Closed
mboyersgwg opened this issue Apr 13, 2023 · 1 comment
Closed

Apple Pay: Opaque data can only be used with ECOM market type. #210

mboyersgwg opened this issue Apr 13, 2023 · 1 comment

Comments

@mboyersgwg
Copy link

I support a multi-tenet application and we work with customers who have their own authorize.net accounts. Some of these customers have ApplePay enabled, and in general, things have been fine with processing Apple Pay transactions through authorize.net for these clients.

However, we brought on a new client where Apple Pay isn't working for them. When we try to process an Apple Pay transaction, we're getting the following error message:

There was an error processing the payment data. Opaque data can only be used with ECOM market type.

Here is the XML being sent in this particular case:

POST /xml/v1/request.api HTTP/1.1
Content-Type: text/xml; charset=utf-8
Content-Length: 5636
Host: api2.authorize.net
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.13 (Java/1.8.0_362)
Accept-Encoding: gzip,deflate
"POST /xml/v1/request.api HTTP/1.1[\r][\n]"
"Content-Type: text/xml; charset=utf-8[\r][\n]"
"Content-Length: 5636[\r][\n]"
"Host: api2.authorize.net[\r][\n]"
"Connection: Keep-Alive[\r][\n]"
"User-Agent: Apache-HttpClient/4.5.13 (Java/1.8.0_362)[\r][\n]"
"Accept-Encoding: gzip,deflate[\r][\n]"
"[\r][\n]"
"<?xml version="1.0" encoding="UTF-8" standalone="yes"?>[\n]"
"<createTransactionRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">[\n]"
"    <merchantAuthentication>[\n]"
"        <name>--removed-for-sensitivity--</name>[\n]"
"        <transactionKey>--removed-for-sensitivity--</transactionKey>[\n]"
"    </merchantAuthentication>[\n]"
"    <clientId>sdk-java-2.0.3</clientId>[\n]"
"    <transactionRequest>[\n]"
"        <transactionType>authCaptureTransaction</transactionType>[\n]"
"        <payment>[\n]"
"            <opaqueData>[\n]"
"                <dataDescriptor>COMMON.APPLE.INAPP.PAYMENT</dataDescriptor>[\n]"
"                <dataValue>eyJkYXRhIjoieFd0OHV2RS95M1UwVHJtRWh6R09tWUtYQkowaGswaTE3MXQrQmhSYnRTTjJoKzZaSFAwO
DBmWXBaK1haT0oxQitnSVZJSmFNSVgveVpNMmhCbStaemFSOXRlYVNndDJtY1FSTHN5cDBmUjVOUGhSM2pwRlBkWmhUU0NtUXdmNDBrTGt3eVBWYjlMZWRTWjJPVU80YTV0R3htWjQ5N2NRWmtkNVJGalpJS253VGxWY00raHZTc1paM3ZBcGZJMWlBRzlmMVh0UXVkWk1GeX
Fuemp4NjNkaHZhcGcrT2VHbGtLenhNcXpNRUNTRkxqUEhaL2p0d21jSWRQYVFPUlBMS29EMGw3bkx3d01sNUNBNklPeCtmaEQ5dVBQK2txOUR0aUFmUWNLKytkOGp2U25Zeit3Nks0N0owZlB6S2JIKzFsK3JCZWd3M2lkRU9DUTcyZjlTNzNKdFYxeWdqRTQvMWNjSDJ6UzM
1VnFZRGEyYnE0bEdsZHBUaFY4d2NMTjl1czErNFJ2WStDUHJxZG1iVksvY3hnMUtuZHY0NS9XdDczMU1ETmpUZE9nPT0iLCJzaWduYXR1cmUiOiJNSUFHQ1NxR1NJYjNEUUVIQXFDQU1JQUNBUUV4RFRBTEJnbGdoa2dCWlFNRUFnRXdnQVlKS29aSWh2Y05BUWNCQUFDZ2dE
Q0NBK013Z2dPSW9BTUNBUUlDQ0V3d1FVbFJuVlEyTUFvR0NDcUdTTTQ5QkFNQ01Ib3hMakFzQmdOVkJBTU1KVUZ3Y0d4bElFRndjR3hwWTJGMGFXOXVJRWx1ZEdWbmNtRjBhVzl1SUVOQklDMGdSek14SmpBa0JnTlZCQXNNSFVGd2NHeGxJRU5sY25ScFptbGpZWFJwYjI0Z
1FYVjBhRzl5YVhSNU1STXdFUVlEVlFRS0RBcEJjSEJzWlNCSmJtTXVNUXN3Q1FZRFZRUUdFd0pWVXpBZUZ3MHhPVEExTVRnd01UTXlOVGRhRncweU5EQTFNVFl3TVRNeU5UZGFNRjh4SlRBakJnTlZCQU1NSEdWall5MXpiWEF0WW5KdmEyVnlMWE5wWjI1ZlZVTTBMVkJTVD
BReEZEQVNCZ05WQkFzTUMybFBVeUJUZVhOMFpXMXpNUk13RVFZRFZRUUtEQXBCY0hCc1pTQkpibU11TVFzd0NRWURWUVFHRXdKVlV6QlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNSVZkKzNyMXNleUlZOW8zWENRb1NHTng3QzlieXdvUFlSZ2xkbEs5S1Z
CRzROQ0R0Z1I4MEIrZ3pNZkhGVEQ5K3N5SU5hNjFkVHY5SktKaVQ1OER4T2pnZ0lSTUlJQ0RUQU1CZ05WSFJNQkFmOEVBakFBTUI4R0ExVWRJd1FZTUJhQUZDUHlTY1JQaytUdkorYkU5aWhzUDZLNy9TNUxNRVVHQ0NzR0FRVUZCd0VCQkRrd056QTFCZ2dyQmdFRkJRY3dB
WVlwYUhSMGNEb3ZMMjlqYzNBdVlYQndiR1V1WTI5dEwyOWpjM0F3TkMxaGNIQnNaV0ZwWTJFek1ESXdnZ0VkQmdOVkhTQUVnZ0VVTUlJQkVEQ0NBUXdHQ1NxR1NJYjNZMlFGQVRDQi9qQ0J3d1lJS3dZQkJRVUhBZ0l3Z2JZTWdiTlNaV3hwWVc1alpTQnZiaUIwYUdseklHT
mxjblJwWm1sallYUmxJR0o1SUdGdWVTQndZWEowZVNCaGMzTjFiV1Z6SUdGalkyVndkR0Z1WTJVZ2IyWWdkR2hsSUhSb1pXNGdZWEJ3YkdsallXSnNaU0J6ZEdGdVpHRnlaQ0IwWlhKdGN5QmhibVFnWTI5dVpHbDBhVzl1Y3lCdlppQjFjMlVzSUdObGNuUnBabWxqWVhSbE
lIQnZiR2xqZVNCaGJtUWdZMlZ5ZEdsbWFXTmhkR2x2YmlCd2NtRmpkR2xqWlNCemRHRjBaVzFsYm5SekxqQTJCZ2dyQmdFRkJRY0NBUllxYUhSMGNEb3ZMM2QzZHk1aGNIQnNaUzVqYjIwdlkyVnlkR2xtYVdOaGRHVmhkWFJvYjNKcGRIa3ZNRFFHQTFVZEh3UXRNQ3N3S2F
Bbm9DV0dJMmgwZEhBNkx5OWpjbXd1WVhCd2JHVXVZMjl0TDJGd2NHeGxZV2xqWVRNdVkzSnNNQjBHQTFVZERnUVdCQlNVVjl0djFYU0Job21KZGk5K1Y0VUg1NXRZSkRBT0JnTlZIUThCQWY4RUJBTUNCNEF3RHdZSktvWklodmRqWkFZZEJBSUZBREFLQmdncWhrak9QUVFE
QWdOSkFEQkdBaUVBdmdsWEgrY2VIbk5iVmVXdnJMVEhMK3RFWHpBWVVpTEhKUkFDdGg2OWIxVUNJUURSaXpVS1hkYmRickYwWURXeEhyTE9oOCtqNXE5c3ZZT0FpUTNJTE4ycVl6Q0NBdTR3Z2dKMW9BTUNBUUlDQ0VsdEw3ODZtTnFYTUFvR0NDcUdTTTQ5QkFNQ01HY3hHekFaQmdOVkJBTU1Fa0Z3Y0d4bElGSnZiM1FnUTBFZ0xTQkhNekVtTUNRR0ExVUVDd3dkUVhCd2JHVWdRMlZ5ZEdsbWFXTmhkR2x2YmlCQmRYUm9iM0pwZEhreEV6QVJCZ05WQkFvTUNrRndjR3hsSUVsdVl5NHhDekFKQmdOVkJBWVRBbFZUTUI0WERURTBNRFV3TmpJek5EWXpNRm9YRFRJNU1EVXdOakl6TkRZek1Gb3dlakV1TUN3R0ExVUVBd3dsUVhCd2JHVWdRWEJ3YkdsallYUnBiMjRnU1c1MFpXZHlZWFJwYjI0Z1EwRWdMU0JITXpFbU1DUUdBMVVFQ3d3ZFFYQndiR1VnUTJWeWRHbG1hV05oZEdsdmJpQkJkWFJvYjNKcGRIa3hFekFSQmdOVkJBb01Da0Z3Y0d4bElFbHVZeTR4Q3pBSkJnTlZCQVlUQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRThCY1JoQm5YWklYVkdsNGxnUWQyNklDaTc5NTdyazNnamZ4TGsrRXpWdFZtV3pXdUl0Q1hkZzBpVG51NkNQMTJGODZJeTNhN1puQyt5T2dwaFA5VVJhT0I5ekNCOURCR0JnZ3JCZ0VGQlFjQkFRUTZNRGd3TmdZSUt3WUJCUVVITUFHR0ttaDBkSEE2THk5dlkzTndMbUZ3Y0d4bExtTnZiUzl2WTNOd01EUXRZWEJ3YkdWeWIyOTBZMkZuTXpBZEJnTlZIUTRFRmdRVUkvSkp4RStUNU84bjVzVDJLR3cvb3J2OUxrc3dEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWZCZ05WSFNNRUdEQVdnQlM3c042aFdET0ltcVNLbWQ2K3ZldXYyc3NrcXpBM0JnTlZIUjhFTURBdU1DeWdLcUFvaGlab2RIUndPaTh2WTNKc0xtRndjR3hsTG1OdmJTOWhjSEJzWlhKdmIzUmpZV2N6TG1OeWJEQU9CZ05WSFE4QkFmOEVCQU1DQVFZd0VBWUtLb1pJaHZkalpBWUNEZ1FDQlFBd0NnWUlLb1pJemowRUF3SURad0F3WkFJd09zOXlnMUVXbWJHRyt6WERWc3Bpdi9RWDdka1BkVTJpanI3eG5JRmVRcmVKK0pqM20xbWZtTlZCRFkrZDZjTCtBakF5TGRWRUliQ2pCWGRzWGZNNE81Qm4vUmQ4TENGdGxrL0djbW1DRW05VStIcDlHNW5MbXdtSklXRUdtUThKa2gwQUFER0NBWWd3Z2dHRUFnRUJNSUdHTUhveExqQXNCZ05WQkFNTUpVRndjR3hsSUVGd2NHeHBZMkYwYVc5dUlFbHVkR1ZuY21GMGFXOXVJRU5CSUMwZ1J6TXhKakFrQmdOVkJBc01IVUZ3Y0d4bElFTmxjblJwWm1sallYUnBiMjRnUVhWMGFHOXlhWFI1TVJNd0VRWURWUVFLREFwQmNIQnNaU0JKYm1NdU1Rc3dDUVlEVlFRR0V3SlZVd0lJVERCQlNWR2RWRFl3Q3dZSllJWklBV1VEQkFJQm9JR1RNQmdHQ1NxR1NJYjNEUUVKQXpFTEJna3Foa2lHOXcwQkJ3RXdIQVlKS29aSWh2Y05BUWtGTVE4WERUSXpNRFF4TXpFMU1UWTBNRm93S0FZSktvWklodmNOQVFrME1Sc3dHVEFMQmdsZ2hrZ0JaUU1FQWdHaENnWUlLb1pJemowRUF3SXdMd1lKS29aSWh2Y05BUWtFTVNJRUlNclZIaFZmZDg3ZFh5SXVrYkxvcThpTFhJakhxRmFWQytyMVR0MGJ6dTBvTUFvR0NDcUdTTTQ5QkFNQ0JFY3dSUUlnTHFaK0REaTc5V2pvR1pGR2xRMjgyOGFCMk9lekg5UkV5TmhqcXVBR24vY0NJUUMzdUk2VXQrVDdZQXlEL0k4MnliUDdkUFJaVTRpaXJ1UUM1U3hLNUc1WklnQUFBQUFBQUE9PSIsImhlYWRlciI6eyJwdWJsaWNLZXlIYXNoIjoiRjluQ3IvTDltVkxXV1JlTWtGKzA5a0FXRFJMS25MeWRPbVZjTmRDd2o5UT0iLCJlcGhlbWVyYWxQdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVudGNENit0K0lTYW1qN1RTZTkrNk5rSkwxNHlMNVdmdVVOOFV3QVFocWFsNlVJYkIrUWR6WEZXTmI4c0ljSXFyUHdWdFlGZU1PZlpkcGczczBsakZSZz09IiwidHJhbnNhY3Rpb25JZCI6Ijc0ZGQxYWU0ZGVhMDY5NDU0ZGFlZDg5MjVhNGUzNjM5NWVmMGIzZTg2ZDQwNDA3ZjA0OTE3OGJmOWM4NGQ1MmEifSwidmVyc2lvbiI6IkVDX3YxIn0=</dataValue>[\n]"
"            </opaqueData>[\n]"
"        </payment>[\n]"
"    </transactionRequest>[\n]"
"</createTransactionRequest>[\n]"

And here is the response:

"HTTP/1.1 200 OK[\r][\n]"
"Cache-Control: no-cache, no-store, max-age=0[\r][\n]"
"Pragma: no-cache[\r][\n]"
"Content-Type: application/xml; charset=utf-8[\r][\n]"
"Expires: -1[\r][\n]"
"X-OPNET-Transaction-Trace: 5dc25ad7-be0f-43e8-8023-adefc14aae84-12960-2197946[\r][\n]"
"Access-Control-Allow-Credentials: true[\r][\n]"
"Access-Control-Allow-Headers: x-requested-with,cache-control,content-type,origin,method,SOAPAction[\r][\n]"
"Access-Control-Allow-Methods: PUT,OPTIONS,POST,GET[\r][\n]"
"Access-Control-Allow-Origin: *[\r][\n]"
"X-Download-Options: noopen[\r][\n]"
"Strict-Transport-Security: max-age=31536000[\r][\n]"
"X-Cnection: close[\r][\n]"
"Date: Thu, 13 Apr 2023 15:16:42 GMT[\r][\n]"
"Content-Length: 834[\r][\n]"
"[\r][\n]"
"[0xef][0xbb][0xbf]<?xml version="1.0" encoding="utf-8"?><createTransactionResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"><messages><resultCode>Error</resultCode><message><code>E00027</code><text>The transaction was unsuccessful.</text></message></messages><transactionResponse><responseCode>3</responseCode><authCode /><avsResultCode>P</avsResultCode><cvvResultCode /><cavvResultCode /><transId>0</transId><refTransID /><transHash /><testRequest>0</testRequest><accountNumber /><accountType /><errors><error><errorCode>153</errorCode><errorText>There was an error processing the payment data. Opaque data can only be used with ECOM market type.</errorText></error></errors><transHashSha2 /></transactionResponse></createTransactionResponse>"
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store, max-age=0
Pragma: no-cache
Content-Type: application/xml; charset=utf-8
Expires: -1
X-OPNET-Transaction-Trace: 5dc25ad7-be0f-43e8-8023-adefc14aae84-12960-2197946
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: x-requested-with,cache-control,content-type,origin,method,SOAPAction
Access-Control-Allow-Methods: PUT,OPTIONS,POST,GET
Access-Control-Allow-Origin: *
X-Download-Options: noopen
Strict-Transport-Security: max-age=31536000
X-Cnection: close
Date: Thu, 13 Apr 2023 15:16:42 GMT

I tried to look through the sdk-java code to see if there was a way where I could specify an ECON marketType in the request, but the only thing I found was a MarketType enum whose only value was RETAIL. So I'm not sure how to further troubleshoot this issue.

@mboyersgwg
Copy link
Author

I have resolved this. Even though the MarketType enum only has support for RETAIL (with a value of 2), I found that the ECOM type is "0". So given that, I added the following

TransRetailInfoType transRetailInfoType = new TransRetailInfoType();
transRetailInfoType.setMarketType("0");

Then at some point later, I set the TransRetailInfoType on the TransactionRequestType:

TransactionRequestType transactionRequestType = new TransactionRequestType();
transactionRequestType.setRetail(transRetailInfoType);

I have tested this with the problematic account, and it does work. I also tested it with the accounts that were previously working, and those work as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

1 participant