Integrando o WooCommerce com o Journey Builder do Marketing Cloud [ WordPress ]

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 =)

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *