Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Faustini Afirma

Integração API MailChimp

Recommended Posts

Boa tarde galera, estou tentando adicionar um formulário em meu site para inclusão de assinantes na minha lista do mailchimp, mas de forma direta sem a necessidade do assinante confirmar o e-mail. Segui a documentação da própria mailchimp, mas não sei o que está acontecendo, pois ao preencher os campos do formulário, apenas o campo e-mail é enviado para a lista.

 

Vejam só como está o código do meu formulário:

<link href="//cdn-images.mailchimp.com/embedcode/classic-081711.css" rel="stylesheet" type="text/css">
<style type="text/css">
	#mc_embed_signup{background:#febf0f; clear:left; font:14px Helvetica,Arial,sans-serif; }
	/* Add your own MailChimp form style overrides in your site stylesheet or in this style block.
	   We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */
</style>
<div id="mc_embed_signup">
<form action="http://www.xprintbh.com.br/emkt/agencia/mcapi_listSubscribe.php" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" novalidate>
	<h2>ASSINE AGORA E RECEBA NOSSAS DICAS!</h2>
<div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
<div class="mc-field-group">
	<label for="mce-FNAME">Nome </label>
	<input type="text" value="" name="FNAME" class="" id="mce-FNAME">
</div>
<div class="mc-field-group">
	<label for="mce-EMAIL">Email  <span class="asterisk">*</span>
</label>
	<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
</div>
<div class="mc-field-group">
	<label for="mce-EMPRESA">Empresa </label>
	<input type="text" value="" name="EMPRESA" class="" id="mce-EMPRESA">
</div>
<div class="mc-field-group">
	<label for="mce-FONE">Telefone </label>
	<input type="text" value="" name="FONE" class="" id="mce-FONE">
</div>
	<div id="mce-responses" class="clear">
		<div class="response" id="mce-error-response" style="display:none"></div>
		<div class="response" id="mce-success-response" style="display:none"></div>
	</div>    <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
    <div style="position: absolute; left: -5000px;"><input type="text" name="b_d13991500b3d55d05235a8d84_53dcc72997" value=""></div>
	<div class="clear"><input type="submit" value="ASSINAR !" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
</form>
</div>

Código da API:

 

<?php

    //API Key - see http://admin.mailchimp.com/account/api

    $apikey = '61da54cd966ed05826d22b1e82bdddd7-us3';

    

    // A List Id to run examples against. use lists() to view all

    // Also, login to MC account, go to List, then List Tools, and look for the List ID entry

    $listId = '53dcc72997';

    

    // A Campaign Id to run examples against. use campaigns() to view all

    /*$campaignId = 'YOUR MAILCHIMP CAMPAIGN ID - see campaigns() method';*/



    //some email addresses used in the examples:

    //$my_email = 'INVALID@example.org';

    //$boss_man_email = 'INVALID@example.com';



    //just used in xml-rpc examples

    $apiUrl = 'https://us3.api.mailchimp.com/2.0/';

    

?>

Alguém já trabalhou com integração com o mailchimp? Sabe me dizer onde está problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue o código Evandro:

 

<?php
/**
This Example shows how to Subscribe a New Member to a List using the MCAPI.php 
class and do some basic error checking.
**/
require_once 'inc/MCAPI.class.php';
require_once 'inc/config.inc.php'; //contains apikey

$api = new MCAPI($apikey);

//get the fill name, telephone and enterprise by $_POST method from your form
$merge_vars = array($_POST["MMERGE1"], $_POST["MMERGE2"], $_POST["MMERGE3"]);

//get the emailID of user by either $_GET or $_POST method from your form
$subscriberemailID = $_POST["EMAIL"];

// By default this sends a confirmation email - you will not see new members
// until the link contained in it is clicked!
$retval = $api->listSubscribe($listId, $subscriberemailID, $merge_vars);

