Трудно сказать, не видя журналы (журналы Web Connector в режиме VERBOSE
, а также вывод таблицы SQL quickbooks_log
), что именно здесь не так, но вот как минимум несколько вещей, которые нужно проверить:
1.Вы УВЕРЕНЫ, что не получаете ответ от QuickBooks?
Вы указываете «Проблема не в ответе из QuickBooks», но это может не иметь место в данном случае.
Подтвердили ли вы, что вы не получаете ответа в реальных журналах?Например, если произошла ошибка (например, может быть, клиент или счет не существует), тогда QuickBooks отправит обратно ошибку , но ваша функция ответа не будет вызвана - ошибкавместо этого будет вызван обработчик .
У вас есть что-то подобное в вашем коде?
$errmap = array(
3070 => '_quickbooks_error_stringtoolong', // Whenever a string is too long to fit in a field, call this function: _quickbooks_error_stringtolong()
// ... more error handlers here ...
);
(из https://github.com/consolibyte/quickbooks-php/blob/master/docs/web_connector/example_web_connector.php)
Возможно, вместо функции ответа вызывается обработчик ошибок?
2.Вы не передаете атрибут requestID = "..."
Web Connector использует атрибут XML requestID="..."
, чтобы иметь возможность сопоставлять исходящие запросы с входящими ответами.Вы не используете это, но должно быть.
Изменить это:
<ReceivePaymentAddRq>
На это:
<ReceivePaymentAddRq requestID="' . $requestID . '">
Подробнее:
3.Вы не значения XML кодирования
Для этого:
<Memo>' . $memo . '</Memo>
Если $memo
установлен на bla bla <something> bla bla
, то вы собираетесьв конечном итоге искаженный XML:
<Memo>bla bla <something bla bla</Memo>
Вы должны XML-кодировать эти значения.
4.Переменная $ memo не определена
Вы говорите, что ваш итоговый XML выглядит следующим образом:
<Memo>Paid In Full</Memo>
Но когда я смотрю на ваш код,$memo
is undefined .Это заставляет меня подозревать, что вставленный здесь XML-код , а не - это фактический XML-код, который вы отправляете в QuickBooks.
Где эта переменная установлена на Paid In Full
?Он не устанавливается нигде в вставленном вами коде.
Это также должно вызывать ошибку / предупреждение PHP о неопределенной переменной, что может привести к поломке.
5.Убедитесь, что ваш веб-коннектор находится в режиме VERBOSE
В режиме VERBOSE в веб-коннекторе отображается намного больше данных.Вы должны быть в состоянии легко найти запрос и проанализировать / опубликовать соответствующие журналы.
6.Посмотрите таблицы quickbooks_log и quickbooks_queue
Что они показывают / говорят?
Что такое статус (поле qb_status
) и сообщение в записи в очереди (таблица SQL quickbooks_queue
)?