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 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?