Authenticate Your App
- Once you have your QuickBooks app set up, you will need to authenticate using OAuth2. Obtain the Client ID, Client Secret, and Redirect URI from your QuickBooks app settings.
- Use an OAuth library for PHP, like the League's OAuth2 client, to simplify the implementation of the OAuth2 flow. Install it via Composer:
composer require league/oauth2-client
Set Up OAuth2 Client
- Configure the OAuth2 client with your credentials and the QuickBooks authorization URLs.
use League\OAuth2\Client\Provider\GenericProvider;
$provider = new GenericProvider([
'clientId' => 'YOUR_CLIENT_ID',
'clientSecret' => 'YOUR_CLIENT_SECRET',
'redirectUri' => 'YOUR_REDIRECT_URI',
'urlAuthorize' => 'https://appcenter.intuit.com/connect/oAuth2',
'urlAccessToken' => 'https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer',
'urlResourceOwnerDetails' => 'https://sandbox-quickbooks.api.intuit.com/v3/company/'
]);
Authorize the App
- Redirect the user to QuickBooks' authorization page. Once authorized, they will be redirected back to your specified redirect URI with a code parameter.
header('Location: ' . $provider->getAuthorizationUrl());
exit;
Exchange Code for Access Token
- Once you receive the code, exchange it for an access token.
$accessToken = $provider->getAccessToken('authorization_code', [
'code' => $_GET['code']
]);
Communicate with QuickBooks API
- Use the access token to make API requests. Set headers with the token for authentication.
$companyId = 'YOUR_COMPANY_ID';
$url = "https://sandbox-quickbooks.api.intuit.com/v3/company/$companyId/account/1";
$options = [
'http' => [
'header' => "Authorization: Bearer " . $accessToken->getToken()
]
];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
$data = json_decode($response, true);
Handle Refresh Tokens
- QuickBooks access tokens expire periodically. Use the refresh token to obtain a new access token without user intervention.
if ($accessToken->hasExpired()) {
$newAccessToken = $provider->getAccessToken('refresh_token', [
'refresh_token' => $accessToken->getRefreshToken()
]);
}
Implement Error Handling
- Always ensure to include error handling to manage exceptions or invalid responses from the QuickBooks API using try-catch blocks.
try {
// API request code here
} catch (\Exception $e) {
// Handle exception
echo 'Error: ' . $e->getMessage();
}
Utilize SDKs for Convenience
- Consider using the QuickBooks PHP SDK, which abstracts many of these details, providing an easier interface to work with QuickBooks API.
composer require quickbooks/v3-php-sdk
use QuickBooksOnline\API\DataService\DataService;
$dataService = DataService::Configure(array(
'auth_mode' => 'oauth2',
'ClientID' => "YOUR_CLIENT_ID",
'ClientSecret' => "YOUR_CLIENT_SECRET",
'accessTokenKey' => $accessToken->getToken(),
'refreshTokenKey' => $accessToken->getRefreshToken(),
'QBORealmID' => "YOUR_COMPANY_ID",
'baseUrl' => "Development"
));
$companyInfo = $dataService->getCompanyInfo();
Keep API Documentation Handy
- Always refer to the official QuickBooks API documentation for specifics on API requests, limits, error codes, and more.