XERO XML中存在错误(1,1)

时间:2018-08-13 02:32:45

标签: xero-api

我已经使用了几年的代码,并且不得不将项目升级到.Net4。升级项目后,在访问任何方法后出现以下错误:

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)

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

1 个答案:

答案 0 :(得分:0)

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;