2016-05-09 20 views
1

私はそれをv3でmailchimp APIを試してきました。私はPHPを使用して以来、私はいくつかのトラブルが始まったが、今はすべてがうまくいく。Mailchimp api v3:バッチサブスクリプションは常に保留中

私はリストに複数の加入者を追加しようとしています。

私が見た:https://devs.mailchimp.com/blog/batch-operations-and-put-in-api-v3-0/

を、次のコードを試みた:

<?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); 

をさらに残念ながら、このコードは、エラーを返しません。のみ:

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"}]}" 

私は悲しいかなか完全にわからないが、なぜそれが保留中ですか?私は生成されたidのリクエストを取得しようとしました、そして悲しいことに、 "待っています"と言っていました。

誰も同じ問題が発生しましたか?上記のコードを動作させるには何ができますか?

ありがとうございます!

EDIT 1:TooMuchPeteによって与えられた最初の回答による修正。

+0

これらは一度に1つずつ実行されるため、送信された複数のメールがある場合は、そのメールが自分のターンになるまで保留になります。あなたが「保留中」から離れていない場合は、カスタマーサポートに連絡し、何が起きているかを確認する必要があります。 – TooMuchPete

+0

私はノードで非常に似たような操作をしていますが、私は同じ問題を抱えています。あなたがtotal_operationsが0であることに気づいたら、私はなぜそれがわからないのですか?しかし、私は同じことを得ています。私はまた、差をつけなかったメンバーの後にメールアドレスのmd5ハッシュを追加しました。 – mikedklein

+0

total_operations:0は、私たちが問題を説明する操作を許可されていないことを意味しますが、それはただの理論です。この日まで、私の操作は起動しません。 – LamaDelRay

答えて

1

私はmailchimp APIサポートに問い合わせました。あなたが得ている応答は、技術的には大丈夫です。

取得要求を使用して返されたバッチidを持つバッチのURLをポーリングする必要があります。

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

状況がより明確にするためのバッチのAPIドキュメントへ{"id":"af07a55fea","status":"finished",

Linkを変更したときに続いてポーリングを取り消します。バッチAPIに対して取得要求の読込みタブを参照するようにしてください。

+0

だから私は何か起こっていることを確認する非同期チェックを行う必要がありますか?とにかく答えてくれてありがとう、私はそのようにしよう! – LamaDelRay

+0

リンクした内容に基づいて動作させることができました。あなたのお時間をありがとうございました! – LamaDelRay

+0

@mikedklein以前に送信されたバッチリクエスト([mysql_insert_id](http://php.net/manual/en/function.mysql-insert-id.php)コマンドのようなもの)からIDを取得する簡単な方法はありますか? ? – adamdesign

0

パスにあまりにも多くの情報を入れているようです。リンクしたドキュメントから、/3.0/の後にパスが始まり、http://で始まるようです。

+0

結果的に私のコードを編集すると、よりスムーズですが、これまでのところ変更はありません。このエラーを指摘してくれてありがとう! – LamaDelRay

関連する問題