【问题标题】:Get All Customers from QuickBook using Web Connector and qbxml使用 Web 连接器和 qbxml 从 QuickBook 获取所有客户
【发布时间】:2016-01-17 22:00:03
【问题描述】:

我正在尝试使用 QBWebConnector 从 QuickBooks 2013 专业版中吸引所有客户。我的请求QBXML如下

  string strRequestXML = "";
        XmlDocument inputXMLDoc = null;
        inputXMLDoc = new XmlDocument();
        inputXMLDoc.AppendChild(inputXMLDoc.CreateXmlDeclaration("1.0", null, null));
        inputXMLDoc.AppendChild(inputXMLDoc.CreateProcessingInstruction("qbxml", "version=\"4.0\""));
        XmlElement qbXML = inputXMLDoc.CreateElement("QBXML");
        inputXMLDoc.AppendChild(qbXML);
        XmlElement qbXMLMsgsRq = inputXMLDoc.CreateElement("QBXMLMsgsRq");
        qbXML.AppendChild(qbXMLMsgsRq);
        qbXMLMsgsRq.SetAttribute("onError", "stopOnError");
        XmlElement customerQueryRq = inputXMLDoc.CreateElement("CustomerQueryRq");
        qbXMLMsgsRq.AppendChild(customerQueryRq);
        customerQueryRq.SetAttribute("requestID", "whatever");
        strRequestXML = inputXMLDoc.OuterXml;
        req.Add(strRequestXML);

上面是我的来自 WebService 的 buildRequest 方法,但是我没有收到任何错误,状态是 QBWebConnector 正常但没有看到响应。 这是日志

    20160117.21:51:42 UTC   : QBWebConnector.WebServiceManager.DoUpdateSelected() : updateWS() for application = 'HTTPWebService' has STARTED
20160117.21:51:42 UTC   : QBWebConnector.RegistryManager.getUpdateLock() : HKEY_CURRENT_USER\Software\Intuit\QBWebConnector\UpdateLock = FALSE
20160117.21:51:42 UTC   : QBWebConnector.RegistryManager.setUpdateLock() : HKEY_CURRENT_USER\Software\Intuit\QBWebConnector\UpdateLock has been set to True
20160117.21:51:42 UTC   : QBWebConnector.RegistryManager.setUpdateLock() : ********************* Update session locked *********************
20160117.21:51:42 UTC   : QBWebConnector.SOAPWebService.instantiateWebService() : Initiated connection to the following application.
20160117.21:51:42 UTC   : QBWebConnector.SOAPWebService.instantiateWebService() : AppName: HTTPWebService
20160117.21:51:42 UTC   : QBWebConnector.SOAPWebService.instantiateWebService() : AppUniqueName (if available): HTTPWebService
20160117.21:51:42 UTC   : QBWebConnector.SOAPWebService.instantiateWebService() : AppURL: http://localhost/WCWebService/WCWebService.asmx
20160117.21:51:42 UTC   : QBWebConnector.SOAPWebService.do_serverVersion() : *** Calling serverVersion().
20160117.21:51:42 UTC   : QBWebConnector.SOAPWebService.do_serverVersion() : Received from serverVersion() following parameter:<serverVersionRet="2.0.0.1">
20160117.21:51:42 UTC   : QBWebConnector.SOAPWebService.do_clientVersion() : *** Calling clientVersion() with following parameter:<productVersion="2.2.0.34">
20160117.21:51:42 UTC   : QBWebConnector.SOAPWebService.do_clientVersion() : Received from clientVersion() following parameter:<clientVersionRet="">
20160117.21:51:42 UTC   : QBWebConnector.SOAPWebService.do_clientVersion() : This application agrees with the current version of QBWebConnector. Allowing update operation.
20160117.21:51:42 UTC   : QBWebConnector.SOAPWebService.do_authenticate() : Authenticating to application 'HTTPWebService', username = 'username'
20160117.21:51:42 UTC   : QBWebConnector.SOAPWebService.do_authenticate() : *** Calling authenticate() with following parameters:<userName="username"><password=<MaskedForSecurity>
20160117.21:51:42 UTC   : QBWebConnector.SOAPWebService.updateWS() : Received from authenticate() following parameters:<authRet[0]="e8c16e62-7395-469b-9e8d-ed491b2a578c"><authRet[1]="C:\Users\Public\Documents\Intuit\QuickBooks\Sample Company Files\QuickBooks 2015\Sample_Premier_ProductBased.QBW"><authRet[2]=""><authRet[3]="">
20160117.21:51:42 UTC   : QBWebConnector.RegistryManager.setCurrentWebServiceName() : HKEY_CURRENT_USER\Software\Intuit\QBWebConnector\CurrentWebServiceName has been set to HTTPWebService
20160117.21:51:42 UTC   : QBWebConnector.RegistryManager.setCurrentWebServiceSessionTicket() : HKEY_CURRENT_USER\Software\Intuit\QBWebConnector\CurrentWebServiceSessionTicket has been set to e8c16e62-7395-469b-9e8d-ed491b2a578c
20160117.21:51:42 UTC   : QBWebConnector.SOAPWebService.CheckCFNResponse() : User authenticated.
20160117.21:51:42 UTC   : QBWebConnector.SOAPWebService.do_authenticate() : Done.
20160117.21:51:42 UTC   : QBWebConnector.SOAPWebService.OpenConnection() : Connecting to QuickBooks...
20160117.21:51:43 UTC   : QBWebConnector.SOAPWebService.OpenConnection() : Connected., Session started
20160117.21:51:43 UTC   : QBWebConnector.CompanyFileLock.Send_CompanyQueryRqXML() : XML dump follows: -

