通过Consolibyte Quickbooks PHP DevKit从PHP应用程序传递存款到Quickbooks桌面



我正在实现Keith Palmer的QuickBooks PHP DevKit(https://github.com/consolibyte/quickbooks-php/),以便我的PHP应用程序可以通过Quickbooks Web Connector传递数据到Quickbooks桌面。由于PHP和Quickbooks的变化,我已经解决了几个问题,现在示例web连接器应用程序确实可以工作并成功地将客户传递给Quickbooks。

我的实际目标是通过PHP模拟在Quickbooks中通过相对简单的过程完成的事务:
Banking—>使用Register,(选择帐户),并输入付款或存款金额,帐户,备忘录,并单击记录。

我认为这(至少存款部分)将通过在PHP DevKit中使用QUICKBOOKS_ADD_DEPOSIT方法通过DepositAddRq来完成。现在,我正在重写内容以使用此方法,我收到以下错误:

3180:储蓄存款时出现错误。QuickBooks错误消息:给定的记录号不在"付款到存款"列表中。

SOAP服务器正在生成以下XML:

<?qbxml version="2.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<DepositAddRq requestID="19">
<DepositAdd>
<DepositToAccountRef>
<FullName>test account</FullName>
</DepositToAccountRef>
<Memo>Memo</Memo>
<DepositLineAdd>
<PaymentTxnID>3D95-1071497093</PaymentTxnID>
</DepositLineAdd>
</DepositAdd>
</DepositAddRq>
</QBXMLMsgsRq>
</QBXML>

我收到Quickbooks的XML响应:

<?xml version="1.0" ?>
<QBXML>
<QBXMLMsgsRs>
<DepositAddRs requestID="19" statusCode="3180" statusSeverity="Error" statusMessage="There was an error when saving a Deposit line..  QuickBooks error message: The given record number is not in the Payments to Deposit list." />
</QBXMLMsgsRs>
</QBXML>

当传递QuickBooks SDK 15样例XML代码为DepositAddRq时,我收到相同的错误:

<QBXMLMsgsRq onError="stopOnError">
<DepositAddRq requestID="0">
<DepositAdd>
<DepositToAccountRef>
<FullName>Checking</FullName>
</DepositToAccountRef>
<DepositLineAdd>
<PaymentTxnID>3D95-1071497099</PaymentTxnID>
</DepositLineAdd>
</DepositAdd>
</DepositAddRq>
</QBXMLMsgsRq>
</QBXML>

我是否应该使用一种完全不同的方法来记录账户的存款和付款,是否需要额外的步骤,或者我这样做是完全错误的?

提前感谢!

这有点棘手,但如果你看一下文档,你可以看到它想要什么:

  • https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/qbdesktop/depositadd

具体来说,看这一节:

<DepositLineAdd defMacro="MACROTYPE"> <!-- optional, may repeat -->
<!-- BEGIN OR -->
<PaymentTxnID  useMacro="MACROTYPE">IDTYPE</PaymentTxnID> <!-- required -->
<PaymentTxnLineID  useMacro="MACROTYPE">IDTYPE</PaymentTxnLineID> <!-- optional -->
<OverrideMemo >STRTYPE</OverrideMemo> <!-- optional -->
<OverrideCheckNumber >STRTYPE</OverrideCheckNumber> <!-- optional -->
<OverrideClassRef> <!-- optional -->
<ListID >IDTYPE</ListID> <!-- optional -->
<FullName >STRTYPE</FullName> <!-- optional -->
</OverrideClassRef>
<!-- OR -->
<EntityRef> <!-- optional -->
<ListID >IDTYPE</ListID> <!-- optional -->
<FullName >STRTYPE</FullName> <!-- optional -->
</EntityRef>
<AccountRef> <!-- required -->
<ListID >IDTYPE</ListID> <!-- optional -->
<FullName >STRTYPE</FullName> <!-- optional -->
</AccountRef>
<Memo >STRTYPE</Memo> <!-- optional -->
<CheckNumber >STRTYPE</CheckNumber> <!-- optional -->
<PaymentMethodRef> <!-- optional -->
<ListID >IDTYPE</ListID> <!-- optional -->
<FullName >STRTYPE</FullName> <!-- optional -->
</PaymentMethodRef>
<ClassRef> <!-- optional -->
<ListID >IDTYPE</ListID> <!-- optional -->
<FullName >STRTYPE</FullName> <!-- optional -->
</ClassRef>
<Amount >AMTTYPE</Amount> <!-- optional -->
<!-- END OR -->
</DepositLineAdd>

这意味着您可以提供到付款的链接(<PaymentTxnID>)您可以提供到帐户的链接(<AccountRef>)。

你在文章中描述的内容和你在XML中显示的内容是两件不同的事情。在您的XML中,您正在尝试链接到现有的未存入的付款(例如,您正在尝试将现有的付款标记为已存入银行):

<PaymentTxnID>3D95-1071497099</PaymentTxnID>

但是你描述的指定Account和Memo:

... (Select Account), and entering either a Payment or a Deposit amount, an Account, a Memo, and Clicking Record.

如果您试图模拟输入Account、Memo等,那么您需要提供XML来指定Account、Memo等。例如:

<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="15.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<DepositAddRq>
<DepositAdd>
<DepositToAccountRef>
<FullName>Your Bank Account</FullName>
</DepositToAccountRef>
<DepositLineAdd>
<AccountRef>
<FullName>Account Name Here</FullName>
</AccountRef>
<Memo>Memo test</Memo>
<Amount>100.00</Amount>

</DepositLineAdd>
</DepositAdd>
</DepositAddRq>
</QBXMLMsgsRq>
</QBXML>

最新更新