2016-05-09 16 views
1

Ich habe versucht, die Mailchimp API in es ist v3. Da ich PHP benutzt habe, hatte ich einige Probleme damit anzufangen, aber jetzt läuft alles gut.Mailchimp api v3: Batch-Abonnement immer ausstehend

Ich versuche, mehrere Abonnenten zu meiner Liste auf einmal hinzuzufügen.

Ich sah dort: https://devs.mailchimp.com/blog/batch-operations-and-put-in-api-v3-0/

und versucht, den folgenden Code:

<?php 

$apiKey = "apikey"; 
$listId = "listid"; 

$memberId = md5(strtolower("[email protected]")); 
$dataCenter = substr($apiKey,strpos($apiKey,'-')+1); 
$url = 'https://'. $dataCenter . '.api.mailchimp.com/3.0/lists/' . $listId .'/members'; 
$batchurl = 'https://'. $dataCenter . '.api.mailchimp.com/3.0/batches'; 
$filename = "test_csv.csv"; 
$handle = fopen($filename, "r"); 
$contents = fread($handle, filesize($filename)); 
fclose($handle); 
$user_info = str_getcsv($contents, ";"); 
$ch = curl_init($batchurl); 
curl_setopt($ch, CURLOPT_USERPWD, 'apikey:'.$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_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_POST, true); 
$array = array(); 
for ($i = 1; $user_info[$i]; $i++) { 

    $array[] = array(

      "method" => "PUT", 
      "path" => 'lists/'.$listId.'members/'.md5(trim($user_info[$i])), 
      "body" => '{"email_address" => '.trim($user_info[$i]).',"status" => "subscribed"}' 
     ); 
} 
$bck = '{"operations": '.json_encode($array).'}' ; 

curl_setopt($ch, CURLOPT_POSTFIELDS, $bck); 
$result = curl_exec($ch); 
curl_close($ch); 
var_dump($result); 

Doch leider dieser Code keine Fehler zurückgibt. Nur:

string(624) "{"id":"af07a55fea","status":"pending","total_operations":0,"finished_operations":0,"errored_operations":0,"submitted_at":"2016-05-09T14:46:21+00:00","completed_at":"","response_body_url":"","_links":[{"rel":"parent","href":"https://us13.api.mailchimp.com/3.0/batches","method":"GET","targetSchema":"https://us13.api.mailchimp.com/schema/3.0/Batches/Collection.json","schema":"https://us13.api.mailchimp.com/schema/3.0/CollectionLinks/Batches.json"},{"rel":"self","href":"https://us13.api.mailchimp.com/3.0/batches/af07a55fea","method":"GET","targetSchema":"https://us13.api.mailchimp.com/schema/3.0/Batches/Instance.json"}]}" 

Was ich leider nicht vollständig verstehe, warum steht es aus? Ich habe versucht, Anfragen über die generierte ID zu bekommen, und leider immer "ausstehend" gesagt, egal wie lange ich vorher gewartet habe.

Hat jemand das gleiche Problem festgestellt? Was kann getan werden, damit der obige Code funktioniert?

Vielen Dank im Voraus!

EDIT 1: Korrektur entsprechend der ersten Antwort von TooMuchPete gegeben.

+0

Diese laufen nacheinander, übrigens, wenn Sie also eine Reihe von ihnen gesendet haben, werden sie alle ausstehen, bis sie an der Reihe sind. Wenn Sie nichts von "ausstehend" sehen, sollten Sie sich an den Kundendienst wenden und nachsehen, was los ist. – TooMuchPete

+0

Ich mache eine sehr ähnliche Operation in Knoten und ich laufe auf das gleiche Problem. Wenn Sie bemerken, dass total_operations 0 ist, und ich bin mir nicht sicher warum. Aber ich bekomme das Gleiche. Ich fügte auch den md5-Hash der E-Mail-Adresse nach Mitgliedern hinzu, die keinen Unterschied machten. – mikedklein

+0

Ich denke, die total_operations: 0 bedeutet, dass wir keine Operationen machen dürfen, was die Schwierigkeiten erklären würde, die wir haben, aber dann ist es nur eine Theorie. Bis zu diesem Datum werden meine Operationen auch nicht gestartet. – LamaDelRay

Antwort

1

Also schickte ich eine Anfrage in mailchimp API-Unterstützung. Die Antwort, die Sie erhalten, ist technisch in Ordnung.

Sie sollten die URL für Batches mit der Chargen-ID abfragen, die mit einer Abrufanforderung zurückgegeben wird.

{"id":"af07a55fea", ...

dann die Abfrage abzubrechen, wenn der Status {"id":"af07a55fea","status":"finished",

Link zu den Ansätzen API-Dokumentation für mehr Klarheit verändert. Stellen Sie sicher, dass Sie auf die Lese-Registerkarte für die Abrufanforderung für die Batch-API verweisen.

+0

Also sollte ich Asynchronen überprüfen, um sicher zu sein, dass etwas passiert ist? Danke für die Antwort, ich werde es versuchen! – LamaDelRay

+0

Ich habe es geschafft, basierend auf dem, was Sie verknüpft haben, zu arbeiten. Vielen Dank für Ihre Zeit! – LamaDelRay

+0

@mikedklein Gibt es einen schnellen Weg, um die ID von einer zuvor gesendeten Batch-Anfrage (ähnlich wie [mysql_insert_id] (http://php.net/manual/en/function.mysql-insert-id.php) Befehl) zu bekommen ? – adamdesign

0

Es sieht so aus, als würden Sie zu viele Informationen in den Pfad eingeben. Von den verknüpften Dokumenten starten sie ihren Pfad nach /3.0/ und Ihr scheint mit http:// zu beginnen.

+0

Mein Code in der Konsequenz, es ist glatter, aber immer noch keine Änderung auf das Ergebnis so weit. Danke, dass du diesen Fehler angezeigt hast! – LamaDelRay