Ich kann einen neuen Marketo-Lead erstellen, indem ich ein HTML-Formular und das angehängte Skript (PHP + Rest API) verwende. Es funktioniert meistens, die Leads erscheinen in Marketo.Marketo REST API - Smart Campaign
Das Problem ist, mein Marketo Setup erfordert neue Leads zu einer bestimmten "Smart Campaign" hinzugefügt werden.
Auf Marketos Rest API documentation, fand ich einen Endpunkt zum Hinzufügen von Leads zu einer Liste, aber nicht zum Hinzufügen zu einer Kampagne. Bist du auf dieses Problem gestoßen?
class UpsertLeads{
//these are the CIN Marketo credentials
public $host = "####";//CHANGE ME
public $clientId = "####";//CHANGE ME
public $clientSecret = "####";//CHANGE ME
public $input; //an array of lead records as objects
public $lookupField; //field used for deduplication
public $action; //operation type, createOnly, updateOnly, createOrUpdate, createDuplicate
public function postData(){
$url = $this->host . "/rest/v1/leads.json?access_token=" . $this->getToken();
$ch = curl_init($url);
$requestBody = $this->bodyBuilder();
//commenting out
//dont need to output this stuff in production
//print_r($requestBody);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('accept: application/json','Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestBody);
curl_getinfo($ch);
$response = curl_exec($ch);
return $response;
}
private function getToken(){
$ch = curl_init($this->host . "/identity/oauth/token?grant_type=client_credentials&client_id=" . $this->clientId . "&client_secret=" . $this->clientSecret);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('accept: application/json',));
$response = json_decode(curl_exec($ch));
curl_close($ch);
$token = $response->access_token;
return $token;
}
private function bodyBuilder(){
$body = new stdClass();
if (isset($this->action)){
$body->action = $this->action;
}
if (isset($this->lookupField)){
$body->lookupField = $this->lookupField;
}
$body->input = $this->input;
$json = json_encode($body);
return $json;
}
private static function csvString($fields){
$csvString = "";
$i = 0;
foreach($fields as $field){
if ($i > 0){
$csvString = $csvString . "," . $field;
}elseif ($i === 0){
$csvString = $field;
}
}
return $csvString;
}
}