fix: revert JSON serialization workaround, upgrade SDK to 6.3.1 instead

v2.0.1's useJson() workaround was wrong: the JSON request serializer
silently drops nested single-object fields (e.g. CustomerRef, which
QuickBooks requires), and the JSON response deserializer never returns
a typed entity, so $result->Id is always null downstream. That breaks
every dsCall() site, worse than the bug it was meant to fix.

The actual root cause was that quickbooks/v3-php-sdk 5.4.7 predates
QuickBooks Online's new invoice AllowOnlinePayPalPayment field, so its
XML deserializer throws on responses that include it. SDK 6.3.1
declares the field, so upgrading resolves the original error while
keeping the fully-supported XML path (and closes out the SDK bump
Dependabot already had queued in #3).

Verified: deserializing a response containing AllowOnlinePayPalPayment
throws RuntimeException on 5.4.7 and returns a correctly typed
IPPInvoice (with Id populated) on 6.3.1.
This commit is contained in:
Joel Male
2026-07-27 07:15:59 +03:00
parent 9002e0ebca
commit 32266f6dd5
3 changed files with 5 additions and 33 deletions
+3 -9
View File
@@ -181,12 +181,6 @@ public function hasValidRefreshToken(): bool
* 2) Have valid refresh token, so renew access token & then use
* 3) No existing token, so need to link account
*
* useJson() is applied in every case: the SDK's default XML deserializer reflects
* declared properties on its Data classes and throws when QuickBooks adds a new
* response field the installed SDK version doesn't know about yet. The JSON
* deserializer builds instances from the class's own properties and silently
* ignores unrecognised keys instead, so it tolerates QuickBooks-side schema drift.
*
* @throws SdkException
* @throws ServiceException
*/
@@ -209,7 +203,7 @@ protected function makeDataService(): DataService
'QBORealmID' => $this->token->realm_id,
'refreshTokenKey' => $this->token->refresh_token,
]),
)->useJson();
);
}
// Have refresh, so update access & allow app to run
@@ -220,7 +214,7 @@ protected function makeDataService(): DataService
'QBORealmID' => $this->token->realm_id,
'refreshTokenKey' => $this->token->refresh_token,
]),
)->useJson();
);
$oauth_token = $data_service->getOAuth2LoginHelper()->refreshToken();
@@ -232,7 +226,7 @@ protected function makeDataService(): DataService
}
// Create new...
return DataService::Configure($this->parseDataConfigs())->useJson();
return DataService::Configure($this->parseDataConfigs());
}
/**