if ($api->errorCode){
	echo "Unable to load listSubscribe()!\n";
	echo "\tCode=".$api->errorCode."\n";
	echo "\tMsg=".$api->errorMessage."\n";
} else {
    echo "<meta HTTP-EQUIV='Refresh' CONTENT='0;URL=http://www.xprintbh.com.br/decoradores/'>";
}

?>


Errata, o código correto é esse:

 

<?php
/**
This Example shows how to Subscribe a New Member to a List using the MCAPI.php 
class and do some basic error checking.
**/
require_once 'inc/MCAPI.class.php';
require_once 'inc/config.inc.php'; //contains apikey

$api = new MCAPI($apikey);

//get the fill name, telephone and enterprise by $_POST method from your form
$merge_vars = array($_POST["FNAME"], $_POST["EMPRESA"], $_POST["FONE"]);

//get the emailID of user by either $_GET or $_POST method from your form
$subscriberemailID = $_POST["EMAIL"];

// By default this sends a confirmation email - you will not see new members
// until the link contained in it is clicked!
$retval = $api->listSubscribe($listId, $subscriberemailID, $merge_vars);

if ($api->errorCode){
	echo "Unable to load listSubscribe()!\n";
	echo "\tCode=".$api->errorCode."\n";
	echo "\tMsg=".$api->errorMessage."\n";
} else {
    echo "<meta HTTP-EQUIV='Refresh' CONTENT='0;URL=http://www.xprintbh.com.br/agencia/'>";
}
?>


Segue também o código da função listSubscriber, dentro do arquivo MCAPI.class.php:

 

<?php
class MCAPI {
    var $version = "1.3";
    var $errorMessage;
    var $errorCode;

...

function listSubscribe($id, $email_address, $merge_vars=NULL, $email_type='html', $double_optin=false, $update_existing=false, $replace_interests=true, $send_welcome=false) {
        $params = array();
        $params["id"] = $id;
        $params["email_address"] = $email_address;
        $params["merge_vars"] = $merge_vars;
        $params["email_type"] = $email_type;
        $params["double_optin"] = $double_optin;
        $params["update_existing"] = $update_existing;
        $params["replace_interests"] = $replace_interests;
        $params["send_welcome"] = $send_welcome;
        return $this->callServer("listSubscribe", $params);
    }

...

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde galera, estou tentando adicionar um formulário em meu site para inclusão de assinantes na minha lista do mailchimp, mas de forma direta sem a necessidade do assinante confirmar o e-mail. [...]

 

 

 

// By default this sends a confirmation email - you will not see new members
// until the link contained in it is clicked!
$retval = $api->listSubscribe($listId, $subscriberemailID, $merge_vars);

 

Tem mesmo algum lugar que diga que é possível incluir o infeliz sem clicar no link de confirmação??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segundo o suporte da mailchimp, basta trocar true por false para a variável $double_optin, como segue abaixo:

 

