До недавнего времени мне удавалось выдвигать заказы на продажу с помощью веб-соединителя Consolibyte PHP. Теперь выкидывает ошибку
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 говорит мне, что я должен ожидать, и я провел его через валидатор XML, найденный в QB SDK, но все говорят, что он правильно сформирован. Я также побежал CustomerQuery
на этот конкретный ListID, и он вернул действительного клиента в 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>
Я обнаружил проблему. К сожалению, никто не смог бы помочь, так как мне пришлось удалить конфиденциальную информацию из примера, где и была проблема.
Проблема заключалась в том, что в элементе Memo был символ Unicode (-). Это привело к тому, что XML был недействительным, несмотря на то, что он проходит при запуске через инструмент qbValidator. Удаление персонажа позволило правильно добавить заказ на продажу.
Других решений пока нет …