Skip to content

E00001 Stuck with this error #99

@allencazar

Description

@allencazar

Issue: Authorize.Net API Integration - E00001 Error

Hello, I have the following code for creating a transaction request to Authorize.Net using their SDK:

const merchantAuthenticationType = new APIContracts.MerchantAuthenticationType();
merchantAuthenticationType.setName(process.env.AUTHORIZE_NET_API_LOGIN_ID || '');
merchantAuthenticationType.setTransactionKey(process.env.AUTHORIZE_NET_TRANSACTION_KEY || '');
console.log('Merchant Authentication setup complete.');

const creditCard = new APIContracts.CreditCardType();
creditCard.setCardNumber('4242424242424242');
creditCard.setExpirationDate('0842');
creditCard.setCardCode('999');
console.log('Credit Card setup complete.', creditCard);

const paymentType = new APIContracts.PaymentType();
paymentType.setCreditCard(creditCard);

const transactionRequestType = new APIContracts.TransactionRequestType();
transactionRequestType.setTransactionType(APIContracts.TransactionTypeEnum.AUTHCAPTURETRANSACTION);
transactionRequestType.setAmount(100); // Test amount (nxAmount used if needed)
transactionRequestType.setPayment(paymentType);
console.log('Transaction request setup complete.');

const createRequest = new APIContracts.CreateTransactionRequest();
createRequest.setMerchantAuthentication(merchantAuthenticationType);
createRequest.setTransactionRequest(transactionRequestType);
console.log('Transaction request created. Ready for API call.');

// Clean up null or undefined fields to prevent XML serialization issues
cleanRequest(createRequest);

// Log the cleaned request object
console.log('Cleaned Transaction Request Object:', createRequest);

const ctrl = new APIControllers.CreateTransactionController(createRequest);

// Wrap API call in Promise for async handling
const result = await new Promise((resolve, reject) => {
    console.log('Calling Authorize.Net API...');
    ctrl.execute(() => {
        const apiResponse = ctrl.getResponse();
        console.log('Received API response:', apiResponse);

        const response = new APIContracts.CreateTransactionResponse(apiResponse);
        const responseMessages = response.getMessages().getMessage();
        console.log('Response Messages:', responseMessages);

        if (response.getMessages().getResultCode() === APIContracts.MessageTypeEnum.OK) {
            console.log('Transaction successful, returning transaction ID.');
            resolve(
                NextResponse.json(
                    { message: response.getTransactionResponse().getTransId() },
                    { status: 200 }
                )
            );
        } else {
            console.log('Transaction failed with error:', response.getMessages().getMessage()[0].getText());
            reject(
                NextResponse.json(
                    { message: response.getMessages().getMessage()[0].getText() },
                    { status: 400 }
                )
            );
        }
    });
});

and I get the following error:

Error: E00001 - "JSON root object has multiple properties."

logs as follows:

Merchant Authentication setup complete.
Credit Card setup complete. CreditCardType {
  cardNumber: '4242424242424242',
  expirationDate: '0842',
  cardCode: '999',
  isPaymentToken: null,
  cryptogram: null,
  tokenRequestorName: null,
  tokenRequestorId: null,
  tokenRequestorEci: null
}
Transaction request setup complete.
Transaction request created. Ready for API call.
Cleaned Transaction Request Object: CreateTransactionRequest {
  merchantAuthentication: MerchantAuthenticationType {
    name: 'xxxxxxx',
    transactionKey: 'xxxxxxx',
    sessionToken: null,
    password: null,
    impersonationAuthentication: null,
    fingerPrint: null,
    clientKey: null,
    accessToken: null,
    mobileDeviceId: null
  },
  transactionRequest: TransactionRequestType {
    transactionType: 'authCaptureTransaction',
    amount: 100,
    currencyCode: null,
    payment: PaymentType {
      creditCard: [CreditCardType],
      bankAccount: null,
      trackData: null,
      encryptedTrackData: null,
      payPal: null,
      opaqueData: null,
      emv: null,
      dataSource: null
    },
    profile: null,
    solution: null,
    callId: null,
    terminalNumber: null,
    authCode: null,
    refTransId: null,
    splitTenderId: null,
    order: null,
    lineItems: null,
    tax: null,
    duty: null,
    shipping: null,
    taxExempt: null,
    poNumber: null,
    customer: null,
    billTo: null,
    shipTo: null,
    customerIP: null,
    cardholderAuthentication: null,
    retail: null,
    employeeId: null,
    transactionSettings: null,
    userFields: null,
    surcharge: null,
    merchantDescriptor: null,
    subMerchant: null,
    tip: null,
    processingOptions: null,
    subsequentAuthInformation: null,
    otherTax: null,
    shipFrom: null,
    authorizationIndicatorType: null
  }
}
Calling Authorize.Net API...
Received API response: { messages: { resultCode: 'Error', message: [ [Object] ] } }
Response Messages: [
  {
    code: 'E00001',
    text: "JSON root object has multiple properties. The root object must have a single property in order to create a valid XML document. Consider specifying a DeserializeRootElementName. Path 'transactionRequest', line 1, position 282."
  }
]

I appreciate any help.
Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions