1
votes

We're trying to add a new customer with a default payment profile or adding a new customer payment profile for an existing customer profile.

we don't pass CC details to our servers also we don't want to use any Authoirzed.net hosted form or Accept.js UI. That's why we Integrating this Accept.js into our own Payment Form as per this Authoirzed.net documenation

we pass opaqueData from frontend Acept.js like this Inside the Payment Object which get in the response.

"payment": {
                "opaqueData": {
                    "dataDescriptor": "COMMON.ACCEPT.INAPP.PAYMENT",
                    "dataValue": "1234567890ABCDEF1111AAAA2222BBBB3333CCCC4444DDDD5555EEEE6666FFFF7777888899990000"
                }

As per our Workflow on Initial, we create the customer profile (with a single payment profile) or sometimes only Crate Customer and later on Add the Payment Profile in his Customer Profile So we use the Following methods for that.

Customer Profile with Payment

Adding Customer Payment Profile in or an existing customer profile

The documentation of these API clearly mentions that these Apis support the opaque data in the payment object and even if we pass the InValid Token we get the Proper Error Response E00114, Invalid OTS Token. But if we pass the Valid Token we get the following response.

{"messages": {"resultCode": "Error","message": [{ "code": "E00116","text": "OTS Token access violation"}]}}

But we are able to do the Payment Transactions function like Authorized, Charge a Credit Card with the passing of opaque data in Payment Object without any issue.

Create an Accept Payment Transaction

Authorize a Credit Card

If we Pass the createProfile as true while Calling the Authorize.net a Credit Card Using the nonce for a one-time payment. When transaction is successful, the gateway is returning us a new customer with payment profile that can be used for other transactions. But in this case, we can't manage to create a more Customer Payment profile against one Customer Profile.also if the user wants to change the customer payment profile we have to recreate the whole customer profile.

we search a lot on the authorized.net developer community but not able to find an answer for it. We found one Post pointing out the same issue

OTS Token Access Violation

in that, he mentions that The documentation seems to be saying that you can use a nonce to create a payment profile to an existing customer profile, but in actuality, it will give you an OTS Token Access Violation.so he decides to use Accept, js UI instead of Accept.js and let it take care of all these details for him.

Although we don't want to use any of the Authorized.net UI we give it a try Accept.js UI But got the Same Error " code ": "E00116", "text": "OTS Token access violation" with the Accept.js UI as well.

We are Realy stuck in the Flow.

We also have seen the explanation that this can be because the keys were generated for Production but used in the Sandbox, but I've reset the keys while in sandbox.authorize.net twice with no resolution.

we are stuck as this breaks our whole flow by not able to link the payment profile to the customer profile.we will really appreciate it if we get any directions to move ahead.

2

2 Answers

0
votes

According to one source, it can happen if there's a mismatch between public client key (which is used by the front end) and the transaction key (which is used by the back end). Both front end and back end use the API Login ID.

Also worth checking: -- make sure your validationMode is what you intend, either testMode or liveMode. You can log in to your Authorize.net account and set the gateway to be test mode or live mode. -- there are 2 API endpoints for Accept.js -- one for a sandbox authorize.net account, and another for a "real money" Authorize.net account. https://developer.authorize.net/api/reference/index.html#gettingstarted-section-section-header

0
votes

E00116 occurs:

  1. if a token is generated by a merchant A, but used to createTransaction by merchant B (e.g. token generated for Sandbox, but used in Production).

  2. This error may occurs also if capitalization is not being respected for API Login Id (merchantAuthentication.name), you will need to make sure to use the exact same value of your API login Id as generated in Authorize.net Merchant Interface.