<?xml version="1.0"?><?qbxml version="13.0"?><QBXML><QBXMLMsgsRq onError="s......

20160117.21:51:43 UTC   : QBWebConnector.CompanyFileLock.Send_CompanyQueryRqXML() : XML dump follows: -

<?xml version="1.0" ?>
<QBXML>
<QBXMLMsgsRs>
<CompanyQueryRs requestID="1" ......

20160117.21:51:43 UTC   : QBWebConnector.CompanyFileLock.getLock() : Got Lock = UNLOCKED:GHAZANFAR
20160117.21:51:43 UTC   : QBWebConnector.CompanyFileLock.IsLocked() : Lock = UNLOCKED. Returning false.
20160117.21:51:43 UTC   : QBWebConnector.CompanyFileLock.Send_DataExtModRqXML() : XML dump follows: -

<?xml version="1.0"?><?qbxml version="13.0"?><QBXML><QBXMLMsgsRq onError="s......

20160117.21:51:43 UTC   : QBWebConnector.CompanyFileLock.Send_DataExtModRqXML() : XML dump follows: -

<?xml version="1.0" ?>
<QBXML>
<QBXMLMsgsRs>
<DataExtModRs requestID="1" st......

20160117.21:51:43 UTC   : QBWebConnector.CompanyFileLock.setLock() : Lock has been set to value = <LOCKED:GHAZANFAR:635886643033561787> in QuickBooks for ownerID = <{87EDAAF8-637E-4203-867F-4BA79C2F8998}>
20160117.21:51:44 UTC   : QBWebConnector.CompanyFileLock.Send_CompanyQueryRqXML() : XML dump follows: -

<?xml version="1.0"?><?qbxml version="13.0"?><QBXML><QBXMLMsgsRq onError="s......

20160117.21:51:44 UTC   : QBWebConnector.CompanyFileLock.Send_CompanyQueryRqXML() : XML dump follows: -

<?xml version="1.0" ?>
<QBXML>
<QBXMLMsgsRs>
<CompanyQueryRs requestID="1" ......

20160117.21:51:44 UTC   : QBWebConnector.CompanyFileLock.getLock() : Got Lock = LOCKED:GHAZANFAR:635886643033561787
20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.update() : Company file has been locked for update.
20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.update() : Synchronizing with QuickBooks Company Name = Roving Auto Parts Pro
20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : Asking application to send request no. 1
20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : *** Calling sendRequestXML() with following parameters:
20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : wcTicket="e8c16e62-7395-469b-9e8d-ed491b2a578c"
20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : HCPResponseXML=
20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : XML dump follows: -

