Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

QuickBooks API (php) Integration

Tags:

I am a very new to QuickBooks. I have created a trial account in Quick Books and I want to add customers, create invoices or similar sort of things to my account. I have downloaded the php SDK from github. Now I have no Idea how to start, from where to start to add the customer to my account after the customer make the order from my website. Can anyone help me with some detail documentation or some examples so that I can move forward. I have no knowledge about the web app connector. I am totally new. Thanks..

like image 789
Yunus Aslam Avatar asked Dec 05 '13 07:12

Yunus Aslam


People also ask

How does QuickBooks integrate with PHP?

Basically you'll create a . QWC file which you'll load into the QuickBooks Web Connector (Start > All Programs > QuickBooks > Web Connector). That . QWC file will point to a PHP script which negotiates the connection between QuickBooks and PHP.

Does QuickBooks have API integration?

The QuickBooks Online Accounting API lets your apps utilize key features and data in QuickBooks Online. Individual API entities correspond with forms, lists, and other tools in the customer-facing QuickBooks Online UI.

How do I integrate QuickBooks into my website?

To do this, open your Web host's control panel and log in with administrator rights. Click the “Operations” tab, and then click “QuickBooks.” Click the “Account Settings” option, then check the box in front of the “Import Inventory on the Next Sync” option. Check the box for “Export Orders” and click the “Save” button.

Is QuickBooks API free?

The QuickBooks Online API is FREE.


2 Answers

This is going to be a two-part answer, because you didn't specify if you're using QuickBooks ONLINE, or QuickBooks for WINDOWS.

The process will be DIFFERENT depending on which you're using, so pay attention to the bold headers below:

For QuickBooks ONLINE:

If you're using the open source QuickBooks PHP DevKit from GitHub, then the best place to start is the QuickBooks Online with PHP quick-start guide.

  • http://www.consolibyte.com/docs/index.php/PHP_DevKit_for_QuickBooks_-_Intuit_Partner_Platform_Quick-Start

The very first thing you'll have to do is register your app with Intuit. When you do this, Intuit will give you these variables:

  • app token
  • consumer secret
  • consumer key

You will substitute these variables into the config.php file that is included in the example. You'll also update these values to point to your app:

  • oauth url (e.g. your-site.com/path/to/example/oauth.php)
  • success url (e.g. your-site.com/path/to/example/success.php)
  • menu url (e.g. your-site.com/path/to/example/menu.php)
  • dsn (your database credentails for OAuth token storage)

Beyond that, you can leave all other variables in config.php at their defaults.

If you then visit the index.php file, it will prompt you to connect to QuickBooks. You can connect, and then visit the example files. Here are some examples of adding customers/orders to QuickBooks Online:

  • QuickBooks Online - add customer with PHP
  • QuickBooks Online - add invoice with PHP

The code ends up looking something like:

    $CustomerService = new QuickBooks_IPP_Service_Customer();

    $Customer = new QuickBooks_IPP_Object_Customer();
    $Customer->setTitle('Mr');
    $Customer->setGivenName('Keith');
    $Customer->setMiddleName('R');
    $Customer->setFamilyName('Palmer');
    $Customer->setDisplayName('Keith R Palmer Jr ' . mt_rand(0, 1000));

    // Phone #
    $PrimaryPhone = new QuickBooks_IPP_Object_PrimaryPhone();
    $PrimaryPhone->setFreeFormNumber('860-532-0089');
    $Customer->setPrimaryPhone($PrimaryPhone);

    // Bill address
    $BillAddr = new QuickBooks_IPP_Object_BillAddr();
    $BillAddr->setLine1('72 E Blue Grass Road');
    $BillAddr->setLine2('Suite D');
    $BillAddr->setCity('Mt Pleasant');
    $BillAddr->setCountrySubDivisionCode('MI');
    $BillAddr->setPostalCode('48858');
    $Customer->setBillAddr($BillAddr);

    if ($resp = $CustomerService->add($Context, $realm, $Customer))
    {
            print('Our new customer ID is: [' . $resp . ']');
    }

To implement additional functionality, you'll find other examples included in the code.

The objects/methods available also mirror Intuit's documentation so you'll want to look at that.

