0

我正在使用 QuickBooks WebConnector 2.2.0.71 和我的 WCF Web 服务(在 .NET 4.6.1 上)。在 WebConnector 中按“选择更新”serverVersionclientVersion成功处理请求后,但authenticate失败:

20170705.06:31:00 UTC   : QBWebConnector.SOAPWebService.do_authenticate() : *** Calling authenticate() with following parameters:<userName="username"><password=<MaskedForSecurity>
20170705.06:31:00 UTC   : QBWebConnector.SOAPWebService.do_authenticate() : QBWC1012: Authentication failed due to following error message.
Index Out Of Range.
More info:
StackTrace =    в QBWebConnector.WebService.do_authenticate(String& ticket, String& companyFileName)
Source = QBWebConnector

我的 WCF 服务的响应(来自 WCF 测试客户端):

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header />
  <s:Body>
    <authenticateResponse xmlns="http://developer.intuit.com/">
      <authenticateResult xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:string>a3f10876-e027-419d-8dd8-3752a852ddae</a:string>
        <a:string>nvu</a:string>
        <a:string>3</a:string>
        <a:string>60</a:string>
        <a:string>60</a:string>
      </authenticateResult>
    </authenticateResponse>
  </s:Body>
</s:Envelope>

Docs 说“您的回调必须返回一个包含 4 个可能元素的字符串数组。第一个元素包含 NONE 或 NVU(无效用户)或 BUSY。或空字符串,或作为 QB 公司文件名的字符串。” 但在示例中,第一个元素是 guid 令牌,所以我发送了 5 个元素的数组。

当我发送的不是数组而是 int 值时发生了同样的错误,所以我猜 - 也许我的 xml 有问题?

4

2 回答 2

0

QBWC 程序员指南第 21 页。

您返回的身份验证调用将是一个最多包含四个字符串的字符串数组。

数组的第一个成员是会话令牌,它可以是 GUID 或您想用来识别会话的任何其他内容。该令牌将由 QBWC 在会话的后续回调中返回。

字符串数组的第二个成员可以包含各种东西。

一个。如果身份验证调用中的用户名和密码无效,您将提供值“nvu”。

湾。另一方面,如果用户数据有效但您没有为该用户做任何工作,您将提供值“none”。

C。如果您确实对该用户有工作要做,您可以提供要在当前更新中使用的公司的完整路径名。

d。如果您想使用当前在客户端打开的任何 QuickBooks 公司,只需提供一个空字符串。

字符串数组的第三个可选成员包含下一次更新前等待的秒数。您将使用它来有效地告诉 QBWC 客户在指定时间内不要打扰您。

字符串数组的可选第四个成员包含用作 Web 服务的 MinimumRunEveryNSeconds 时间的秒数,它告诉 QBWC 需要联系您的 Web 服务的频率。

我不确定为什么文档末尾的 Authenticate 与此不同。

于 2017-07-06T13:39:13.553 回答
0

通过添加[XmlSerializerFormat]to解决IService,因此响应变为

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header />
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <authenticateResponse xmlns="http://developer.intuit.com/">
      <authenticateResult>
        <string>d0297d33-859d-4259-a598-5fbf328bac3b</string>
        <string>nvu</string>
        <string>3</string>
        <string>60</string>
      </authenticateResult>
    </authenticateResponse>
  </s:Body>
</s:Envelope>
于 2017-07-07T16:53:59.217 回答