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

2024-03-28

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

这是更正后的代码,

*假设显示的电子邮件是尚未在 Mailjet 中创建的新联系人。

$mj = new Mailjet();
$contact_params = array("method" => "POST", "Email" => "[email protected] /cdn-cgi/l/email-protection");
$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:将电子邮件添加到列表不起作用 https://stackoverflow.com/questions/30322925/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);

EDIT:

此问题不一定特定于您试图实现的目标。
尽管如此,我们的 1.0.6 包装器中肯定存在一个错误。 在包装器代码中,我们使用第四个参数json_decode()函数,仅在 PHP 5.4 中引入(请参阅“Changelog”部分here http://php.net/manual/en/function.json-decode.php).

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

  • 将系统的 PHP 版本更新到 >= 5.4
  • 或者(直到我们引入修复程序),在本地修改包装器以不使用该选项(请参阅here https://github.com/mailjet/mailjet-apiv3-php-simple/blob/master/src/Mailjet/php-mailjet-v3-simple.class.php#L319), 这很可能会带来新问题,但不建议修复.

希望这有帮助。我们当然很感激这引起了我们对这个特定问题的关注:)

Edit2:

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

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

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


由于我确实无法重现您的问题,这里有一个问题:
当您发出以下代码时,您尝试创建的联系人是否列在响应中?
或者,去here https://app.mailjet.com/contacts/subscribers/contact_list获取您帐户的联系人列表。

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

var_dump($contact);

如果是的话,这就是我在我的文章中写的原因回答你的另一个问题 https://stackoverflow.com/a/30326542/3425488不起作用。

But why?

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

The fix

在将现有联系人添加到列表之前,先获取现有联系人的 ID,而不是创建它:

$mj = new Mailjet($apiKey, $secretKey);

$viewContact = [
    "method"    =>  "VIEW",
    "unique"    =>  "[email protected] /cdn-cgi/l/email-protection"
];

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

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

// Then proceed as described in my original answer.

或者通过删除它网页界面 https://app.mailjet.com/contacts/subscribers/contact_list并尝试再次遵循我的回答。
(单击联系人的电子邮件,然后单击其头像旁边的黄色菜单,然后单击remove.)

Does that解决你的问题吗? :-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Mailjet v3 PHP 包装器中获取联系人 ID? 的相关文章

随机推荐