使用php sdk 2.0.4 for Quickbooks online API v3无法解析具有LineEx的付款

时间:2014-09-26 20:27:29

标签: php quickbooks quickbooks-online

我使用php sdk 2.0.4 for Quickbooks online API v3进行付款相关处理。 我用以下方式使用sdk:

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

我想要获得的付款ID是12345.使用Intuit Partnership Platform(IPP)网站上的API资源管理器,我可以获得非空结果:

<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被反序列化到v3-php-sdk-2.0.4/Dependencies/XSD2PHP/src/com/mikebevz/xsd2php/Bind.php行112周围的php对象时抛出异常。

异常消息是:&#39;属性NameValue不存在。类IPPIntuitAnyType&#39;。此时的解析似乎正在处理xml的<LineEx>元素,但无法解析它。这可能是在php sdk中代表LineEx的缺失数据类吗?或者如何最好地解决这种情况?

1 个答案:

答案 0 :(得分:3)

昨天,我在自3月以来一直使用API​​而没有问题的系统中遇到了与此库相同的问题。我假设Intuit改变了一些关于XML结构的东西,但没有人更新“v3-php-sdk”代码来匹配。 6月份社区论坛上的这篇文章描述了一个类似的案例:

我能够通过将 Bind.php 的第109-113行修改为以下内容来应用建议的解决方法:

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 { }块中的代码。