直到最近,我已经能够使用Consolibyte PHP Web连接器推销销售订单了。现在,它正在抛出错误
0x80040400:QuickBooks在解析提供的XML文本流时发现错误。
我删除了XML的所有可选元素,但它仍然抛出错误。我能产生错误的最简单的XML就是:
<?xml version="1.0" encoding="UTF-8"?>
<?qbxml version="13.0"?>
<QBXML>
<QBXMLMsgsRq onError="continueOnError">
<SalesOrderAddRq>
<SalesOrderAdd>
<CustomerRef>
<ListID>80002DBC-1342467727</ListID>
</CustomerRef>
</SalesOrderAdd>
</SalesOrderAddRq>
</QBXMLMsgsRq>
</QBXML>
我已将此与OSR告诉我的内容进行了比较,并通过QB SDK中的XML验证器进行了比较,但一切都说它结构良好。我还在特定的ListID上运行了CustomerQuery
,它在Quickbooks中返回了一个有效的客户。任何想法在这里可能是错的?
编辑:尽管OSR说除了CustomerRef
以外的所有元素都是可选的,我从最新的SDK(我之前认为我之前使用过)中重新验证了验证器,并且它说XML期望所有这些东西。以下是验证器说的有效的完整XML,但仍然会抛出错误:
<?xml version="1.0" encoding="UTF-8"?>
<?qbxml version="13.0"?>
<QBXML>
<QBXMLMsgsRq onError="continueOnError">
<SalesOrderAddRq>
<SalesOrderAdd>
<CustomerRef>
<ListID>80002DBC-1342467727</ListID>
</CustomerRef>
<TxnDate>2014-12-12</TxnDate>
<RefNumber>14942</RefNumber>
<BillAddress>
<Addr1>redacted</Addr1>
<Addr2>redacted</Addr2>
<City>redacted</City>
<State>IL</State>
<PostalCode>12345</PostalCode>
</BillAddress>
<ShipAddress>
<Addr1>redacted</Addr1>
<Addr2>redacted</Addr2>
<City>redacted</City>
<State>IL</State>
<PostalCode>12345</PostalCode>
</ShipAddress>
<DueDate>2015-02-20</DueDate>
<Memo>redacted</Memo>
<SalesOrderLineAdd>
<ItemRef>
<ListID>8000418C-1393430847</ListID>
</ItemRef>
<Quantity>61</Quantity>
<Rate>334.00</Rate>
</SalesOrderLineAdd>
<SalesOrderLineAdd>
<ItemRef>
<ListID>80003E9F-1382701326</ListID>
</ItemRef>
<Quantity>61</Quantity>
</SalesOrderLineAdd>
<SalesOrderLineAdd>
<ItemRef>
<ListID>8000490D-1417183681</ListID>
</ItemRef>
<Quantity>50</Quantity>
<Rate>349.00</Rate>
</SalesOrderLineAdd>
<SalesOrderLineAdd>
<ItemRef>
<ListID>80003E9F-1382701326</ListID>
</ItemRef>
<Quantity>50</Quantity>
</SalesOrderLineAdd>
<SalesOrderLineAdd>
<ItemRef>
<ListID>80003D0C-1377271839</ListID>
</ItemRef>
<Quantity>111</Quantity>
</SalesOrderLineAdd>
<SalesOrderLineAdd>
<ItemRef>
<FullName>Subtotal</FullName>
</ItemRef>
</SalesOrderLineAdd>
<SalesOrderLineAdd>
<ItemRef>
<ListID>80004710-1409243586</ListID>
</ItemRef>
</SalesOrderLineAdd>
</SalesOrderAdd>
</SalesOrderAddRq>
</QBXMLMsgsRq>
</QBXML>
答案 0 :(得分:4)
我发现了这个问题。不幸的是,没有人能够提供帮助,因为我必须从示例中删除敏感信息,这就是问题所在。
问题在于Memo元素中有一个unicode字符( - )。这导致XML无效,尽管它在通过qbValidator工具运行时通过。删除字符允许正确添加销售订单。