использование php sdk 2.0.4 для онлайн-API Quickbooks v3 Не удается проанализировать платеж с LineEx

Я использую php SDK 2.0.4 для Quickbooks онлайн API v3 для обработки платежей.
Я использую SDK следующим образом:

$result = $dataService->FindById(
new IPPPayment( array( 'Id' => 12345 ), true)
);

Идентификатор платежа, который я хочу получить, — 12345. Используя обозреватель API с веб-сайта Intuit Partnership Platform (IPP), я могу получить ненулевой результат:

<IntuitResponse>
<Payment domain="QBO" sparse="false">
<Id>12345</Id>
...
<TxnDate>2013-10-15</TxnDate>
<Line>
<Amount>660.00</Amount>
<LinkedTxn>
<TxnId>216</TxnId>
<TxnType>Invoice</TxnType>
</LinkedTxn>
<LineEx>
<NameValue>
<Name>txnId</Name>
<Value>216</Value>
</NameValue>
<NameValue>
<Name>txnOpenBalance</Name>
<Value>790.00</Value>
</NameValue>
<NameValue>
<Name>txnReferenceNumber</Name>
<Value>7030</Value>
</NameValue>
</LineEx>
</Line>
<CustomerRef name="XXXXXXXXX">66</CustomerRef>
<DepositToAccountRef>51</DepositToAccountRef>
<TotalAmt>660.00</TotalAmt>
<UnappliedAmt>0</UnappliedAmt>
<ProcessPayment>false</ProcessPayment>
</Payment>
</IntuitResponse>

Используя php sdk, я получаю нулевое значение. С некоторыми неполадками я обнаружил, что исключение выдается, когда xml msg десериализуется в объект php вокруг v3-php-sdk-2.0.4/Dependencies/XSD2PHP/src/com/mikebevz/xsd2php/Bind.php строка 112

Сообщение об исключении было следующим: «Свойство NameValue не существует. Класс IPPIntuitAnyType ‘. Анализ в этой точке, кажется, обрабатывает <LineEx> элемент xml, но не может его проанализировать. Может ли это быть отсутствующий класс данных, представляющий LineEx в php SDK? или как лучше исправить эту ситуацию?

2

Решение

Вчера я столкнулся с той же проблемой с этой библиотекой в ​​системе, которая без проблем использует API с марта. Я предполагаю, что Intuit изменил что-то в структуре XML или что-то еще, но никто не обновил код «v3-php-sdk», чтобы он соответствовал. Этот пост на их форуме от июня описывает похожий случай:

Я смог применить предложенный обходной путь, изменив строки 109-113 Bind.php быть следующим:

try {
$propertyDocs = $refl->getProperty($name)->getDocComment();
} catch (\ReflectionException $e) {
if ($name == "NameValue") continue; // QB APIv3 bug!
else throw new \RuntimeException($e->getMessage().". Class ".get_class($model));
}

Это некрасиво, но это работает, и я не мог найти другого пути. Обратите внимание, что только код внутри catch { } блок на самом деле изменен.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]