PHP经Consolibyte DevKit同步存款到QuickBooks Desktop报3180错误
错误原因说明
你遇到的3180错误和官方示例代码跑不通的核心原因是对DepositAddRq接口的适用场景理解偏差:
接口中<DepositLineAdd>节点下传<PaymentTxnID>的用法,仅用于把「待存款付款列表」中已存在的收款记录,打包合并为一笔银行存款,完全不是用来在银行账户寄存器中直接录入收支的接口。
待存款付款列表里的记录有严格的生成规则:只有你之前通过ReceivePaymentAddRq创建收款单时,将存款目标账户指定为Undeposited Funds(未存资金账户),且该收款单还没被关联到任何已保存的存款单中,才会出现在这个列表里。你传入的测试ID要么是随便编造的无效值,要么对应的收款单根本没进入未存资金账户,自然会触发报错。
匹配你需求的正确实现方案
你要模拟的Banking > Use Register路径下选账户直接录收支的操作,不需要用带PaymentTxnID的存款逻辑,按收支类型选对应接口即可:
- 直接录入存款/收入记录
调用DepositAddRq时,去掉<DepositLineAdd>下的<PaymentTxnID>节点,直接传入对方关联科目、金额、备注信息即可,参考请求结构:
<?qbxml version="2.0"?> <QBXML> <QBXMLMsgsRq onError="stopOnError"> <DepositAddRq requestID="自定义请求ID"> <DepositAdd> <DepositToAccountRef> <FullName>目标登记账户名</FullName> </DepositToAccountRef> <Memo>整笔记录总备注</Memo> <DepositLineAdd> <AccountRef> <FullName>分录对应的关联科目名(比如销售收入科目)</FullName> </AccountRef> <Amount>存款金额(正数)</Amount> <Memo>单条分录备注</Memo> </DepositLineAdd> <!-- 多笔分录可追加多个DepositLineAdd节点 --> </DepositAdd> </DepositAddRq> </QBXMLMsgsRq> </QBXML>
- 直接录入付款/支出记录
调用CheckAddRq接口即可,不需要走存款类接口。如果是不需要打印实体支票的直接账户支出,把<IsToBePrinted>设为false,指定支出账户、对方科目、金额、备注,保存后的效果和你在寄存器里手动录付款完全一致。
补充:打包待存收款场景的前置要求
如果你的业务场景是把零散收款合并存到银行账户,必须先满足两个前置条件再调用DepositAddRq传PaymentTxnID:
- 前置创建收款单时,
<DepositToAccountRef>必须指向Undeposited Funds账户,不能直接指定最终银行账户,否则收款不会进入待存款列表 - 传入的
<PaymentTxnID>必须是未被其他存款单关联过的有效收款单交易ID,不能使用虚构的测试ID。
内容的提问来源于stack exchange,提问作者Prompt
相关产品推荐
相关产品推荐

