6

Mailjet api を使用して、送信されたメールを Mailjet リストに保存しました。これは、Mailjet 0.1 バージョンの API があったとき (当時は PHP ラッパーはありませんでしたが、サンプルでは使いやすかった) には適切に機能しましたが、API をバージョン 3 に変更すると、PHP ラッパーは追加時に連絡先 ID を返しません。連絡先リストへの新しい連絡先。Mailjet を動作させる方法について以前に同様の質問をしましたが、この問題は新しいバージョン 3 で発生しました。

再びここに修正されたコードがあります、

*表示された電子メールは、Mailjet でまだ作成されていない新しい連絡先であると仮定します。

$mj = new Mailjet();
$contact_params = array("method" => "POST", "Email" => "abc@gmail.com");
$contact = $mj->contact($contact_params);

$add_params = array(
    "method" => "POST",
    "ContactID" => $contact,
    "ListID" => _MAILJET_LIST,
    "IsActive" => "True"
);
$mj->listrecipient($add_params);

開発者 @Gormador は$contact->Data[0]->ID連絡先 ID として使用すると述べていますが、それでも NULL を返します。

作成した連絡先をリストに追加しようとすると、このエラーが発生します (デバッグ モードを 2 に設定)。

array(3) { ["ContactID"]=> NULL ["ListID"]=> string(1) "2"
["IsActive"]=> string(4) "True" } string(105) "{ "ErrorInfo" : "",
"ErrorMessage" : "Invalid data: \"null\" is an invalid integer",
"StatusCode" : 400 }"

前の質問: Mailjet: メールをリストに追加できない

更新: 修正を含む完全なコード、

$mj = new Mailjet(); 
$add_email = "testing" . rand(0, 1000) . "@gmail.com"; 
$contact_params = array("method" => "POST", "Email" => $add_email); 
$mj->contact($contact_params); 
$viewContact = array("method" => "VIEW","unique" => $add_email); 
$contact = $mj->contact($viewContact); 
$add_params = array( "method" => "POST", "ContactID" => $contact->Data[0]->ID, "ListID" => 1, "IsActive" => "True" ); 
$mj->listrecipient($add_params);
4

2 に答える 2

3

編集:

この問題は、達成しようとしている目標に必ずしも固有のものではありません。
ただし、1.0.6 ラッパーには間違いなくバグがあります。ラッパー コードでは、関数の 4 番目のパラメーターを使用します。これは、PHP 5.4 でのみ導入されました (ここjson_decode()の「変更ログ」セクションを参照してください)。

これを解決するには、次の 2 つの方法があります。

  • システムの PHP バージョンを >= 5.4 に更新します。
  • または (こちら側で修正を導入するまで)、そのオプションを使用しないようにラッパーをローカルで変更します (こちらを参照)。新しい問題が発生する可能性が非常に高く、推奨される修正ではありません

これが役に立ったことを願っています。これがその特定の問題に私たちの注意を向けさせてくれたことに本当に感謝しています:)

編集2:

明確にするために、コードに関して2番目のアプローチが意味することは次のとおりです。

$this->_response = json_decode($buffer, false, 512, JSON_BIGINT_AS_STRING);
//Becomes
$this->_response = json_decode($buffer, false, 512);

これにより、警告がなくなり、問題が解決するはずです。すごいじゃないですか!;-)


私はあなたの問題を再現することができないので、ここに質問があります:
あなたが作成しようとしている連絡先は、次のコードを発行したときの応答にリストされていますか?
または、ここにアクセスして、アカウントの連絡先のリストを確認してください。

$mj = new Mailjet($apiKey, $secretKey);
$contact = $mj->contact();

var_dump($contact);

もしそうなら、これがあなたの他の質問に対する私の回答で私が書いたことがうまくいかない理由です。

しかし、なぜ?

アカウントに既にリストされている連絡先を作成しようとしています。連絡先を作成するプロセスは、必ずしも連絡先リストに割り当てる必要があるという意味ではありません。

修正

リストに追加する前に、作成する代わりに既存の連絡先の ID を取得します。

$mj = new Mailjet($apiKey, $secretKey);

$viewContact = [
    "method"    =>  "VIEW",
    "unique"    =>  "gaetan.philippot@gmail.com"
];

$contact = $mj->contact($viewContact);

echo "Contact ID: ".$contact->Data[0]->ID."\n";

// Then proceed as described in my original answer.

または、 Web インターフェイスから削除して、私の回答をもう一度試してください。
(連絡先のメールをクリックし、アバターの横にある黄色のメニューをクリックして、[削除] をクリックします。)

それはあなたの問題解決しますか?:-)

于 2015-05-22T10:28:03.657 に答える
0
 $email     = 'youname@yourcompany.com'
 $mj        = new \Mailjet\Client(MAIL_LOGIN, API_KEY);
 $response  = $mj->get(\Mailjet\Resources::$Contact, ['id' => $email]);
 $contactID = $response->success() ? $response->getData()[0]['ID'] : null;
于 2022-01-03T07:53:48.317 に答える