pag oficial listas ingreso importar gratis espaƱol emails deja contactos como column php json curl mailchimp mailchimp-api-v3.0

php - oficial - Agregar suscriptores a una lista usando la API v3 de Mailchimp



mailchimp pag oficial (6)

Estas son buenas respuestas, pero están separadas de una respuesta completa sobre cómo obtener un formulario para enviar datos y manejar esa respuesta. Esto demostrará cómo agregar un miembro a una lista con v3.0 de la API desde una página HTML a través de jquery .ajax() .

En Mailchimp:

  1. Adquiera su clave API e ID de lista
  2. Asegúrese de configurar su lista y qué campos personalizados desea usar con ella. En este caso, configuré el zipcode como un campo personalizado en la lista ANTES de hacer la llamada a la API.
  3. Consulte los documentos de API sobre cómo agregar miembros a las listas. Estamos utilizando el método de create que requiere el uso de solicitudes HTTP POST . Aquí hay otras opciones que requieren PUT si desea poder modificar / eliminar subs.

HTML:

<form id="pfb-signup-submission" method="post"> <div class="sign-up-group"> <input type="text" name="pfb-signup" id="pfb-signup-box-fname" class="pfb-signup-box" placeholder="First Name"> <input type="text" name="pfb-signup" id="pfb-signup-box-lname" class="pfb-signup-box" placeholder="Last Name"> <input type="email" name="pfb-signup" id="pfb-signup-box-email" class="pfb-signup-box" placeholder="[email protected]"> <input type="text" name="pfb-signup" id="pfb-signup-box-zip" class="pfb-signup-box" placeholder="Zip Code"> </div> <input type="submit" class="submit-button" value="Sign-up" id="pfb-signup-button"></a> <div id="pfb-signup-result"></div> </form>

Cosas clave:

  1. Déle a su <form> una identificación única y no olvide el method="post" atributo method="post" para que el formulario funcione.
  2. Tenga en cuenta que la última línea #signup-result es donde depositará los comentarios del script PHP.

PHP:

<?php /* * Add a ''member'' to a ''list'' via mailchimp API v3.x * @ http://developer.mailchimp.com/documentation/mailchimp/reference/lists/members/#create-post_lists_list_id_members * * ================ * BACKGROUND * Typical use case is that this code would get run by an .ajax() jQuery call or possibly a form action * The live data you need will get transferred via the global $_POST variable * That data must be put into an array with keys that match the mailchimp endpoints, check the above link for those * You also need to include your API key and list ID for this to work. * You''ll just have to go get those and type them in here, see README.md * ================ */ // Set API Key and list ID to add a subscriber $api_key = ''your-api-key-here''; $list_id = ''your-list-id-here''; /* ================ * DESTINATION URL * Note: your API URL has a location subdomain at the front of the URL string * It can vary depending on where you are in the world * To determine yours, check the last 3 digits of your API key * ================ */ $url = ''https://us5.api.mailchimp.com/3.0/lists/'' . $list_id . ''/members/''; /* ================ * DATA SETUP * Encode data into a format that the add subscriber mailchimp end point is looking for * Must include ''email_address'' and ''status'' * Statuses: pending = they get an email; subscribed = they don''t get an email * Custom fields go into the ''merge_fields'' as another array * More here: http://developer.mailchimp.com/documentation/mailchimp/reference/lists/members/#create-post_lists_list_id_members * ================ */ $pfb_data = array( ''email_address'' => $_POST[''emailname''], ''status'' => ''pending'', ''merge_fields'' => array( ''FNAME'' => $_POST[''firstname''], ''LNAME'' => $_POST[''lastname''], ''ZIPCODE'' => $_POST[''zipcode''] ), ); // Encode the data $encoded_pfb_data = json_encode($pfb_data); // Setup cURL sequence $ch = curl_init(); /* ================ * cURL OPTIONS * The tricky one here is the _USERPWD - this is how you transfer the API key over * _RETURNTRANSFER allows us to get the response into a variable which is nice * This example just POSTs, we don''t edit/modify - just a simple add to a list * _POSTFIELDS does the heavy lifting * _SSL_VERIFYPEER should probably be set but I didn''t do it here * ================ */ curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERPWD, ''user:'' . $api_key); curl_setopt($ch, CURLOPT_HTTPHEADER, array(''Content-Type: application/json'')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $encoded_pfb_data); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $results = curl_exec($ch); // store response $response = curl_getinfo($ch, CURLINFO_HTTP_CODE); // get HTTP CODE $errors = curl_error($ch); // store errors curl_close($ch); // Returns info back to jQuery .ajax or just outputs onto the page $results = array( ''results'' => $result_info, ''response'' => $response, ''errors'' => $errors ); // Sends data back to the page OR the ajax() in your JS echo json_encode($results); ?>

