How to create a .qwc file for QuickBooks Web Conne

2019-03-09 13:54发布

问题:

I am integrating QuickBooks (desktop version) with an ASP.NET application. For that I am using QuickBooks Web Connector. How can I create a .qwc file for my custom web service?

回答1:

The Web Connector is really just a proxy or a relay that sits between QuickBooks and your own application.

As an overview - basically, you build a SOAP server / Web Service which speaks a specific set of methods. The Web Connector then is installed on the machine running QuickBooks, and polls your web service asking “Hey, got anything for me to do?” Your web service can then respond with qbXML requests (examples of qbXML here) which tell the Web Connector “Add this customer: …” or “Send me invoices which match: …” or etc. etc. etc. The Web Connector then relays those requests to QuickBooks, QuickBooks processes them, and the response is relayed back to your web service. Your web service might then process the response somehow, and then send the next request over to the Web Connector.

There's a bigger overview of the Web Connector here or, if you download the QuickBooks SDK it has a 100+ page PDF that goes over this in detail.

You probably also want to look at this example after installing the QuickBooks SDK:

  • C:\Program Files (x86)\Intuit\IDN\QBSDK12.0\samples\qbdt\c-sharp\qbXML\WCWebService

Which is a complete working examples of a Web Connector SOAP implementation.

At it's most basic form, it looks something like this:

    [WebMethod]
    /// <summary>
    /// WebMethod - authenticate()
    /// To verify username and password for the web connector that is trying to connect
    /// Signature: public string[] authenticate(string strUserName, string strPassword)
    /// 
    /// IN: 
    /// string strUserName 
    /// string strPassword
    ///
    /// OUT: 
    /// string[] authReturn
    /// Possible values: 
    /// string[0] = ticket
    /// string[1]
    /// - empty string = use current company file
    /// - "none" = no further request/no further action required
    /// - "nvu" = not valid user
    /// - any other string value = use this company file
    /// </summary>
    public string[] authenticate(string strUserName, string strPassword)
    {
        string[] authReturn = new string[2];

        // Generate a random session ticket 
        authReturn[0]= System.Guid.NewGuid().ToString();

        // For simplicity of sample, a hardcoded username/password is used.
        string pwd="password";

        if (strUserName.Trim().Equals("username") && strPassword.Trim().Equals(pwd))
        {
            // An empty string for authReturn[1] means asking QBWebConnector 
            // to connect to the company file that is currently openned in QB
            authReturn[1]="";
        }
        else
        {
            authReturn[1]="nvu";
        }

        return authReturn;
    }

    [ WebMethod(Description="This web method facilitates web service to send request XML to QuickBooks via QBWebConnector",EnableSession=true) ]
    /// <summary>
    /// WebMethod - sendRequestXML()
    /// Signature: public string sendRequestXML(string ticket, string strHCPResponse, string strCompanyFileName, 
    /// string Country, int qbXMLMajorVers, int qbXMLMinorVers)
    /// 
    /// IN: 
    /// int qbXMLMajorVers
    /// int qbXMLMinorVers
    /// string ticket
    /// string strHCPResponse 
    /// string strCompanyFileName 
    /// string Country
    /// int qbXMLMajorVers
    /// int qbXMLMinorVers
    ///
    /// OUT:
    /// string request
    /// Possible values: 
    /// - “any_string” = Request XML for QBWebConnector to process
    /// - "" = No more request XML 
    /// </summary>
    public string sendRequestXML(string ticket, string strHCPResponse, string strCompanyFileName, 
        string qbXMLCountry, int qbXMLMajorVers, int qbXMLMinorVers)
    {
        // QuickBooks has asked for your next request

        ... return a qbXML request here ... 
    }

    [ 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)
    {
        // QuickBooks has sent you a qbXML response to your request 

        ... do something with 'response' here ... 
    }

That example also includes an example .QWC file. Here's some .QWC file documentation and here's a basic example:

<?xml version="1.0"?>
<QBWCXML>
    <AppName>QuickBooks Integrator</AppName>
    <AppID></AppID>
    <AppURL>https://secure.domain.com/quickbooks/server.php</AppURL>
    <AppDescription></AppDescription>
    <AppSupport>http://www.domain.com/quickbooks/support.php</AppSupport>
    <UserName>username</UserName>
    <OwnerID>{90A44FB7-33D9-4815-AC85-AC86A7E7D1EB}</OwnerID>
    <FileID>{57F3B9B6-86F1-4FCC-B1FF-967DE1813D20}</FileID>
    <QBType>QBFS</QBType>
    <Scheduler>
        <RunEveryNMinutes>2</RunEveryNMinutes>
    </Scheduler>
    <IsReadOnly>false</IsReadOnly>
</QBWCXML>