PHP QuickBooks桌面客户查询

时间:2016-06-02 03:26:57

标签: php quickbooks

我一直在[quickbooks-php][1]使用Consolibyte库。我想在名为CustomerQuery.txt的文件中登录客户查询结果,但我收到的消息如下 -

Version:
Not provided by service

Message:
No data exchange required

Description:
No data to exchange for this application. Job ending.

这是PHP代码 -

<?php
    error_reporting(E_ALL | E_STRICT);
    ini_set('display_errors', true);

    require_once('config.php');
    require_once($QuickBooksFile);

    if (function_exists('date_default_timezone_set'))
    {
        date_default_timezone_set('America/New_York');
    }

    $map = array(
        QUICKBOOKS_QUERY_CUSTOMER => array( '_quickbooks_customer_query_request', '_quickbooks_customer_query_response' ),
    );

    $errmap = array();
    $hooks = array();
    $log_level = QUICKBOOKS_LOG_DEVELOP;
    $soap = QUICKBOOKS_SOAPSERVER_BUILTIN;
    $soap_options = array();
    $handler_options = array(
        'authenticate' => '_quickbooks_custom_auth', 
        'deny_concurrent_logins' => false, 
    );

    if (!QuickBooks_Utilities::initialized($DSN))
    {
        QuickBooks_Utilities::initialize($DSN);
        QuickBooks_Utilities::createUser($DSN, $user, $pass);
        $primary_key_of_your_customer = 5;
        $Queue = new QuickBooks_WebConnector_Queue($DSN);
        $Queue->enqueue(QUICKBOOKS_QUERY_CUSTOMER, $primary_key_of_your_customer);
    }

    $Server = new QuickBooks_WebConnector_Server($DSN, $map, $errmap, $hooks, $log_level, $soap, QUICKBOOKS_WSDL, $soap_options, $handler_options);
    $response = $Server->handle(true, true);

    function _quickbooks_custom_auth($Username, $Password, &$QuickBooksCompanyFile){
        return true;
    }

    function _quickbooks_customer_query_request($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $version, $locale)
    {
        $xml = '<?xml version="1.0" encoding="utf-8"?>
                    <?qbxml version="13.0"?>
                    <QBXML>
                        <QBXMLMsgsRq onError="stopOnError">
                            <CustomerQueryRq requestID="1">
                                <FullName>Kaley Baker</FullName>
                                <OwnerID>0</OwnerID>
                            </CustomerQueryRq>
                        </QBXMLMsgsRq>
                    </QBXML>';
        return $xml;
    }

    function _quickbooks_customer_query_response($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $xml, $idents)
    {
        file_put_contents('CustomerQuery.txt', $xml);
    }

config.php文件内容如下 -

    $UserName='Admin';
    $Password='Test123';
    $DSN='mysqli://root@localhost/qb';
    $QuickBooksCompanyFile = 'E:\QB.QBW';
    $QuickBooksFile='C:\xampp\htdocs\accounting\qb\QuickBooks.php';
    $Email='demo.code@gmail.com';
    $DBHost='localhost';
    $DBUser='root';
    $DBPass='';
    $DBName='qb'; 
    */

1 个答案:

答案 0 :(得分:0)

快速Google或StackOverflow搜索会产生以下链接(连同其他帖子的海洋说同样的事情):

其中说:

  

“无需数据交换”是什么意思?

     

该消息的确含义如下:

     

没有可交换的数据。没有什么可做的。 Web连接器   (以及围绕它构建的大多数框架/开发工具包)使用“队列”概念。   一旦队列为空,没有别的事可做,你就会得到   那条消息。如果您向队列添加内容,那么它将处理   那些项目,直到没有什么可做的,然后你就会得到   “没有数据交换......”再次发出消息。

     

因此,例如,假设您希望每次都建立一个流程   客户是在您的商店内创建的,客户是在其中创建的   QuickBooks的。然后,您需要设置一个过程   客户是在您的商店中创建的,您排队添加的请求   客户到QuickBooks。

查看您的代码,只能调用任何类型的queue方法:

  

$ Queue-&gt; enqueue(QUICKBOOKS_QUERY_CUSTOMER,$ primary_key_of_your_customer);

如果您回到找到此代码的文档/示例:

从这个图书馆:

你会看到一个重要的评论:

    // IMPORTANT NOTE: This particular example of queueing something up will 
    //  only ever happen *once* when these scripts are first run/used. After 
    //  this initial test, you MUST do your queueing in another script. DO NOT 
    //  DO YOUR OWN QUEUEING IN THIS FILE! See 
    //  docs/example_web_connector_queueing.php for more details and examples 
    //  of queueing things up.

Sooooo ......

  • 您排队了需要处理的任何内容吗?看起来不像。
  • 如果有,那么代码在哪里?数据库记录(存储在quickbooks_queue SQL表中)是什么样的?
  • 排队等待,你不会再收到这条消息了。
  • 需要知道如何排队?请参阅代码链接到您的示例:

示例: