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 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决