Fala, Dev. Hoje venho mostrar como fazer integração com marketing cloud.
O cenário é o seguinte: O usuário que comprar um produto ou assinatura (Woocommerce Subscription) irá ser incluído na jornada do cliente no marketing cloud para receber email de notificação de bem-vindo.
OBS: Nesse tutorial irei mostrar somente o nosso lado ( o código ), não irei mostrar a configuração dentro do marketing cloud.
Vamos lá:
Pensando em uma estrutura reutilizável, resolvi criar uma classe chamada MarketingCloud. Vamos fazer por parte.
class MarketingCloud {
private $token_url = 'token_url';
private $event_trigger_url = 'event_url';
private $client_id = 'client_id';
private $client_secret = 'secret_id';
}
Nosso código acima é bem simples. Criamos a classe a as propriedades dela como private. Decidi definir as propriedades como private para ter acesso somente dentro da própria classe.
function get_token() {
$token_body = array(
'client_id' => $this->client_id,
'client_secret' => $this->client_secret,
'grant_type' => 'client_credentials'
);
$args = array(
'headers' => array(
'Content-Type' => 'application/json',
'Access-Control-Allow-Origin' => '*'
),
'body' => wp_json_encode($token_body)
);
$remotePost = wp_remote_post( $this->token_url, $args );
if (200 === wp_remote_retrieve_response_code( $remotePost)) {
$respBody = wp_remote_retrieve_body( $remotePost );
$respBody = json_decode( $respBody );
return array(
'url' => $respBody->rest_instance_url,
'token' => $respBody->access_token
);
}
return false;
}
No trecho acima estamos criando uma função para obtermos o token pra em seguida usarmos no post do event.
no $token_body passamos as credenciais.
no $args montamos o headers e o body passando as credenciais. Perceba que usamos o wp_json_encode, essa função Codifiqua uma variável no JSON, com algumas verificações de integridade.
no $remotePost chamamos a função do wp wp_remote_post passando a propriedade $token_url e a variável $args da própria função.
A função wp_remote_post Executa uma solicitação HTTP usando o método POST e retorna sua resposta.
Na linha seguinte, fizemos um if.
o wp_remote_retrieve_response_code Recupere apenas o código de resposta da resposta bruta. Se for 200 entramos no IF.
na variável $respBody é bem simples, usamos a função wp_remote_retrieve_body para recuperar apenas o corpo da resposta.
Na linha debaixo decodificamos com o json_decode.
Em seguida retornamos a Url e o token, o que precisamos =)
Agora, criaremos nossa função que irá fazer toda a mágica, que é integrar com a jornada do marketing cloud.
function send_to_journey($event_definition_key, $email_user, $name_user) {
$token = $this->get_token();
if ($token) {
$data = array(
"ContactKey" => $email_user,
"EventDefinitionKey" => $event_definition_key,
"Data" => array(
"Email" => $email_user,
"Nome" => $name_user
),
);
$args = array(
'headers' => array(
'Authorization' => 'Bearer '.$token['token'],
'Content-Type' => 'application/json',
'charset' => 'UTF-8',
),
'body' => wp_json_encode($data)
);
$remotePost = wp_remote_post( $this->event_trigger_url, $args );
if (200 === wp_remote_retrieve_response_code( $remotePost)) {
return array( 'status' => true, 'msg' => 'Dados enviados com sucesso.' );
}
return array( 'status' => true, 'msg' => 'Erro!' );
}
}
Criamos a função send_to_journey para incluir o usuário na jornada. Note que passamos alguns parametros na função. Esses parametros serão preenchidos dinamicamente no nosso projeto.
Na linha $token = $this->get_token();
Pegamos o token, em seguida verificamos se ele existe. Se o token existir primeiro montamos o array $data preenchendo ele com os parâmetros.
Depois criamos o array $args, com op header e o body.
em seguida, na variável $remotePost enviamos com a propriedade event_trigger_url passando o $args.
Se deu 200, sucesso =)
E agora, como passar os valores dinâmicamente. Vamos lá:
No meu cenário, incluí o cliente na jornada sempre que ele efetuar uma compra de assinatura.
add_action( 'woocommerce_subscription_payment_complete', 'send_marketing_cloud', 10, 2 );
function send_marketing_cloud( $order_id ){
$cloud = new MarketingCloud();
$cloud->send_to_journey($cloud_key_founds_admin, $current_user-
>user_email, ucwords($current_user->display_name));
}
No código acima, quando o usuário efetuar uma nova compra e pagar a assinatura, nós instanciamos a classe MarketingCloud() e passamos todos os dados do usuário e o nome do event pra função send_to_jouerney.
Pronto!
Qualquer dúvida só deixar nos comentários =)