Cosas clave:

  1. CURLOPT_USERPWD maneja la clave API y Mailchimp realmente no muestra cómo hacerlo.
  2. CURLOPT_RETURNTRANSFER nos da la respuesta de tal manera que podemos enviarla de vuelta a la página HTML con el controlador de success .ajax() .
  3. Use json_encode en los datos que recibió.

JS:

// Signup form submission $(''#pfb-signup-submission'').submit(function(event) { event.preventDefault(); // Get data from form and store it var pfbSignupFNAME = $(''#pfb-signup-box-fname'').val(); var pfbSignupLNAME = $(''#pfb-signup-box-lname'').val(); var pfbSignupEMAIL = $(''#pfb-signup-box-email'').val(); var pfbSignupZIP = $(''#pfb-signup-box-zip'').val(); // Create JSON variable of retreived data var pfbSignupData = { ''firstname'': pfbSignupFNAME, ''lastname'': pfbSignupLNAME, ''email'': pfbSignupEMAIL, ''zipcode'': pfbSignupZIP }; // Send data to PHP script via .ajax() of jQuery $.ajax({ type: ''POST'', dataType: ''json'', url: ''mailchimp-signup.php'', data: pfbSignupData, success: function (results) { $(''#pfb-signup-box-fname'').hide(); $(''#pfb-signup-box-lname'').hide(); $(''#pfb-signup-box-email'').hide(); $(''#pfb-signup-box-zip'').hide(); $(''#pfb-signup-result'').text(''Thanks for adding yourself to the email list. We will be in touch.''); console.log(results); }, error: function (results) { $(''#pfb-signup-result'').html(''<p>Sorry but we were unable to add you into the email list.</p>''); console.log(results); } }); });

Cosas clave:

  1. JSON datos JSON son MUY sensibles en la transferencia. Aquí, lo estoy poniendo en una matriz y parece fácil. Si tiene problemas, es probable debido a cómo están estructurados sus datos JSON. ¡Mira esto!
  2. Las claves para sus datos JSON se convertirán en lo que usted hace referencia en la variable global PHP _POST . En este caso, será _POST[''email''] , _POST[''firstname''] , etc. Pero podría nombrarlos como quiera; solo recuerde cómo nombra las claves de la parte de data de su transferencia JSON para acceder. ellos en PHP.
  3. Obviamente, esto requiere jQuery;)

Estoy tratando de agregar usuarios a una lista que he creado en Mailchimp pero no puedo encontrar ningún ejemplo de código en ningún lado. He intentado descubrir cómo usar la API, pero soy una persona muy "mira un ejemplo y aprende".

Intenté usar la versión 2 de la API, pero nada parece funcionar a pesar de trabajar con ejemplos en la red y Mailchimp dice lo siguiente sobre versiones anteriores de su API en su sitio web:

Las versiones 2.0 y anteriores están en desuso. Solo habrá soporte mínimo (correcciones de errores, parches de seguridad) para esas versiones.

ACTUALIZACIÓN 1 : Investigué un poco más sobre la base de la answer de TooMuchPete con respecto al enlace en Administración de suscriptores y modifiqué un código que encontré here , pero no funcionará porque la función http_build_query() no se ocupa de matrices anidadas. No estoy seguro de cómo lidiar con la parte ''merge_fields'' de agregar un suscriptor. Mi código actual está abajo:

