Quickbooks 3120来自ReceivePaymentAddRq的错误-php开发工具包

Quickbooks 3120来自ReceivePaymentAddRq的错误-php开发工具包,quickbooks,Quickbooks,我在这里添加了使用php devkit接收付款 问题是quickbooks没有响应,也没有问题。我检查了web连接器日志和php日志文件。 但响应函数从未调用过 我很确定这在几天前还很有效。 我不知道确切的问题是什么 qbxml版本:10.0 请求xml: <?xml version="1.0" encoding="utf-8"?> <?qbxml version="10.0"?> <QBXML> <QBXMLMsgsRq onError="co

我在这里添加了使用php devkit接收付款

问题是quickbooks没有响应,也没有问题。我检查了web连接器日志和php日志文件。 但响应函数从未调用过

我很确定这在几天前还很有效。 我不知道确切的问题是什么

qbxml版本:10.0

请求xml:

<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="10.0"?>
<QBXML>
    <QBXMLMsgsRq onError="continueOnError">
        <ReceivePaymentAddRq requestID="153">
            <ReceivePaymentAdd>
                <CustomerRef >
                    <FullName >Duncan, Dave</FullName>
                </CustomerRef>
                <TxnDate >2023-12-15</TxnDate>
                <RefNumber>Wire</RefNumber>
                <TotalAmount>2585.00</TotalAmount>
                <PaymentMethodRef><FullName>Check</FullName></PaymentMethodRef>
                <Memo>Paid In Full</Memo>
                <AppliedToTxnAdd>
                    <TxnID>28CA9-1702576301</TxnID>
                    <PaymentAmount >2585.00</PaymentAmount>
                </AppliedToTxnAdd>
            </ReceivePaymentAdd>
        </ReceivePaymentAddRq>
    </QBXMLMsgsRq>
</QBXML>
$map = array(
QUICKBOOKS_ADD_RECEIVE_PAYMENT => array( '_quickbooks_payment_add_request', '_quickbooks_payment_add_response' ));

$errmap = array(
        // QUICKBOOKS_IMPORT_CUSTOMER => '_quickbooks_customer_query_error', 
        '*' => '_quickbooks_error_catchall',                // Catch any other errors that might occur
..

$hooks = array(
        QuickBooks_WebConnector_Handlers::HOOK_LOGINSUCCESS => '_quickbooks_sync_to_qb',    // call this whenever a successful login occurs
    );
编辑: 详细日志

20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : qbNationality="US"
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : qbXMLMajorVers="13"
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : qbXMLMinorVers="0"
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : Received from sendRequestXML() following parameter:
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : strRequestXML =
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : XML dump follows: -

<?xml version="1.0" encoding="utf-8"?>
                <?qbxml version="10.0"?>
                <QBXML>
                    <QBXMLMsgsRq onError="continueOnError">
                        <ReceivePaymentAddRq requestID="158">
                            <ReceivePaymentAdd><CustomerRef ><FullName >Duncan, Dave</FullName></CustomerRef><RefNumber>Wire</RefNumber>
                                <TotalAmount>2585.00</TotalAmount>
                                <PaymentMethodRef><FullName>Check</FullName></PaymentMethodRef>
                                <Memo>Paid In Full</Memo>
                                <AppliedToTxnAdd>
                                    <TxnID>28CA9-1702576301</TxnID>
                                    <PaymentAmount >2585.00</PaymentAmount>
                                </AppliedToTxnAdd>
                            </ReceivePaymentAdd>
                        </ReceivePaymentAddRq>
                    </QBXMLMsgsRq>
                </QBXML>

20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : Request xml received.
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.ProcessRequestXML() : Processing request #1
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.ProcessRequestXML() : REQUEST: received from application: size (bytes) = 666
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.ProcessRequestXML() : Sending request to QuickBooks.
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.ProcessRequestXML() : Response received from QuickBooks: size (bytes) = 245
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.ProcessRequestXML() : Sending response back to application.
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : *** Calling receiveResponseXML() with following parameters:
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : wcTicket="35382423-f97d-5fc4-3935-d4a7629367a8"
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : response =
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : XML dump follows: -

<?xml version="1.0" ?>
<QBXML>
<QBXMLMsgsRs>
<ReceivePaymentAddRs requestID="158" statusCode="3120" statusSeverity="Error" statusMessage="Object &quot;28CA9-1702576301&quot; specified in the request cannot be found. " />
</QBXMLMsgsRs>
</QBXML>


20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : hresult=""
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : message=""
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : Received from receiveResponseXML() following parameters:
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : more="100">
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : Done. No more to process.

20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.do_sendRequestXML():qbNationality=“US”
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.do_sendRequestXML():qbXMLMajorVers=“13”
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.do_sendRequestXML():qbXMLMinorVers=“0”
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.do_sendRequestXML():从sendRequestXML()接收以下参数:
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.do_sendRequestXML():strRequestXML=
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.do_sendRequestXML():XML转储如下所示:-
邓肯,戴维维尔
2585
检查
全额支付
28CA9-1702576301
2585
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.do_sendRequestXML():收到请求xml。
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.ProcessRequestXML():处理请求#1
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.ProcessRequestXML():请求:从应用程序接收:大小(字节)=666
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.ProcessRequestXML():向QuickBooks发送请求。
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.ProcessRequestXML():从QuickBooks收到的响应:大小(字节)=245
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.ProcessRequestXML():将响应发送回应用程序。
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.do_receiveResponseXML():***使用以下参数调用receiveResponseXML():
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.do_Receiver ResponseXML():wcTicket=“35382423-f97d-5fc4-3935-d4a7629367a8”
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.do_ReceiverResponseXml():响应=
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.do_ReceiverResponseXML():XML转储如下:-
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.do_ReceiverResponseXML():hresult=“”
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.do_ReceiverResponseXML():message=“”
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.do_receiveResponseXML():从receiveResponseXML()接收以下参数:
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.do_ReceiverResponseXML():more=“100”>
20190327.20:42:17 UTC:QBWebConnector.SOAPWebService.do_ReceiverResponseXML():完成。没有更多的需要处理。

如果看不到日志(Web连接器日志处于
详细
模式,以及
quickbooks\u log
SQL表输出),很难判断这里到底出了什么问题,但至少有几点需要检查:

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 ...
    );
