email — Как получить 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" => "[email protected]");
$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);

6

Решение

РЕДАКТИРОВАТЬ:

Эта проблема не обязательно относится к цели, которую вы пытаетесь достичь.
Хотя в нашей оболочке 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"    =>  "[email protected]"];

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

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

// Then proceed as described in my original answer.

Или удалите его через веб интерфейс и попробуйте снова следовать моему ответу.
(Нажмите на адрес электронной почты контакта, затем нажмите на желтое меню рядом с его аватаром и нажмите на Удалить.)

Есть ли тот решить вашу проблему? 🙂

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]