Skip to content
Kinsington edited this page Apr 14, 2014 · 18 revisions

An easy to use PHP Infusionsoft SDK

This project is production quality. It is being used in dozens of production applications.

Requirements

This SDK is designed to run on PHP 5.1 or greater.

Documentation

Installation

Copy the Infusionsoft directory to your project.

Copy the config.sample.php file to config.php and put in your Infusionsoft app hostname and api key.

Add any custom fields you are going to use via the API by adding a line to your config.php file. For example, to add the custom field LeadScore to Contact:

Infusionsoft_Contact::addCustomField('_LeadScore');

Examples

Create a new Contact

include('Infusionsoft/infusionsoft.php');
$contact = new Infusionsoft_Contact();
$contact->FirstName = 'John';
$contact->LastName = 'Doe';
$contact->save();

Load a Contact By Id and Change His Name

include('Infusionsoft/infusionsoft.php');
$contact = new Infusionsoft_Contact($id);
$contact->FirstName = 'John Boy';
$contact->LastName = 'Walton';
$contact->save();

Increment A CustomField called _LeadScore

<form>
	ContactId: <input type="text" name="ContactId" value="<?php if(isset($_REQUEST['ContactId'])) echo $_REQUEST['ContactId']; ?>" />
	<input type="submit"/>
</form><br/>
<?php
include('../infusionsoft.php');
if(isset($_REQUEST['ContactId'])){	
	$contact = new Infusionsoft_Contact($_REQUEST['ContactId']);
	$contact->_LeadScore = $contact->_LeadScore + 1;
	$contact->save();
	
	echo 'Lead Score for Contact: ' . $contact->FirstName . ' ' . $contact->LastName . ' is now: ' . $contact->_LeadScore;
}

Add a value to a CustomField Dropdown

$customField = Infusionsoft_CustomFieldService::getCustomField(new Infusionsoft_Contact(), '_LeadScore');

$customField->addValue('New DropDown Option');
$customField->save();

Query for some data

To search a table for records, you'll need to use Infusionsoft_DataService::query(), or DataService::findByField() (not recommended due to performance issues).

For example, if you wanted to pull the first 1,000 order items for a specific order you could do this:

// The ID for the specific order. This is passed as $_GET['orderId'] to
// shopping cart and order form thank you pages.
$orderId = 123;

$orderItems = Infusionsoft_DataService::query(new Infusionsoft_OrderItem(), array('OrderId' => $orderId));

foreach($orderItems as $orderItem) {
    // Each $orderItem will be an Infusionsoft_OrderItem object
}

Or to get a specific contact record:

$contacts = Infusionsoft_DataService::query(new Infusionsoft_Contact(), array('Id' => 2));
$contact = array_shift($contacts);

Create an Order and add a Manual Payment

$contact = new Infusionsoft_Contact();
$contact->FirstName = 'John';
$contact->LastName = 'Doe';
$contact->save();

$invoiceId = Infusionsoft_InvoiceService::createBlankOrder($contact->Id, "An Order", date("Y-m-d H:i:s"));

Infusionsoft_InvoiceService::addOrderItem($invoiceId, $productId, 4, 3.99, 1, 'Order Item', '');
Infusionsoft_InvoiceService::addManualPayment($invoiceId, 3.99, date("Y-m-d H:i:s"), 'API', 'A Manual Payment from the API');

Creating a Subscription (aka: Recurring Order) and charging it to a Credit Card

First, create a credit card

$creditCard = new Infusionsoft_CreditCard();
$creditCard->ContactId = $contact->Id;
$creditCard->BillName = $contact->FirstName . ' ' . $contact->LastName;
$creditCard->FirstName = $contact->FirstName;
$creditCard->LastName = $contact->LastName;
$creditCard->CardNumber = 1234567890123456;
$creditCard->CVV2 = 197;
$creditCard->CardType = 'Visa';
$creditCard->Status = 3; //0: Unknown, 1: Invalid, 2: Deleted, 3: Valid/Good, 4: Inactive
$creditCard->save();

Second, create the Subscription Plan

$subscriptionPlan = new Infusionsoft_SubscriptionPlan();
$subscriptionPlan->ProductId = 5;
$subscriptionPlan->Cycle = 3;
$subscriptionPlan->Frequency = 1;
$subscriptionPlan->Prorate = 0;
$subscriptionPlan->Active = 1;
$subscriptionPlan->PlanPrice = 499.99;
$subscriptionPlan->save();

Third, use addRecurringOrder to create an instance of the Subscription Plan

addReccuringOrder($contactId, $allowDuplicate, $cProgramId, $qty, $price, $allowTax, $merchantAccountId, $creditCardId, $affiliateId, $daysTillCharge, Infusionsoft_App $app = null)

// addReccuringOrder($contactId, $allowDuplicate, $cProgramId, $qty, $price, $allowTax, $merchantAccountId, $creditCardId, $affiliateId, $daysTillCharge, Infusionsoft_App $app = null)
$subscriptionId = Infusionsoft_InvoiceService::addRecurringOrder($contact->Id, false, $subscriptionPlan->Id, 1, 19.99, false, 3, $creditCard->Id, 0, 0);

// Create an invoice for the recurring order.
$invoiceId = Infusionsoft_InvoiceService::createInvoiceForRecurring($subscriptionId);

// Charge the invoice 
// chargeInvoice($invoiceId, $notes, $creditCardId, $merchantAccountId, $bypassCommissions, Infusionsoft_App $app = null)
$charge = Infusionsoft_InvoiceService::chargeInvoice($invoiceId, 'Test payment', $creditCard->Id, 3, false);

Run an Action Sequence

Infusionsoft_ContactService::runActionSequence($contactId, $actionSetId);

Get all Values for a Custom Field

Only certain custom field types have values. If you try to get the list of values for a custom field that doesn't have values, you will get an exception.

//$customField will be an instance of an Infusionsoft_DataFormField
$customField = Infusionsoft_CustomFieldService::getCustomField(new Infusionsoft_Contact(), '_SomeCustomField');
$fieldValues = $customField->getValues();

Adding a custom field value

Only certain custom field types have values. If you try to add a value to a custom field that doesn't have values, you will get an exception.

//$customField will be an instance of an Infusionsoft_DataFormField
$customField = Infusionsoft_CustomFieldService::getCustomField(new Infusionsoft_Contact(), '_SomeCustomField');
$customField->addValue('Some Value');
$customField->save();

Removing a custom field value

Only certain custom field types have values. If you try to add a value to a custom field that doesn't have values, you will get an exception.

//$customField will be an instance of an Infusionsoft_DataFormField
$customField = Infusionsoft_CustomFieldService::getCustomField(new Infusionsoft_Contact(), '_SomeCustomField');
$customField->removeValue('Some Value');
$customField->save();

Saved Searches

Get all Ids from a saved contact search.

$page = 0;
do{
    $results = Infusionsoft_SearchService::getSavedSearchResults($saved_search_id, $saved_search_user_id, $page, array('Id'));
    $all_ids = array_merge($results, $all_ids);
    $page++;
}while(count($results) > 0);

var_dump($all_ids);

Upload a file

Upload /www/picture.jpg to your filebox.

$filename = '/www/picture.jpg';
$data = base64_encode(file_get_contents($filename));

Infusionsoft_FileService::uploadFile(null, 'mysqltuner.pl', $data);

To upload a file to a specific contact's filebox, specify the contact ID (in this example, 8):

$filename = '/www/picture.jpg';
$data = base64_encode(file_get_contents($filename));

Infusionsoft_FileService::uploadFile(8, 'mysqltuner.pl', $data);

Clone this wiki locally