How could I get an XML parsing error when I don't send XML. Here is my Authorize.Net ACH Processing function:
Private Function AuthNet_ACH(ByVal oGtwy As Gateway,
ByVal oInv As InvoiceDet,
ByVal oACHDet As ACHDet) As Results
Try
'* Set the security protocol
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
System.Net.ServicePointManager.ServerCertificateValidationCallback = (Function(sender, certificate, chain, sslPolicyErrors) True)
'* Create the request
If oGtwy.TestMode Then
ApiOperationBase(Of ANetApiRequest, ANetApiResponse).RunEnvironment = AuthorizeNet.Environment.SANDBOX
Else
ApiOperationBase(Of ANetApiRequest, ANetApiResponse).RunEnvironment = AuthorizeNet.Environment.PRODUCTION
End If
ApiOperationBase(Of ANetApiRequest, ANetApiResponse).MerchantAuthentication = New merchantAuthenticationType() With {
.name = oGtwy.LoginID,
.ItemElementName = ItemChoiceType.transactionKey,
.Item = oGtwy.Password
}
Dim bankAccount As New bankAccountType
Select Case oACHDet.AcctType
Case ACHDet.AcctTypes.S
bankAccount.accountType = bankAccountTypeEnum.savings
Case Else
bankAccount.accountType = bankAccountTypeEnum.checking
End Select
bankAccount.routingNumber = oACHDet.ABA
bankAccount.accountNumber = oACHDet.AcctNum
bankAccount.nameOnAccount = oACHDet.AcctName
Select Case oACHDet.AuthType
Case ACHDet.AuthTypes.ARC
bankAccount.echeckType = echeckTypeEnum.ARC
Case ACHDet.AuthTypes.BOC
bankAccount.echeckType = echeckTypeEnum.BOC
Case ACHDet.AuthTypes.CCD
bankAccount.echeckType = echeckTypeEnum.CCD
Case ACHDet.AuthTypes.PPD
bankAccount.echeckType = echeckTypeEnum.PPD
Case ACHDet.AuthTypes.TEL
bankAccount.echeckType = echeckTypeEnum.TEL
Case Else
bankAccount.echeckType = echeckTypeEnum.WEB
End Select
'bankAccount.bankName = "Wells Fargo Bank NA"
Dim paymentType = New paymentType With {
.Item = bankAccount
}
Dim transRequest As New transactionRequestType
transRequest.amount = oInv.Amount
Dim arrSettings As New List(Of settingType)
arrSettings.Add(New settingType With {
.settingName = settingNameEnum.emailCustomer.ToString,
.settingValue = oGtwy.SendEmail
})
arrSettings.Add(New settingType With {
.settingName = settingNameEnum.headerEmailReceipt.ToString,
.settingValue = oGtwy.EmailHeader.ToString
})
arrSettings.Add(New settingType With {
.settingName = settingNameEnum.footerEmailReceipt.ToString,
.settingValue = oGtwy.EmailFooter.ToString
})
Select Case oACHDet.TransType
Case TransTypes.SALE
transRequest.transactionType = transactionTypeEnum.authCaptureTransaction.ToString
Case TransTypes.VOID
'transRequest.transactionType = transactionTypeEnum.voidTransaction.ToString
transRequest.transactionType = transactionTypeEnum.refundTransaction.ToString
transRequest.refTransId = oACHDet.PNRef.ToString
Case TransTypes.CRED
transRequest.transactionType = transactionTypeEnum.refundTransaction.ToString
transRequest.refTransId = oACHDet.PNRef.ToString
Case Else '* Use Authorize as the Default
transRequest.transactionType = transactionTypeEnum.authOnlyTransaction.ToString
transRequest.amount = 0.01D
arrSettings(0).settingValue = False
End Select
transRequest.transactionSettings = arrSettings.ToArray
transRequest.payment = paymentType
transRequest.lineItems = Nothing
Dim arrFields As New List(Of userField)
arrFields.Add(New userField With {
.name = "Market",
.value = oInv.Comment1.Split(":")(0)
})
arrFields.Add(New userField With {
.name = "AcctName",
.value = oInv.Comment1.Split(":")(1)
})
arrFields.Add(New userField With {
.name = "AcctNum",
.value = oInv.Comment2.ToString
})
transRequest.userFields = arrFields.ToArray
Dim Cust = New customerDataType With {
.email = oInv.EmailAddr.ToString
}
transRequest.customer = Cust
Dim request = New createTransactionRequest With {
.transactionRequest = transRequest
}
' Step 3 - Send the request to the gateway
Dim controller = New createTransactionController(request)
controller.Execute()
Dim Resp = controller.GetApiResponse()
If Not Resp Is Nothing Then
Dim oResp As Results = New Results(DirectCast(Resp, createTransactionResponse))
Try
If ConfigurationManager.AppSettings("AUTHNET_RES_LOG") IsNot Nothing Then
If CBool(ConfigurationManager.AppSettings("AUTHNET_RES_LOG")) Then
SimpleLog.WriteLog(oResp)
End If
End If
Catch ex As Exception
End Try
Return oResp
Else
Dim oRes = New Results
Dim errorResponse As ANetApiResponse = controller.GetErrorResponse()
If errorResponse.messages.message.Length > 0 Then
oRes.Response = "Controller_Name Creation Failed."
oRes.RespMsg = "Error message: " & errorResponse.messages.message(0).text
oRes.Result = errorResponse.messages.message(0).code
Else
oRes.Response = "Null Response."
End If
Return oRes
End If
Catch ex As Exception
SimpleLog.WriteLog(ex)
Throw CustomException(ex)
End Try
End FunctionAnd here's the fun part. Sometimes it works...sometimes it doesn't. Works all the time for most clients, and sporadically for one client.
08-06-2019 08:23 AM