douqianni4080 2014-09-26 20:27
浏览 122
已采纳

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

I am using the php sdk 2.0.4 for Quickbooks online API v3 to do Payment related processing. I use the sdk in the following way:

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

The id of the payment I want to get is 12345. Using the API explorer from the Intuit Partnership Platform (IPP) website, I am able to get back a non-null result:

<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>

Using the php sdk, I get a null value instead. With some troubleshooting, I found that an exception was thrown when the xml msg was being deserialized into php object around v3-php-sdk-2.0.4/Dependencies/XSD2PHP/src/com/mikebevz/xsd2php/Bind.php line 112.

The exception message was: 'Property NameValue does not exist. Class IPPIntuitAnyType'. The parsing at that point appears to be processing the <LineEx> element of the xml, but fails to parse it. Could this be a missing data class representing LineEx in the php sdk? or how to best fix this situation?

  • 写回答

1条回答 默认 最新

  • dongxin5054 2014-09-27 17:01
    关注

    Yesterday, I ran into the same problem with this library in a system which has been using the API without issue since March. I assume that Intuit changed something about the XML structure or something, but nobody has updated the "v3-php-sdk" code to match. This post on their community forum from June describes a similar case:

    I was able to apply the suggested workaround by modifying lines 109-113 of Bind.php to be the following:

    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));
    }
    

    It's ugly, but it works, and I couldn't find any other way around it. Note that only the code inside the catch { } block is actually modified.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 请问各位,如何在Jetson nano主控板的Ubuntu系统中安装PyQt5
  • ¥15 MAC安装佳能LBP2900驱动的网盘提取码
  • ¥400 微信停车小程序谁懂的来
  • ¥15 ATAC测序到底用什么peak文件做Diffbind差异分析
  • ¥15 安装ubantu过程中第一个vfat 文件挂载失败
  • ¥20 GZ::CTF如何兼容一些靶机?
  • ¥15 etcd集群部署问题
  • ¥20 谁可以帮我一下问一下各位
  • ¥15 为何重叠加权后love图的SMD与svyCreateTableOne函数绘制基线表的不一致
  • ¥150 求 《小魔指》街机游戏机整合模拟软件