2014-09-26 20:27 阅读 121

使用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:

  <Payment domain="QBO" sparse="false">
    <CustomerRef name="XXXXXXXXX">66</CustomerRef>

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

    点赞 8 评论 复制链接分享