<?xml version="1.0" ?>
<QBXML>
<QBXMLMsgsRs>
<HostQueryRs requestID="0" sta......

20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : cfn="C:\Users\Public\Documents\Intuit\QuickBooks\Sample Company Files\QuickBooks 2015\Sample_Premier_ProductBased.QBW"
20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : qbNationality="US"
20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : qbXMLMajorVers="13"
20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : qbXMLMinorVers="0"
20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : Received from sendRequestXML() following parameter:
20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : strRequestXML =
20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : XML dump follows: -

<?xml version="1.0"?><?qbxml version="4.0"?><QBXML><QBXMLMsgsRq onError="st......

20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : Request xml received.
20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.ProcessRequestXML() : Processing request #1
20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.ProcessRequestXML() : REQUEST: received from application: size (bytes) = 148
20160117.21:51:44 UTC   : QBWebConnector.SOAPWebService.ProcessRequestXML() : Sending request to QuickBooks.
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.ProcessRequestXML() : Response received from QuickBooks: size (bytes) = 107502
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.ProcessRequestXML() : Sending response back to application.
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : *** Calling receiveResponseXML() with following parameters:
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : wcTicket="e8c16e62-7395-469b-9e8d-ed491b2a578c"
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : response =
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : XML dump follows: -

<?xml version="1.0" ?>
<QBXML>
<QBXMLMsgsRs>
<CustomerQueryRs requestID="wh......

20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : hresult=""
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : message=""
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : Received from receiveResponseXML() following parameters:
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : more="100">
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : Done. No more to process.
20160117.21:51:45 UTC   : QBWebConnector.CompanyFileLock.Send_CompanyQueryRqXML() : XML dump follows: -

<?xml version="1.0"?><?qbxml version="13.0"?><QBXML><QBXMLMsgsRq onError="s......

20160117.21:51:45 UTC   : QBWebConnector.CompanyFileLock.Send_CompanyQueryRqXML() : XML dump follows: -

<?xml version="1.0" ?>
<QBXML>
<QBXMLMsgsRs>
<CompanyQueryRs requestID="1" ......

20160117.21:51:45 UTC   : QBWebConnector.CompanyFileLock.getLock() : Got Lock = LOCKED:GHAZANFAR:635886643033561787
20160117.21:51:45 UTC   : QBWebConnector.CompanyFileLock.Send_DataExtModRqXML() : XML dump follows: -

<?xml version="1.0"?><?qbxml version="13.0"?><QBXML><QBXMLMsgsRq onError="s......

20160117.21:51:45 UTC   : QBWebConnector.CompanyFileLock.Send_DataExtModRqXML() : XML dump follows: -

<?xml version="1.0" ?>
<QBXML>
<QBXMLMsgsRs>
<DataExtModRs requestID="1" st......

20160117.21:51:45 UTC   : QBWebConnector.CompanyFileLock.unsetLock() : Company file has been unlocked for ownerID = <{87EDAAF8-637E-4203-867F-4BA79C2F8998}>
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.update() : Company file has been unlocked.
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.update() : Ending session to QuickBooks.
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.DisconnectFromQB() : Session ended and connection closed
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_closeConnection() : *** Calling closeConnection() with following parameter:<wcTicket="e8c16e62-7395-469b-9e8d-ed491b2a578c">
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_closeConnection() : Received from closeConnection() following parameter:<ccResponse="OK">
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_closeConnection() : CloseConnection called to application.
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_closeConnection() : Response received from application = OK
20160117.21:51:45 UTC   : QBWebConnector.RegistryManager.setUpdateLock() : HKEY_CURRENT_USER\Software\Intuit\QBWebConnector\UpdateLock has been set to False
20160117.21:51:45 UTC   : QBWebConnector.RegistryManager.setUpdateLock() : ********************* Update session unlocked *********************
20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.update() : update completed.
20160117.21:51:45 UTC   : QBWebConnector.WebServiceManager.DoUpdateSelected() : Update for application = 'HTTPWebService' has COMPLETED
20160117.21:51:45 UTC   : QBWebConnector.WebServiceManager.DoUpdateSelected() : Update session has ended.

编辑发帖代码:

