EricC
EricC

Reputation: 1439

using php sdk 2.0.4 for Quickbooks online API v3 Cannot parse Payment that has 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?

Upvotes: 2

Views: 492

Answers (1)

Jeff Rowberg
Jeff Rowberg

Reputation: 56

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.

Upvotes: 3

Related Questions