php - 如何在 Mailjet v3 PHP 包装器中获取联系人 ID?

标签 php email subscribe mailjet

我使用 Mailjet api 将提交的电子邮件存储在 Mailjet 列表中。这在有 Mailjet 0.1 版本 API 时正常工作(当时没有任何 PHP 包装器,但很容易与他们的示例一起使用),但是当他们将 API 更改为版本 3 时,他们的 PHP 包装器在添加时不会返回任何联系人 ID联系人列表中的新联系人。我之前提出了一个类似的问题如何让 Mailjet 工作,但现在这个问题出现在新版本 3 中。

这里是更正后的代码,

*Assume that the shown email is a new contact that's not already created in 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。

尝试将创建的联系人添加到列表时出现此错误( Debug模式设置为 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: Adding email to list does not work

更新:完整代码及修正,

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

最佳答案

编辑:

此问题不一定特定于您尝试实现的目标。
虽然,我们的 1.0.6 包装器中肯定存在错误。 在包装器代码中,我们使用了 json_decode() 函数的第 4 个参数,该函数仅在 PHP 5.4 中引入(参见“变更日志”部分 here)。

解决这个问题的两种方法:

  • 要么将系统的 PHP 版本更新到 >= 5.4
  • 或者(在我们引入修复之前),在本地修改包装器以不使用该选项(参见 here ),这很可能会带来新问题,因此不推荐修复

希望这对您有所帮助。我们当然很感激这引起了我们的注意:)

编辑2:

为了澄清,这里是第二种方法在代码方面的含义:

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

这应该消除警告解决问题。这不是很好吗? ;-)


因为我真的无法在我这边重现你的问题,这里有一个问题:
当您发出以下代码时,您尝试创建的联系人是否列在响应中?
或者,转到 here获取您帐户的联系人列表。

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

var_dump($contact);

如果是,这就是我在 response on your other question 中写的原因不起作用。

但为什么呢?

好吧,您正在尝试创建一个已在您的帐户中列出的联系人。创建联系人的过程并不一定意味着必须将其分配给联系人列表。

修复

获取现有联系人的 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 interface删除并再次尝试按照我的回答进行操作。
(单击联系人的电子邮件,然后单击其头像旁边的黄色菜单,然后单击删除。)

能解决您的问题吗? :-)

关于php - 如何在 Mailjet v3 PHP 包装器中获取联系人 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30392752/

相关文章:

php - Laravel 5 加入表并选择热门类别

JavaScript:从 localStorage 通过电子邮件向用户发送登录凭据?

java - 如何使用 google+ token 从 https ://www. googleapis.com/plus/v1/people/me 调用获取电子邮件?

angular - 等待2个方法完成Angular 6

angular - 类型错误 : Object doesn't support property or method 'map' - AngularJS2

php - 当我向 foreach 循环添加中断时出错

php - 单击链接以针对链接中的特定值运行 MySQL 查询 (php)

php - 与 strtotime 作斗争,得到预期参数 2 为长错误

python - 我将如何在 Python 中组合这两段代码?

angular - 如何异步订阅用于candeactivate Guard的matdialog服务?