For QuickBooks for WINDOWS:

For QuickBooks for Windows, you'll use the Web Connector. Again, start with the open source QuickBooks PHP DevKit from GitHub. Use the QuickBooks for Windows + PHP quick-start guide instead.

That will walk you through setting up a simple Web Connector service which adds test customers to QuickBooks.

Basically you'll create a .QWC file which you'll load into the QuickBooks Web Connector (Start > All Programs > QuickBooks > Web Connector). That .QWC file will point to a PHP script which negotiates the connection between QuickBooks and PHP. All you have to do in that example script is swap this variable:

  • $dsn (point it to your own database)

For each new piece of functionality you want to add, you'll end up writing a new request and response function, as detailed in the QuickBooks Web Connector + PHP docs.

Your code will end up looking something like:

function _quickbooks_customer_add_request($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $version, $locale)
{
        // You'd probably do some database access here to pull the record with 
        //        ID = $ID from your database and build a request to add that particular 
        //        customer to QuickBooks. 
        //        
        // So, when you implement this for your business, you'd probably do 
        //        something like this...: 

        /*
        // Fetch your customer record from your database
        $record = mysql_fetch_array(mysql_query("SELECT * FROM your_customer_table WHERE your_customer_ID_field = " . (int) $ID));

        // Create and return a qbXML request
        $qbxml = '<?xml version="1.0" encoding="utf-8"?>
                <?qbxml version="2.0"?>
                <QBXML>
                        <QBXMLMsgsRq onError="stopOnError">
                                <CustomerAddRq requestID="' . $requestID . '">
                                        <CustomerAdd>
                                                <Name>' . $record['your_customer_name_field'] . '</Name>
                                                <CompanyName>' . $record['your_customer_company_field'] . '</CompanyName>

                                                ... lots of other customer related fields ...

                                        </CustomerAdd>
                                </CustomerAddRq>
                        </QBXMLMsgsRq>
                </QBXML>';

        return $qbxml;
        */

        // But we're just testing, so we'll just use a static test request:

        $xml = '<?xml version="1.0" encoding="utf-8"?>
                <?qbxml version="2.0"?>
                <QBXML>
                        <QBXMLMsgsRq onError="stopOnError">
                                <CustomerAddRq requestID="' . $requestID . '">
                                        <CustomerAdd>
                                                <Name>ConsoliBYTE, LLC (' . mt_rand() . ')</Name>
                                                <CompanyName>ConsoliBYTE, LLC</CompanyName>
                                                <FirstName>Keith</FirstName>
                                                <LastName>Palmer</LastName>
                                                <BillAddress>
                                                        <Addr1>ConsoliBYTE, LLC</Addr1>
                                                        <Addr2>134 Stonemill Road</Addr2>
                                                        <City>Mansfield</City>
                                                        <State>CT</State>
                                                        <PostalCode>06268</PostalCode>
                                                        <Country>United States</Country>
                                                </BillAddress>
                                                <Phone>860-634-1602</Phone>
                                                <AltPhone>860-429-0021</AltPhone>
                                                <Fax>860-429-5183</Fax>
                                                <Email>[email protected]</Email>
                                                <Contact>Keith Palmer</Contact>
                                        </CustomerAdd>
                                </CustomerAddRq>
                        </QBXMLMsgsRq>
                </QBXML>';

        return $xml;
}

You can find additional qbXML reference using the QuickBooks OSR.

We also provide a wiki with lots of example qbXML requests that you can use.

like image 117
Keith Palmer Jr. Avatar answered Sep 24 '22 12:09

Keith Palmer Jr.


From the SDK,use example_ipp_ids_6.php for adding customers.

Here is the link to the full code on GitHub:

  • GitHub - open source QuickBooks PHP DevKit

And a quick-start guide:

  • QuickBooks ONLINE quick-start with PHP

  • QuickBooks for WINDOWS quick-start with PHP

example_ipp_ids_6.php

 <?php

// Turn on some error reporting
error_reporting(E_ALL);
ini_set('display_errors', 1);

header('Content-Type: text/plain');

/**
 * Require the QuickBooks library
 */
require_once dirname(__FILE__) . '/../QuickBooks.php';