public ArrayList buildRequest() 
    {
        //Get All Customer Query
        string strRequestXML = "";
        XmlDocument inputXMLDoc = null;
        inputXMLDoc = new XmlDocument();
        inputXMLDoc.AppendChild(inputXMLDoc.CreateXmlDeclaration("1.0", null, null));
        inputXMLDoc.AppendChild(inputXMLDoc.CreateProcessingInstruction("qbxml", "version=\"4.0\""));
        XmlElement qbXML = inputXMLDoc.CreateElement("QBXML");
        inputXMLDoc.AppendChild(qbXML);
        XmlElement qbXMLMsgsRq = inputXMLDoc.CreateElement("QBXMLMsgsRq");
        qbXML.AppendChild(qbXMLMsgsRq);
        qbXMLMsgsRq.SetAttribute("onError", "stopOnError");
        XmlElement customerQueryRq = inputXMLDoc.CreateElement("CustomerQueryRq");
        qbXMLMsgsRq.AppendChild(customerQueryRq);
        customerQueryRq.SetAttribute("requestID", "whatever");
        strRequestXML = inputXMLDoc.OuterXml;
        req.Add(strRequestXML);

        // Clean up
        strRequestXML="";
        inputXMLDoc=null;
        qbXML=null;
        qbXMLMsgsRq=null;
        //maxReturned=null;
        return req;
    }


public string sendRequestXML(string ticket, string strHCPResponse, string strCompanyFileName, 
        string qbXMLCountry, int qbXMLMajorVers, int qbXMLMinorVers)
    {
        if (Session["counter"] == null) {
            Session["counter"] = 0;
        }
        string evLogTxt="WebMethod: sendRequestXML() has been called by QBWebconnector" + "\r\n\r\n";
        evLogTxt=evLogTxt+"Parameters received:\r\n";
        evLogTxt=evLogTxt+"string ticket = " + ticket + "\r\n";
        evLogTxt=evLogTxt+"string strHCPResponse = " + strHCPResponse + "\r\n";
        evLogTxt=evLogTxt+"string strCompanyFileName = " + strCompanyFileName + "\r\n";
        evLogTxt=evLogTxt+"string qbXMLCountry = " + qbXMLCountry + "\r\n";
        evLogTxt=evLogTxt+"int qbXMLMajorVers = " + qbXMLMajorVers.ToString() + "\r\n";
        evLogTxt=evLogTxt+"int qbXMLMinorVers = " + qbXMLMinorVers.ToString() + "\r\n";
        evLogTxt=evLogTxt+"\r\n";

        ArrayList req=buildRequest();
        string request="";
        int total = req.Count;
        count=Convert.ToInt32(Session["counter"]);

        if(count<total) {
            request=req[count].ToString();
            evLogTxt=evLogTxt+ "sending request no = " + (count+1) + "\r\n";
            Session["counter"] = ((int) Session["counter"]) + 1;
        }
        else{
            count=0;
            Session["counter"]=0;
            request="";
        }
        evLogTxt=evLogTxt+"\r\n";
        evLogTxt=evLogTxt+"Return values: " + "\r\n";
        evLogTxt=evLogTxt+"string request = " + request + "\r\n";
        logEvent(evLogTxt);
        return request;
    }



    [ WebMethod(Description="This web method facilitates web service to receive response XML from QuickBooks via QBWebConnector",EnableSession=true) ]
    /// <summary>
    /// WebMethod - receiveResponseXML()
    /// Signature: public int receiveResponseXML(string ticket, string response, string hresult, string message)
    /// 
    /// IN: 
    /// string ticket
    /// string response
    /// string hresult
    /// string message
    ///
    /// OUT: 
    /// int retVal
    /// Greater than zero  = There are more request to send
    /// 100 = Done. no more request to send
    /// Less than zero  = Custom Error codes
    /// </summary>
    public int receiveResponseXML(string ticket, string response, string hresult, string message)
    {
        string evLogTxt="WebMethod: receiveResponseXML() has been called by QBWebconnector" + "\r\n\r\n";
        evLogTxt=evLogTxt+"Parameters received:\r\n";
        evLogTxt=evLogTxt+"string ticket = " + ticket + "\r\n";
        evLogTxt=evLogTxt+"string response = " + response + "\r\n";
        evLogTxt=evLogTxt+"string hresult = " + hresult + "\r\n";
        evLogTxt=evLogTxt+"string message = " + message + "\r\n";
        evLogTxt=evLogTxt+"\r\n";

        int retVal=0;
        if(!hresult.ToString().Equals("")){
            // if there is an error with response received, web service could also return a -ve int     
            evLogTxt=evLogTxt+ "HRESULT = " + hresult + "\r\n";
            evLogTxt=evLogTxt+ "Message = " + message + "\r\n";
            retVal=-101;
        }
        else{ 
            evLogTxt=evLogTxt+ "Length of response received = " + response.Length + "\r\n";

            ArrayList req = buildRequest();
            int total=req.Count;
            int count=Convert.ToInt32(Session["counter"]);

            int percentage=(count*100)/total;
            if (percentage>=100){
                count=0;
                Session["counter"]=0;
            }
            retVal=percentage;
        }
        evLogTxt=evLogTxt+"\r\n";
        evLogTxt=evLogTxt+"Return values: " + "\r\n";
        evLogTxt=evLogTxt+"int retVal= " + retVal.ToString() + "\r\n";
        logEvent(evLogTxt);
        return retVal;
    }

