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

时间:2015-05-22 09:12:24

标签: php email subscribe mailjet

我使用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: 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 :(得分:3)

编辑:

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

有两种方法可以解决这个问题:

  • 将系统的PHP版本更新为> = 5.4
  • 或者(直到我们在我们这边引入修复),在本地修改包装器以不使用该选项(请参阅here), 这很可能会带来新问题而不是建议的修复

希望这有帮助。我们当然很感激这使我们注意到这个特殊问题:)

EDIT2:

澄清一下,这是第二种方法在代码方面的含义:

$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删除它,然后再次尝试按照我的回答 (单击联系人的电子邮件,然后单击其头像旁边的黄色菜单,然后单击删除。)

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