(来自)

可能正在调用错误处理程序而不是响应函数

2。您没有传递requestID=“…”属性

Web连接器在XML中使用
requestID=“…”
属性,以便能够将传出的请求与传入的响应相匹配。你没有用,但应该用

更改此项:

为此:

阅读更多:

3。您不是XML编码值

为此:

”$备忘录。”

如果
$memo
设置为
bla-bla-bla-bla
,那么您将得到格式错误的XML:


bla bla我检查了队列表,qb_状态为“h”,找不到请求中指定的msg字段为“3120:Object”28CA9-1702576301”。仅供参考,我将requsetID添加到qbxml中,上面的xml来自日志文件,这意味着$memo未定义,问题是3120错误代码啊,那么您将收到QuickBooks的回复!我会在这里用一些额外的细节修改我的答案。我检查了发票和交易ID“28CA9-1702576301”,这是正确的。我不知道为什么日志会这样写——“试图处理错误:3120,找不到请求中指定的对象“28CA9-1702576301”。”。请求后,由于此问题,它将进入捕获错误功能。发票是已付款还是未付款?发票上的余额是否小于或等于您申请的金额?发票客户与付款客户是否相同?付款的应收账户是否与发票的应收账户相同?我从这些开始。
function _quickbooks_payment_add_response($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $xml, $idents)
{error_log('_quickbooks_payment_add_response');
    $database = new Database();
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : qbNationality="US"
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : qbXMLMajorVers="13"
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : qbXMLMinorVers="0"
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : Received from sendRequestXML() following parameter:
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : strRequestXML =
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : XML dump follows: -

<?xml version="1.0" encoding="utf-8"?>
                <?qbxml version="10.0"?>
                <QBXML>
                    <QBXMLMsgsRq onError="continueOnError">
                        <ReceivePaymentAddRq requestID="158">
                            <ReceivePaymentAdd><CustomerRef ><FullName >Duncan, Dave</FullName></CustomerRef><RefNumber>Wire</RefNumber>
                                <TotalAmount>2585.00</TotalAmount>
                                <PaymentMethodRef><FullName>Check</FullName></PaymentMethodRef>
                                <Memo>Paid In Full</Memo>
                                <AppliedToTxnAdd>
                                    <TxnID>28CA9-1702576301</TxnID>
                                    <PaymentAmount >2585.00</PaymentAmount>
                                </AppliedToTxnAdd>
                            </ReceivePaymentAdd>
                        </ReceivePaymentAddRq>
                    </QBXMLMsgsRq>
                </QBXML>

20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_sendRequestXML() : Request xml received.
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.ProcessRequestXML() : Processing request #1
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.ProcessRequestXML() : REQUEST: received from application: size (bytes) = 666
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.ProcessRequestXML() : Sending request to QuickBooks.
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.ProcessRequestXML() : Response received from QuickBooks: size (bytes) = 245
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.ProcessRequestXML() : Sending response back to application.
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : *** Calling receiveResponseXML() with following parameters:
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : wcTicket="35382423-f97d-5fc4-3935-d4a7629367a8"
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : response =
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : XML dump follows: -

<?xml version="1.0" ?>
<QBXML>
<QBXMLMsgsRs>
<ReceivePaymentAddRs requestID="158" statusCode="3120" statusSeverity="Error" statusMessage="Object &quot;28CA9-1702576301&quot; specified in the request cannot be found. " />
</QBXMLMsgsRs>
</QBXML>


20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : hresult=""
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : message=""
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : Received from receiveResponseXML() following parameters:
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : more="100">
20190327.20:42:17 UTC   : QBWebConnector.SOAPWebService.do_receiveResponseXML() : Done. No more to process.

$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 ...
    );