<?php

session_start();
require_once '../vendor/autoload.php';
$infusionsoft = new \Infusionsoft\Infusionsoft(array('clientId' => 'CLIENT_ID', 'clientSecret' => 'CLIENT_SECRET', 'redirectUri' => 'REDIRECT_URL'));
// By default, the SDK uses the Guzzle HTTP library for requests. To use CURL,
// you can change the HTTP client by using following line:
// $infusionsoft->setHttpClient(new \Infusionsoft\Http\CurlClient());
// If the serialized token is available in the session storage, we tell the SDK
// to use that token for subsequent requests.
if (isset($_SESSION['token'])) {
    $infusionsoft->setToken(unserialize($_SESSION['token']));
}
// If we are returning from Infusionsoft we need to exchange the code for an
// access token.
if (isset($_GET['code']) and !$infusionsoft->getToken()) {
    $infusionsoft->requestAccessToken($_GET['code']);
}
function addWithDupCheck($infusionsoft)
{
    $contact = array('FirstName' => 'John', 'LastName' => 'Doe', 'Email' => '*****@*****.**');
    return $infusionsoft->contacts->addWithDupCheck($contact, 'Email');
}
if ($infusionsoft->getToken()) {
    try {
        $cid = addWithDupCheck($infusionsoft);
    } catch (\Infusionsoft\TokenExpiredException $e) {
        // If the request fails due to an expired access token, we can refresh
        // the token and then do the request again.
        $infusionsoft->refreshAccessToken();
        $cid = addWithDupCheck($infusionsoft);
    // not only requested an access token, but also set the token in the current
    // Infusionsoft object, so there's no need for you to do it.
    if ($infusionsoft->getToken()) {
        // Save the serialized token to the current session for subsequent requests
        // NOTE: this can be saved in your database - make sure to serialize the
        // entire token for easy future access
        Session::put('token', serialize($infusionsoft->getToken()));
        // Now redirect the user to a page that performs some Infusionsoft actions
        return redirect()->to('/contacts');
    }
    // something didn't work, so let's go back to the beginning
    return redirect()->to('/');
});
$app->get('/contacts', function () use($app) {
    // Setup a new Infusionsoft SDK object
    $infusionsoft = new \Infusionsoft\Infusionsoft(array('clientId' => getenv('INFUSIONSOFT_CLIENT_ID'), 'clientSecret' => getenv('INFUSIONSOFT_CLIENT_SECRET'), 'redirectUri' => getenv('INFUSIONSOFT_REDIRECT_URL')));
    // Set the token if we have it in storage (in this case, a session)
    $infusionsoft->setToken(unserialize(Session::get('token')));
    try {
        // Retrieve a list of contacts by querying the data service
        $contacts = $infusionsoft->data->query('Contact', 10, 0, ['FirstName' => 'John'], ['FirstName', 'LastName', 'Email', 'ID'], 'FirstName', true);
    } catch (\Infusionsoft\TokenExpiredException $e) {
        // Refresh our access token since we've thrown a token expired exception
        $infusionsoft->refreshAccessToken();
        // We also have to save the new token, since it's now been refreshed.
        // We serialize the token to ensure the entire PHP object is saved
        // and not accidentally converted to a string
        Session::put('token', serialize($infusionsoft->getToken()));
        // Retrieve the list of contacts again now that we have a new token
        $contacts = $infusionsoft->data->query('Contact', 10, 0, ['FirstName' => 'John'], ['FirstName', 'LastName', 'Email', 'ID'], 'FirstName', true);
    }
<?php

session_start();
require_once '../vendor/autoload.php';
$infusionsoft = new \Infusionsoft\Infusionsoft(array('clientId' => '', 'clientSecret' => '', 'redirectUri' => ''));
// In order to verify the endpoint, we need to return the X-Hook-Secret header.
// By default, the autoverify() function will set the proper header, but if you
// pass false as the first argument to autoverify(false) the function will simply
// return the header value for you to set as you please (handy if you are using
// a PHP class or framework that manages requests for you
$infusionsoft->resthooks()->autoverify();
return;
<?php

session_start();
//session_destroy();
require_once '../vendor/autoload.php';
$infusionsoft = new \Infusionsoft\Infusionsoft(array('clientId' => '', 'clientSecret' => '', 'redirectUri' => ''));
// By default, the SDK uses the Guzzle HTTP library for requests. To use CURL,
// you can change the HTTP client by using following line:
// $infusionsoft->setHttpClient(new \Infusionsoft\Http\CurlClient());
// If the serialized token is available in the session storage, we tell the SDK
// to use that token for subsequent requests.
if (isset($_SESSION['token'])) {
    $infusionsoft->setToken(unserialize($_SESSION['token']));
}
// If we are returning from Infusionsoft we need to exchange the code for an
// access token.
if (isset($_GET['code']) and !$infusionsoft->getToken()) {
    $infusionsoft->requestAccessToken($_GET['code']);
    $_SESSION['token'] = serialize($infusionsoft->getToken());
}
function resthookManager($infusionsoft)
{
    $resthooks = $infusionsoft->resthooks();
    // first, create a new task
    $resthook = $resthooks->create(['eventKey' => 'contact.add', 'hookUrl' => 'http://infusionsoft.app/verifyRestHook.php']);
    var_dump($resthook);
    $resthook = $resthooks->find($resthook->id)->verify();
    return $resthook;
}
if ($infusionsoft->getToken()) {
    try {