$postdata = http_build_query( array( ''apikey'' => $apikey, ''email_address'' => $email, ''status'' => ''subscribed'', ''merge_fields'' => array( ''FNAME'' => $name ) ) ); $opts = array(''http'' => array( ''method'' => ''POST'', ''header'' => ''Content-type: application/x-www-form-urlencoded'', ''content'' => $postdata ) ); $context = stream_context_create($opts); $result = file_get_contents(''https://us2.api.mailchimp.com/3.0/lists/<list_id>/members/'', false, $context); var_dump($result); die(''Mailchimp executed'');

ACTUALIZACIÓN 2 : ahora he recurrido al uso de curl y he logrado que algo casi funcione. Los datos se envían a Mailchimp pero recibo el error "Su solicitud no incluía una clave API". Supongo que necesito autenticarme como se menciona here . Intenté agregarlo al encabezado http que no funcionó. Vea mi código a continuación:

$apikey = ''<api_key>''; $auth = base64_encode( ''user:''.$apikey ); $data = array( ''apikey'' => $apikey, ''email_address'' => $email, ''status'' => ''subscribed'', ''merge_fields'' => array( ''FNAME'' => $name ) ); $json_data = json_encode($data); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, ''https://us2.api.mailchimp.com/3.0/lists/<list_id>/members/''); curl_setopt($ch, CURLOPT_HTTPHEADER, array(''Content-Type: application/json/r/n Authorization: Basic ''.$auth)); curl_setopt($ch, CURLOPT_USERAGENT, ''PHP-MCAPI/2.0''); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data); $result = curl_exec($ch); var_dump($result); die(''Mailchimp executed'');


Lo tengo funcionando. Estaba agregando la autenticación al encabezado incorrectamente:

$apikey = ''<api_key>''; $auth = base64_encode( ''user:''.$apikey ); $data = array( ''apikey'' => $apikey, ''email_address'' => $email, ''status'' => ''subscribed'', ''merge_fields'' => array( ''FNAME'' => $name ) ); $json_data = json_encode($data); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, ''https://us2.api.mailchimp.com/3.0/lists/<list_id>/members/''); curl_setopt($ch, CURLOPT_HTTPHEADER, array(''Content-Type: application/json'', ''Authorization: Basic ''.$auth)); curl_setopt($ch, CURLOPT_USERAGENT, ''PHP-MCAPI/2.0''); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data); $result = curl_exec($ch); var_dump($result); die(''Mailchimp executed'');


Según los documentos de la instancia de Miembros de la lista , la forma más fácil es usar una solicitud PUT que, según los documentos, "agrega un nuevo miembro de la lista o actualiza el miembro si el correo electrónico ya existe en la lista" .

Además, apikey definitivamente no forma parte del esquema json y no tiene sentido incluirlo en su solicitud json.

Además, como se señala en el comentario de @ TooMuchPete, puede usar CURLOPT_USERPWD para la autenticación básica de http como se ilustra a continuación.

Estoy usando la siguiente función para agregar y actualizar miembros de la lista. Es posible que deba incluir un conjunto ligeramente diferente de merge_fields según los parámetros de su lista.

$data = [ ''email'' => ''[email protected]'', ''status'' => ''subscribed'', ''firstname'' => ''john'', ''lastname'' => ''doe'' ]; syncMailchimp($data); function syncMailchimp($data) { $apiKey = ''your api key''; $listId = ''your list id''; $memberId = md5(strtolower($data[''email''])); $dataCenter = substr($apiKey,strpos($apiKey,''-'')+1); $url = ''https://'' . $dataCenter . ''.api.mailchimp.com/3.0/lists/'' . $listId . ''/members/'' . $memberId; $json = json_encode([ ''email_address'' => $data[''email''], ''status'' => $data[''status''], // "subscribed","unsubscribed","cleaned","pending" ''merge_fields'' => [ ''FNAME'' => $data[''firstname''], ''LNAME'' => $data[''lastname''] ] ]); $ch = curl_init($url); curl_setopt($ch, CURLOPT_USERPWD, ''user:'' . $apiKey); curl_setopt($ch, CURLOPT_HTTPHEADER, [''Content-Type: application/json'']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, ''PUT''); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $json); $result = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return $httpCode; }


Si ayuda a alguien, esto es lo que obtuve trabajando en Python usando la biblioteca de solicitudes de Python en lugar de CURL .

Según lo explicado anteriormente por @staypuftman, necesitará su clave de API e ID de lista de MailChimp y asegúrese de que su sufijo de clave de API y su prefijo de URL (es decir, us5) coincidan.

Pitón:

######################################################################################### # To add a single contact to MailChimp (using MailChimp v3.0 API), requires: # + MailChimp API Key # + MailChimp List Id for specific list # + MailChimp API URL for adding a single new contact # # Note: the API URL has a 3/4 character location subdomain at the front of the URL string. # It can vary depending on where you are in the world. To determine yours, check the last # 3/4 characters of your API key. The API URL location subdomain must match API Key # suffix e.g. us5, us13, us19 etc. but in this example, us5. # (suggest you put the following 3 values in ''settings'' or ''secrets'' file) ######################################################################################### MAILCHIMP_API_KEY = ''your-api-key-here-us5'' MAILCHIMP_LIST_ID = ''your-list-id-here'' MAILCHIMP_ADD_CONTACT_TO_LIST_URL = ''https://us5.api.mailchimp.com/3.0/lists/'' + MAILCHIMP_LIST_ID + ''/members/'' # Create new contact data and convert into JSON as this is what MailChimp expects in the API # I''ve hardcoded some test data but use what you get from your form as appropriate new_contact_data_dict = { "email_address": "[email protected]", # ''email_address'' is a mandatory field "status": "subscribed", # ''status'' is a mandatory field "merge_fields": { # ''merge_fields'' are optional: "FNAME": "John", "LNAME": "Smith" } } new_contact_data_json = json.dumps(new_contact_data_dict) # Create the new contact using MailChimp API using Python ''Requests'' library req = requests.post( MAILCHIMP_ADD_CONTACT_TO_LIST_URL, data=new_contact_data_json, auth=(''user'', MAILCHIMP_API_KEY), headers={"content-type": "application/json"} ) # debug info if required - .text and .json also list the ''merge_fields'' names for use in contact JSON above # print req.status_code # print req.text # print req.json() if req.status_code == 200: # success - do anything you need to do else: # fail - do anything you need to do - but here is a useful debug message mailchimp_fail = ''MailChimp call failed calling this URL: {0}/n'' / ''Returned this HTTP status code: {1}/n'' / ''Returned this response text: {2}'' / .format(req.url, str(req.status_code), req.text)


Si desea ejecutar Batch Subscribe en una lista con la API de Mailchimp . Entonces puedes usar la siguiente función.

/** * Mailchimp API- List Batch Subscribe added function * * @param array $data Passed you data as an array format. * @param string $apikey your mailchimp api key. * * @return mixed */ function batchSubscribe(array $data, $apikey) { $auth = base64_encode(''user:'' . $apikey); $json_postData = json_encode($data); $ch = curl_init(); $dataCenter = substr($apikey, strpos($apikey, ''-'') + 1); $curlopt_url = ''https://'' . $dataCenter . ''.api.mailchimp.com/3.0/batches/''; curl_setopt($ch, CURLOPT_URL, $curlopt_url); curl_setopt($ch, CURLOPT_HTTPHEADER, array(''Content-Type: application/json'', ''Authorization: Basic '' . $auth)); curl_setopt($ch, CURLOPT_USERAGENT, ''PHP-MCAPI/3.0''); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $json_postData); $result = curl_exec($ch); return $result; }

Uso de funciones y formato de datos para operaciones por lotes :

<?php $apikey = ''Your MailChimp Api Key''; $list_id = ''Your list ID''; $servername = ''localhost''; $username = ''Youre DB username''; $password = ''Your DB password''; $dbname = ''Your DB Name''; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die(''Connection failed: '' . $conn->connect_error); } $sql = ''SELECT * FROM emails'';// your SQL Query goes here $result = $conn->query($sql); $finalData = []; if ($result->num_rows > 0) { // output data of each row while ($row = $result->fetch_assoc()) { $individulData = array( ''apikey'' => $apikey, ''email_address'' => $row[''email''], ''status'' => ''subscribed'', ''merge_fields'' => array( ''FNAME'' => ''eastwest'', ''LNAME'' => ''rehab'', ) ); $json_individulData = json_encode($individulData); $finalData[''operations''][] = array( "method" => "POST", "path" => "/lists/$list_id/members/", "body" => $json_individulData ); } } $api_response = batchSubscribe($finalData, $apikey); print_r($api_response); $conn->close();

Además, puede encontrar este código en mi Github gist. Enlace GithubGist

Documentación de referencia: Official


BATCH LOAD : OK, así que después de haber eliminado mi respuesta anterior por solo usar enlaces, actualicé el código que logré poner a funcionar. Aprecio a cualquiera por simplificar / corregir / refinar / poner en función, etc., ya que todavía estoy aprendiendo estas cosas, pero obtuve la lista de miembros por lotes agregar trabajo :)

$apikey = "whatever-us99"; $list_id = "12ab34dc56"; $email1 = "[email protected]"; $fname1 = "Jack"; $lname1 = "Black"; $email2 = "[email protected]"; $fname2 = "Jill"; $lname2 = "Hill"; $auth = base64_encode( ''user:''.$apikey ); $data1 = array( "apikey" => $apikey, "email_address" => $email1, "status" => "subscribed", "merge_fields" => array( ''FNAME'' => $fname1, ''LNAME'' => $lname1, ) ); $data2 = array( "apikey" => $apikey, "email_address" => $email2, "status" => "subscribed", "merge_fields" => array( ''FNAME'' => $fname2, ''LNAME'' => $lname2, ) ); $json_data1 = json_encode($data1); $json_data2 = json_encode($data2); $array = array( "operations" => array( array( "method" => "POST", "path" => "/lists/$list_id/members/", "body" => $json_data1 ), array( "method" => "POST", "path" => "/lists/$list_id/members/", "body" => $json_data2 ) ) ); $json_post = json_encode($array); $ch = curl_init(); $curlopt_url = "https://us99.api.mailchimp.com/3.0/batches"; curl_setopt($ch, CURLOPT_URL, $curlopt_url); curl_setopt($ch, CURLOPT_HTTPHEADER, array(''Content-Type: application/json'', ''Authorization: Basic ''.$auth)); curl_setopt($ch, CURLOPT_USERAGENT, ''PHP-MCAPI/3.0''); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $json_post); print_r($json_post . "/n"); $result = curl_exec($ch); var_dump($result . "/n"); print_r ($result . "/n");