Консолибайт PHP QuickBooks Web Connector — обмен данными не требуется

Цель: мы пытаемся получать все транзакции раз в час из QuickBooks Desktop для Windows с помощью QuickBooks Web Connector.

Состояние: QuickBooks Web Connector успешно работает с настроенным файлом qwc.

Проблема: QuickBooks Web Connector возвращает зеленое сообщение «Обмен данными не требуется». Я ожидаю, что транзакции будут храниться в log.txt. Ниже мой код. Я подозреваю, что это проблема очередей? Я бы хотел, чтобы все очереди находились в этом файле, который каждый час запускается в QBWC для получения всех транзакций. Любая помощь, которую вы можете оказать, будет принята с благодарностью.

//web_connector.php - called every 60 min from QBWC
$map = array(
'*' => array( '_quickbooks_get_transactions', '_quickbooks_get_transactions_response' ),
);

$log_level = QUICKBOOKS_LOG_DEVELOP;
$soapserver = QUICKBOOKS_SOAPSERVER_BUILTIN;
$handler_options = array(
'deny_concurrent_logins' => false,
'deny_reallyfast_logins' => false,
);
$dsn = 'mysqli://'.$dbUser.':'.$dbPass.'@localhost/'.$dbName;
if (!QuickBooks_Utilities::initialized($dsn))
{
// Initialize creates the neccessary database schema for queueing up requests and logging
QuickBooks_Utilities::initialize($dsn);

// This creates a username and password which is used by the Web Connector to authenticate
QuickBooks_Utilities::createUser($dsn, $user, $pass);
}

//Create a new server and tell it to handle the requests
$Server = new QuickBooks_WebConnector_Server($dsn, $map, $errmap, $hooks,
$log_level, $soapserver, QUICKBOOKS_WSDL, $soap_options, $handler_options,
$driver_options, $callback_options);
$response = $Server->handle(true, true);

function _quickbooks_get_transactions($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $version, $locale)
{
//I want to get all transactions from this QuickBooks file and then insert into a database table on my cloud server.
$xml = '<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="2.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<TransactionQuery requestID="' . $requestID . '">

</TransactionQuery>
</QBXMLMsgsRq>
</QBXML>';

return $xml;
}

function _quickbooks_get_transactions_response($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $xml, $idents)
{
//I want to get all transactions from this QuickBooks file and then insert into a database table on my cloud server.
//store returned data in text file for testing
$fp = fopen('log.txt', 'a+');
fwrite($fp, $xml);
fclose($fp);
return;
}

0

Решение

Это сообщение означает именно то, что оно говорит:

Там нет данных для обмена. Ничего не поделаешь.

Web Connector и этот фреймворк работают с использованием концепции «очереди». Как только очередь опустеет, делать больше нечего, и вы получите это сообщение. Если вы добавите что-то в очередь, то эти элементы будут обрабатываться до тех пор, пока не останется ничего сделать, а затем вы снова получите сообщение «Нет обмена данными…».

Вы ничего не добавили в очередь.

Вы могли бы сделать это с помощью cron, или же путем регистрации функции, которая запускается всякий раз, когда подключается веб-коннектор, и немедленно помещает что-то в очередь. например.:

// An array of callback hooks
$hooks = array(
QuickBooks_WebConnector_Handlers::HOOK_LOGINSUCCESS => '_quickbooks_hook_loginsuccess',     // call this whenever a successful login occurs
);

/**
* Login success hook - perform an action when a user logs in via the Web Connector
*/
function _quickbooks_hook_loginsuccess($requestID, $user, $hook, &$err, $hook_data, $callback_config)
{
// For new users, we need to set up a few things
// Fetch the queue instance
$Queue = QuickBooks_WebConnector_Queue_Singleton::getInstance();

$Queue->enqueue(QUICKBOOKS_IMPORT_TRANSACTION);
}

Вы можете увидеть расширенный пример этого здесь:

Некоторые другие вещи, которые вы можете взять из примера:

  • С большими наборами данных вы не сможете запросить все транзакции всего за один запрос. Вы можете использовать итераторы, как показано в примере GitHub, для постраничной записи записей 25 или 100 за раз для повышения производительности / надежности.
  • Используйте самую высокую версию qbXML, которую поддерживает ваша QuickBooks (вы используете <?qbxml version="2.0"?>)
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]