Как получить 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;
Другие вопросы по тегам