This package provides an interface for interacting with the Marketo REST API.
$ composer require eventfarm/marketo-client
Or add the following lines to your composer.json
file:
{
"require": {
"eventfarm/marketo-client": "dev-master"
}
}
$ composer install
In order to get you up and running as easily as possible, we provide default implementations of a REST client and Marketo provider to use in combination with this package.
- We've chosen to use Guzzle for sending HTTP requests
- We've chosen to use The PHP League's Oauth Client and my Marketo provider for Marketo authentication and token refresh.
Our REST client implements the PSR-7 HTTP message interface.
You can either use the provided GuzzleRestClient or have your own that implements our RestClientInterface.
Our default Marketo provider is my Marketo Provider library.
You can either use the provided KristenlkMarketoProvider or use your own that implements our MarketoProviderInterface.
<?php
namespace App;
use EventFarm\Marketo\Oauth\AccessToken;
use EventFarm\Marketo\MarketoClient;
use EventFarm\Marketo\TokenRefreshInterface;
class DemoMarketoClient implements TokenRefreshInterface
{
public function getMarketoClient():MarketoClient
{
if (empty($this->marketo)) {
$this->marketo = MarketoClient::withDefaults(
'ACCESS_TOKEN',
'TOKEN_EXPIRES_IN', // when the current access token expires (in seconds)
'TOKEN_LAST_REFRESH', // when the current access token was last refreshed (as a UNIX timestamp)
'CLIENT_ID',
'CLIENT_SECRET',
'BASE_URL',
$this // TokenRefreshInterface
);
}
return $this->marketo;
}
public function tokenRefreshCallback(AccessToken $token)
{
// CALLBACK FUNCTION TO STORE THE REFRESHED $token TO PERSISTENCE LAYER
}
}
Docs Returns a list of campaign records. Refer to the docs for the full list of options.
public function getCampaigns(array $options = array())
<?php
$demoMarketoClient = new DemoMarketoClient()->getMarketoClient();
$options = [
"programName" => "My Marketo Program",
"batchSize" => 10
];
$campaigns = $demoMarketoClient->campaigns()->getCampaigns($options);
// getCampaigns() can also be called without options.
// $campaigns = { ... }
Docs Passes a set of leads to a trigger campaign to run through the campaign's flow. Refer to the docs for the full list of options.
- A
campaignId
and an array of options that includes aninput
key (mapped to an array that contains arrays of lead data) must be passed totriggerCampaign()
.
public function triggerCampaign(int $campaignId, array $options)
<?php
$demoMarketoClient = new DemoMarketoClient()->getMarketoClient();
$campaignId = 1029;
$options = [
"input" => [
"leads" => [
[
"id" => 1234
]
]
]//, additional options
];
$campaign = $demoMarketoClient->campaigns()->triggerCampaign($campaignId, $options);
// $campaign = { ... }
Docs Returns metadata about lead objects in the target instance, including a list of all fields available for interaction via the APIs.
public function getLeadFields(array $options = array())
<?php
$demoMarketoClient = new DemoMarketoClient()->getMarketoClient();
$leadFields = $demoMarketoClient->leadFields()->getLeadFields();
// $leadFields = { ... }
Docs Syncs a list of leads to the target instance. Refer to the docs for the full list of options.
- An array of options that includes an
input
key (mapped to an array that contains arrays of lead data) must be passed tocreateOrUpdateLeads()
.
public function createOrUpdateLeads(array $options)
By default, Marketo sets the type of sync operation (action
) to createOrUpdate
and the lookupField
to email
. If using those defaults:
- Email is not required; if an email is not included in a lead array, Marketo will create a lead without an email.
- When an email is included, Marketo will search for existing leads with that email. If one is found, Marketo will update the found lead with the data sent; if one is not found, Marketo will create a new lead with the data sent.
<?php
$demoMarketoClient = new DemoMarketoClient()->getMarketoClient();
$options = [
"input" => [
[
"email" => "[email protected]",
"firstName" => "Example1First",
"lastName" => "Example1Last"
],
[
"email" => "[email protected]",
"firstName" => "Example2First",
"lastName" => "Example2Last"
]
]//, additional options
];
$leads = $demoMarketoClient->leads()->createOrUpdateLeads($options);
// $leads = { ... }
Docs Changes the program status of a list of leads in a target program. Refer to the docs for the full list of options.
- A
programId
and an array of options that includes aninput
key (mapped to an array that contains arrays of lead data) and astatus
key (mapped to a program status) must be passed toupdateLeadsProgramStatus()
.
public function updateLeadsProgramStatus(int $programId, array $options)
<?php
$demoMarketoClient = new DemoMarketoClient()->getMarketoClient();
$programId = 1234;
$options = [
"input" => [
[
"id" => 1111
]
],
"status" => "Registered"
];
$leads = $demoMarketoClient->leads()->updateLeadsProgramStatus($programId, $options);
// $leads = { ... }
Docs Retrieves a list of leads that are members of the designated program. Refer to the docs for the full list of options.
- A
programId
must be passed togetLeadsByProgram()
.
public function getLeadsByProgram(int $programId, array $options = array())
<?php
$demoMarketoClient = new DemoMarketoClient()->getMarketoClient();
$programId = 1234;
$options = [
"fields" => 'firstName,lastName,email,middleName,mktoIsPartner';
];
$leads = $demoMarketoClient->leads()->getLeadsByProgram($programId, $options);
// getLeadsByProgram() can also be called without options.
// $leads = { ... }
Docs Returns a list of available partitions in the target instance. Refer to the docs for the full list of options.
public function getPartitions(array $options = array())
<?php
$demoMarketoClient = new DemoMarketoClient()->getMarketoClient();
$partitions = $demoMarketoClient->partitions()->getPartitions();
// $partitions = { ... }
Docs Retrieves the list of accessible programs from the target instance. Refer to the docs for the full list of options.
public function getPrograms(array $options = array())
<?php
$demoMarketoClient = new DemoMarketoClient()->getMarketoClient();
$programs = $demoMarketoClient->programs()->getPrograms();
// $programs = { ... }
Docs Retrieves channels based on the provided name. Refer to the docs for the full list of options.
- A
programChannel
must be passed togetStatuses()
.
public function getStatuses(string $programChannel, array $options = array())
<?php
$demoMarketoClient = new DemoMarketoClient()->getMarketoClient();
$programChannel = "Live Event";
$programs = $demoMarketoClient->statuses()->getStatuses($programChannel);
// $programs = { ... }