首页 > 解决方案 > XERO XML 中存在错误 (1,1)

问题描述

我的代码已经工作了好几年了,我不得不将项目升级到.Net 4。升级项目后,访问任何方法后都会出现以下错误:

XML 文档 (1,1) 中存在错误 - 十六进制值 0x1F,是无效字符。第 1 行位置 1。

这是我尝试运行的代码示例:

    Dim ConsumerKey As String = "XXXXXXXXXXXXXXXXXXXXXX"
        Dim UserAgentString As String = "TEST Xero Interface (Private App Testing)"
        Dim privateCertificate As X509Certificate2 = New X509Certificate2("C:\Data\public_privatekey.pfx", "xxxxxxx")
        Dim uConsumerSession As IOAuthSession = New XeroApiPrivateSession(UserAgentString, ConsumerKey, privateCertificate)
        Dim uRepository As New Repository(uConsumerSession)


        Dim uInvoice As New Model.Invoice
        Dim uContact As New Model.Contact
        uContact.Name = "ABC Ltd"
        uContact.IsCustomer = True
        uInvoice.Contact = uContact
        uInvoice.Type = "ACCREC"
        uInvoice.Date = Now
        uInvoice.DueDate = DateAdd(DateInterval.Day, 14, Now)
        uInvoice.Status = "DRAFT"
        uInvoice.LineAmountTypes = 0

        uInvoice.LineItems = New LineItems
        Dim uLineItem = New Model.LineItem
        uLineItem.Quantity = 1
        uLineItem.ItemCode = "TEST TRANS"
        uLineItem.Description = "Testing Router"
        uLineItem.AccountCode = "400"
        uLineItem.UnitAmount = 200
        uInvoice.LineItems.Add(uLineItem)
        uRepository.Create(Of Model.Invoice)(uInvoice)

我在这里做错了什么?为什么我使用多年的相同代码停止工作?

标签: xero-api

解决方案


TLDR;您的代码将使用已弃用的 TLS 1.0 - 在您的代码中使用以下内容强制使用 TLS 1.2

 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

我相信你已经解决了这个问题,但我得到了同样的结果,API 返回了一个未记录的响应代码 412,因此在访问 API 并做事之前就被拒绝了,

您希望用于 .NET 的旧版 SDK 中的错误响应处理效果不佳,因此试图解析错误响应,因此出现错误 - 这让我在调试时有点犹豫。

我决定升级到正在积极维护的新 Xeronet SDK - https://github.com/XeroAPI/Xero-Net

然后我得到了同样的错误,除了这次错误消息很有用,指出不支持 TLS 1.0 请升级,啊。哈...根据他们的网站,他们在 2018 年 6 月结束时转而支持,我认为这实际上发生在 7 月底,因为我在 7 月底有工作处理此代码。

无论如何,最好将您的代码升级到新的 SDK,然后在 .net 4.5 上使用以下命令强制 .net 使用 TLS 1.2

 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

如果使用 4.0 那么

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

推荐阅读