我使用的是QuickBooks WebConnector 2.2.0.71和我的WCF服务(在.NET 4.6.1上)。在WebConnector serverVersion
和clientVersion
请求中按下"Update selected“后,成功处理,但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出了问题?
发布于 2017-07-06 21:39:14
QBWC程序员指南的第21页。
对身份验证调用的返回将是一个字符串数组,最多包含四个字符串。
该数组的第一个成员是会话令牌,它可以是GUID或要用于标识会话的任何其他内容。此令牌将由QBWC在会话的后续回调中返回。
字符串数组的第二个成员可以包含各种内容。
a.如果身份验证调用中的用户名和密码无效,则需要提供值“nvu”。
b.另一方面,如果用户数据是有效的,但您不需要为该用户执行任何操作,则应提供值“none”。
c.如果您确实有工作要为该用户做,您可以提供要在当前更新中使用的公司的完整路径名。
d.如果您想在客户端使用当前开放的QuickBooks公司,只需提供一个空字符串。
字符串数组的第三个可选成员包含在下一次更新之前等待的秒数。您将使用它来有效地告诉QBWC客户端在指定的时间内不要打扰您。
字符串数组的第四个可选成员包含用作web服务的MinimumRunEveryNSeconds时间的秒数,它告诉QBWC服务需要多频繁地联系。
我不确定为什么文档末尾的身份验证与此不同。
https://stackoverflow.com/questions/44943915
复制相似问题