【问题标题】:How to get Contact ID in Mailjet v3 PHP wrapper?如何在 Mailjet v3 PHP 包装器中获取联系人 ID?
【发布时间】:2015-05-22 09:12:23
【问题描述】:

我使用 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);

【问题讨论】:

  • 对不起,我真的无法在我这边重现......这个更新的代码对我来说很好用。你能更新完整的输出吗?并通过评论通知我,否则我会错过它:-)

标签: php email subscribe mailjet


【解决方案1】:

编辑:

此问题不一定特定于您尝试实现的目标。
虽然,我们的 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删除它,然后再次尝试按照我的回答。
(点击联系人的电子邮件,然后点击头像旁边的黄色菜单,然后点击删除。)

那个能解决你的问题吗? :-)

【讨论】:

  • 我总是使用唯一的电子邮件(自动生成)来测试代码,例如“abc”.rand(1,1000).“@gmail.com”。联系人记录在 Mailjet 中,没有任何问题,并在回复中显示了电子邮件。
  • $mj = new Mailjet(); $add_email = "特山" .兰德(0, 1000) 。 “@gmail.com”; $contact_params = array("method" => "POST", "Email" => $add_email); $mj->联系人($contact_params); $viewContact = array("method" => "VIEW","unique" => $add_email); $contact = $mj->contact($viewContact); $add_params = array("method" => "POST", "ContactID" => $contact->Data[0]->ID, "ListID" => _MAILJET_LIST, "IsActive" => "True" ); $mj->listrecipient($add_params);
  • 您可以在使用该代码时发布整个响应吗?您问题中的代码不起作用,因此为什么响应并不能真正帮助我调试您的问题。另外,请在每次通话时发出var_dump(联系人创建结果、联系人查看结果、联系人列表关联结果)。提前致谢!另外,请使用代码块,因为它使所有内容更易于阅读:-) 如果需要,只需通过更新编辑您的问题。
  • 这是我使用的测试代码。请仔细阅读,让我知道如何从该回复中提取联系人 ID。 json 无法检索它,因为即使在通过 json_decode() 或作为数组解析后也不返回值。 certificatestreet.com/mailjet_test.php
  • 添加了新的编辑以详细说明该过程。看“Edit2”。另外,不要忘记投票/接受 cmets 和/或有用的答案。此外,如果此修复解决了您的问题,我将编辑我对您的第一个问题的答案,所以不要忘记检查那里以确认答案解决了您的问题:-)
【解决方案2】:
 $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;

【讨论】:

  • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
相关资源
最近更新 更多