这是我的发送和响应方法。问题是我如何查看获得所有客户的响应,以及如何在浏览器中测试响应?如果我想在浏览器中测试服务,我该怎么做? 我想解析 C# 类中的响应并在我的其他应用程序中使用它。

【问题讨论】:

    标签: xml quickbooks qbxml


    【解决方案1】:

    响应正在通过receiveResponseXML(...) 方法成功发送给您。您可以在日志中看到这一点:

    0160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : *** Calling receiveResponseXML() with following parameters:
    20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : wcTicket="e8c16e62-7395-469b-9e8d-ed491b2a578c"
    20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : response =
    20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : XML dump follows: -
    
    <?xml version="1.0" ?>
    <QBXML>
    <QBXMLMsgsRs>
    <CustomerQueryRs requestID="wh......
    
    20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : hresult=""
    20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : message=""
    20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : Received from receiveResponseXML() following parameters:
    20160117.21:51:45 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : more="100">
    

    您忽略了发布任何相关代码,因此很难再为您提供帮助。

    您应该查看 Web 连接器的工作原理。 QuickBooks SDK 中有数百页可用的文档:

    这是另一个摘要:

    关于您添加的问题:

    问题是我如何查看获得所有客户的反应

    您可以在日志中查看它,或者您可以让您的应用程序将其保存到您的数据库中,然后从那里显示给您。

    如何在浏览器中测试响应?

    您无法在浏览器中对其进行测试。它是一个 SOAP 服务,它与您的网络浏览器毫无关系,无论如何,无论如何。

    您永远不会在仅使用 Web 连接器的浏览器中直接看到 XML 响应或其中的任何数据。

    您需要解析 XML,将其存储/缓存在您自己的数据库中,然后您可以根据需要在您自己的应用程序中显示缓存/存储的数据。

    您不能直接在浏览器中显示来自 Web 连接器的响应 - 您需要将其存储在某处/以某种方式,然后从存储的任何位置显示数据。

    【讨论】:

    • 嗨@KeithPalmer,我正在研究开发应用程序的可行性,我想问你是否可以使用网络连接器和快速簿企业解决方案插入、更新和删除项目和订单 15桌面,使用 conolibyte PHP DevKit ?提前致谢。
    • @KeithPalmer 我编辑了帖子,请查看并清除我的困惑以查看浏览器中的响应?
    • @Ghazanfar 我回复了。请停止双重发布。您无需重复发布 EVER。
    • 感谢@KeithPalmer。日志是否显示 100 多个客户?你能指出我可以保存或缓存它的代码吗?
    • 如果我将此服务引用添加到另一个 asp.net 应用程序并使用它,验证后要遵循的步骤是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 2011-08-15
    • 2021-03-22
    • 1970-01-01
    • 2016-05-05
    相关资源
    最近更新 更多