Как получить ID контакта в PHP-оболочке Mailjet v3?
Я использовал API Mailjet для хранения отправленных писем в списке Mailjet. Это работало должным образом, когда был API версии Mailjet 0.1 (тогда не было никакой оболочки PHP, но было легко использовать с их примерами), но когда они изменили API на версию 3, их оболочка PHP не возвращает никакого идентификатора контакта при добавлении новый контакт в список контактов. Ранее я задавал аналогичный вопрос, как заставить 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
в качестве идентификатора контакта, но он по-прежнему возвращает 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);
2 ответа
РЕДАКТИРОВАТЬ:
Эта проблема не обязательно относится к цели, которую вы пытаетесь достичь.
Хотя в нашей оболочке 1.0.6 определенно есть ошибка. В коде обёртки мы используем 4-й параметр json_decode()
функция, которая была представлена только в PHP 5.4 (см. раздел "Журнал изменений" здесь).
Это можно решить двумя способами:
- Либо обновите версию PHP вашей системы до>= 5.4
- Или (пока мы не введем исправление на нашей стороне), измените оболочку локально, чтобы не использовать эту опцию (см. Здесь), что может привести к новым проблемам и не является рекомендуемым исправлением.
Надеюсь, это помогло. Мы, конечно, благодарны, что это привлекло наше внимание к этой конкретной проблеме:)
Edit2:
Чтобы уточнить, вот что означает второй подход в терминах кода:
$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);
Если это так, вот почему то, что я написал в своем ответе на ваш другой вопрос, не работает.
Но почему?
Итак, вы пытаетесь создать контакт, который уже указан в вашей учетной записи. Процесс создания контакта не обязательно означает, что он должен быть назначен в список контактов.
Исправление
Либо получите идентификатор существующего контакта, а не создавайте его перед добавлением в список:
$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.
Или удалите его через веб-интерфейс и попробуйте снова следовать моему ответу.
(Нажмите на адрес электронной почты контакта, затем нажмите на желтое меню рядом с его аватаром и нажмите " Удалить".)
Это решает вашу проблему?:-)
$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;