xero-api - 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)
我在这里做错了什么?为什么我使用多年的相同代码停止工作?
解决方案
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;
推荐阅读
- laravel - 为什么我的 websocket 实时聊天不起作用
- javascript - 使用域路由管理同一域名下的两个不同 Azure 资源
- angular - Fullcalendar.io - 仅在每个视图期间加载事件
- optimization - 多产品交付优化问题:简化模型和约束
- python - 将带有字符串的矩阵转换为列表。Python
- ktor - Ktor:无法导入依赖项
- http - 老版本播放框架2.2
- android - 在项目中使用 .AAR 文件时出现问题
- javascript - 在 Google Chrome 中重新加载网页,直到 HTML 包含特定文本
- angular - 我想将指令中的变量连接到组件