    function listSubscribe($id, $email_address, $merge_vars=NULL, $email_type='html', $double_optin=false, $update_existing=false, $replace_interests=true, $send_welcome=false) {
        $params = array();
        $params["id"] = $id;
        $params["email_address"] = $email_address;
        $params["merge_vars"] = $merge_vars;
        $params["email_type"] = $email_type;
        $params["double_optin"] = $double_optin;
        $params["update_existing"] = $update_existing;
        $params["replace_interests"] = $replace_interests;
        $params["send_welcome"] = $send_welcome;
        return $this->callServer("listSubscribe", $params);
    }

E se a lista está recebendo o email cadastrado, porque não recebe os outros campos normalmente? Veja que na função acima, a variável $merge_vars que é responsável por juntar as informações dos outros campos e enviar para a lista, está recebendo NULL. Já tentei deixar ele sem NULL e continua não enviando os dados dos outros campos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E se a lista está recebendo o email cadastrado, porque não recebe os outros campos normalmente? Veja que na função acima, a variável $merge_vars que é responsável por juntar as informações dos outros campos e enviar para a lista, está recebendo NULL. Já tentei deixar ele sem NULL e continua não enviando os dados dos outros campos.

Não está recebendo [inline]null[/inline]. A função assume [inline]null[/inline] se não for passado nada, mas é enviado o [inline]$merge_vars[/inline] de anteriormente.

 

Verifique o conteúdo de [inline]$merge_vars[/inline] antes da linha que chama a função, fica mais ou menos algo assim...

 

// By default this sends a confirmation email - you will not see new members
// until the link contained in it is clicked!
$retval = $api->listSubscribe($listId, $subscriberemailID, $merge_vars);

if ($api->errorCode){
	echo "Unable to load listSubscribe()!\n";
	echo "\tCode=".$api->errorCode."\n";
	echo "\tMsg=".$api->errorMessage."\n";
} else {
    echo sprintf("<pre>%s</pre>", var_export($merge_vars));
    // echo "<meta HTTP-EQUIV='Refresh' CONTENT='0;URL=http://www.xprintbh.com.br/agencia/'>";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei duas formas para receber os dados do formulário para o $merge_vars, a primeira foi assim:

 

//get the fill name, telephone and enterprise by $_POST method from your form
$merge_vars = array($_POST["MMERGE1"], $_POST["MMERGE2"], $_POST["MMERGE3"]);

//get the emailID of user by either $_GET or $_POST method from your form
$subscriberemailID = $_POST["EMAIL"];

A segunda, foi assim:

$FNAME = $_POST["MMERGE1"];
$FONE  = $_POST["MMERGE2"];
$INC   = $_POST["MMERGE3"];

//get the fill name, telephone and enterprise by $_POST method from your form
$merge_vars = array($FNAME, $FONE, $INC);

//get the emailID of user by either $_GET or $_POST method from your form
$subscriberemailID = $_POST["EMAIL"];

Mas nenhuma das duas maneiras está dando certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá, você fez imprimir o valor de [inline]$merge_vars[/inline] na tela, como eu sugeri???

Imprima, também, o conteúdo de [inline]$_POST[/inline] pra ter certeza que está recebendo os dados corretamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz, o $merge_vars está recebendo os dados certos:

 

array(3) { [0]=> string(5) "Paulo" [1]=> string(6) "Afirma" [2]=> string(10) "3188881221" }



Muito engraçado, não sei onde pode estar o erro. O mais engraçado é que o suporte da mail chimp também não sabe informar, rsrs...

Fiz a impressão dos $_POST e também estão recebendo os dados preenchidos.

 

string(5) "Paulo" string(6) "Afirma" string(10) "3123459876"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pergunta em off, daria muito trampo pra você migrar pra API 2.0 deles???

Agora pergunta pertinente ao problema: Os nomes dos campos no 'grouping' que você está tentando inscrever o usuário batem com os nomes dos formulários??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre a migração, teria um trampo bom pois tem mais formulários, cada um tem uma estrutura independente, pq cada formulário envia para uma lista diferente.

 

Sobre os nomes dos campos, são os mesmo, porque eu baixei o código do formulário direto da área de admin do mailchimp.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evandro, obrigado pela tentativa na solução do meu problema, em contato com o suporte, conseguimos encontrar o problema. Quando os dados é enviado para o servidor da MailChimp, é necessário indicar o nome do campo ao qual pertence cada dado, ficando assim no código:

 

//merge the first name, inc name and telephone...
$merge_vars = array('FNAME'=>$FNAME, 'EMPRESA'=>$EMPRESA, 'FONE1'=>$FONE1, 'FONE2'=>$FONE2, 'CONTATOWEB'=>$CONTATOWEB, 'ENDERECO[addr1]'=>$ENDERECO, 
					'ENDERECO[addr2]'=>$COMPLEMENTO, 'ENDERECO[city]'=>$CIDADE, 'ENDERECO[state]'=>$ESTADO, 'ENDERECO[zip]'=>$CEP, 'ENDERECO[country]'=>'24',
					'URL'=>$URL);

Bom que fica de aprendizado pra quem um dia tiver o mesmo problema que eu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.