/**
 * Require some IPP/OAuth configuration data
 */
require_once dirname(__FILE__) . '/example_ipp_config.php';


// Set up the IPP instance
$IPP = new QuickBooks_IPP($dsn);

// Set up our IntuitAnywhere instance
$IntuitAnywhere = new QuickBooks_IPP_IntuitAnywhere($dsn, $encryption_key, $oauth_consumer_key, $oauth_consumer_secret);

// Get our OAuth credentials from the database
$creds = $IntuitAnywhere->load($the_username, $the_tenant);

// Tell the framework to load some data from the OAuth store
$IPP->authMode(
    QuickBooks_IPP::AUTHMODE_OAUTH, 
    $the_username, 
    $creds);

// Print the credentials we're using
//print_r($creds);

// This is our current realm
$realm = $creds['qb_realm'];

// Load the OAuth information from the database
if ($Context = $IPP->context())
{
    // Set the DBID
    $IPP->dbid($Context, 'something');

    // Set the IPP flavor
    $IPP->flavor($creds['qb_flavor']);

    // Get the base URL if it's QBO
    if ($creds['qb_flavor'] == QuickBooks_IPP_IDS::FLAVOR_ONLINE)
    {
        $IPP->baseURL($IPP->getBaseURL($Context, $realm));
    }

    print('Base URL is [' . $IPP->baseURL() . ']' . "\n\n");

    $CustomerService = new QuickBooks_IPP_Service_Customer();

    $Customer = new QuickBooks_IPP_Object_Customer();
    $Customer->setName('Willy Wonka #' . mt_rand(0, 1000));
    $Customer->setGivenName('Willy');
    $Customer->setFamilyName('Wonka');

    $resp = $CustomerService->add($Context, $realm, $Customer);

    print_r($Customer);
    print('New customer is [' . $resp . ']' . "\n\n");

    print("\n\n\n\n");
    print('Request [' . $IPP->lastRequest() . ']');
    print("\n\n\n\n");
    print('Response [' . $IPP->lastResponse() . ']');
    print("\n\n\n\n");
}
else
{
    die('Unable to load a context...?');
}

Configure your keys and username in example_ipp_config.php

<?php

/**
 * Intuit Partner Platform configuration variables
 * 
 * See the scripts that use these variables for more details. 
 * 
 * @package QuickBooks
 * @subpackage Documentation
 */

// Your OAuth token (Intuit will give you this when you register an Intuit Anywhere app)
$token = 'c640731cb411db4132b8475b4198a7efae08';

// Your OAuth consumer key and secret (Intuit will give you both of these when you register an Intuit app)
// 
// IMPORTANT:
//  To pass your tech review with Intuit, you'll have to AES encrypt these and 
//  store them somewhere safe. 
// 
// The OAuth request/access tokens will be encrypted and stored for you by the 
//  PHP DevKit IntuitAnywhere classes automatically. 
$oauth_consumer_key = 'qyprdzUiOLX60UK4cMwYhg1QVGfOGT';
$oauth_consumer_secret = '32mIB75pqqPreOADcxRvryC0fBduJhnRr52JfUdf';

// This is the URL of your OAuth auth handler page
$this_url = 'http://localhost/quick/docs/example_ipp_oauth.php';

// This is the URL to forward the user to after they have connected to IPP/IDS via OAuth
$that_url = 'http://localhost/quick/docs/example_ipp_ids_6.php';

// This is a database connection string that will be used to store the OAuth credentials 
// $dsn = 'pgsql://username:password@hostname/database';
// $dsn = 'mysql://username:password@hostname/database';
$dsn = 'mysql://root:@localhost/quickbooks';        

// You should set this to an encryption key specific to your app
$encryption_key = 'abcd1234';

// The user that's logged in
$the_username = '[email protected]';

// The tenant that user is accessing within your own app
$the_tenant = 12345;

// Initialize the database tables for storing OAuth information
if (!QuickBooks_Utilities::initialized($dsn))
{
    // Initialize creates the neccessary database schema for queueing up requests and logging
    QuickBooks_Utilities::initialize($dsn);
}   
like image 22
user3040610 Avatar answered Sep 23 '22 12:09

user3040610