Как заменить токены на рассылку с помощью REST API в PHP?

У меня есть кампания по электронной почте на Marketo для отправки писем с использованием PHP. на моем шаблоне электронной почты у меня есть токен, {{my.emailBody:default=Body}} Я хотел бы заменить токен моим собственным содержимым электронной почты из моего кода PHP,

Это мой код,

$sample = new SendSampleEmail();
$sample->id = 11111;
$sample->emailAddress = "[email protected]";
print_r($sample->postData());

class SendSampleEmail{
private $host = "https://AAA-AAA-121.mktorest.com";
private $clientId = "dxxxxxxxxxxxxxxxxxxxxx1";
private $clientSecret = "Sxxxxxxxxxxxxxxxxxxxxxxxxxxxxe";
public $id; //id of  to delete
public $emailAddress;//email address to send to
public $textOnly;//boolean option to send text only version
public $leadId;// id of lead to impersonate

public function postData(){
$url = $this->host . "/rest/asset/v1/email/" . $this->id . "/sendSample.json?access_token=" . $this->getToken();
$requestBody  = "&emailAddress=" . $this->emailAddress;
if (isset($this->textOnly)){
$requestBody .= "&textOnly=" . $this->textOnly;
}
if (isset($this->leadId)){
$requestBody .= "&leadId=" . $this->leadId;
}
//print_r($requestBody);

$ch = curl_init($url);
curl_setopt($ch,  CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('accept: 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;
}
}

Используя этот код, я могу успешно инициировать электронные письма, но как я могу заменить значение токена? {{my.emailBody:default=Body}} ?

1

Решение

У меня та же проблема, с которой я пытался использовать токены активов из REST API: http://developers.marketo.com/rest-api/assets/tokens/
изменить значения токена, но это единственная конечная точка, которую я не могу заставить работать. Пожалуйста, дайте мне знать, если вы могли бы заставить это работать.

Тем не менее, я использовал SOAP API для решения этой проблемы:

Вы создаете пакетную кампанию из Marketo внутри программы Marketo, которая содержит токен, который вы хотите изменить, и электронное письмо, которое вы хотите отправить с использованием этого токена.

API-интерфейс SOAP запланирует запуск кампании (вы можете установить текущее время для немедленного запуска) и установить значение для токенов:

public function schedule_campaign($program_name,$campaign_name,$token_name,$token_value)
{
$params = new stdClass();
$params->programName = $program_name;
$params->campaignName = $campaign_name;
$dtzObj = new DateTimeZone("America/New_York");
$dtObj = new DateTime('now', $dtzObj);
$params->campaignRunAt = $dtObj->format(DATE_W3C);

$token = new stdClass();
$token->name = "{{my.".$token_name."}}";
$token->value = $token_value;

$params->programTokenList = array("attrib" => $token);
$params = array("paramsScheduleCampaign" => $params);

$soapClient = new SoapClient(MARKETO_SOAP_ENDPOINT ."?WSDL", self::$auth_options);
try
{
$response = $soapClient->__soapCall('scheduleCampaign', $params,  self::$auth_options, self::$auth_header);
return true;
}
catch(Exception $ex) {
return false;
}
}

ОБНОВИТЬ:
Я нашел способ обновить / заменить токены с помощью REST API:

public function create_token($folder_id,$name,$content,$folder_type = 'Program')
{
$folder_id = intval($folder_id);
$endpoint = 'rest/asset/v1/folder/'.$folder_id.'/tokens';
$url = $this->url . $endpoint . ".json?access_token=" . self::$token."&folderType=".$folder_type."&name=".$name."&type=".  urlencode('rich text')."&value=".urlencode($content);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: x-www-form-urlencoded'));
curl_setopt($ch, CURLOPT_POST, 1);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response);
}
1

Другие решения

Замена токенов работает только с API запросов Campaign и Schedule Campaign, вы не можете заменить мои токены API для отправки примера электронной почты.

1

По вопросам рекламы [email protected]