【问题标题】:MailChimp API v2: Validation ErrorMailChimp API v2:验证错误
【发布时间】:2015-10-16 00:45:40
【问题描述】:

我的 Mailchimp 有这个问题,我的电话似乎被拒绝并失败了。不知何故,Mailchimp 支持甚至看不到我试图用这段代码给他们打电话

$data = array(
    'apikey' => "APIKEY-USXX",
    'cid' => "CID",
);
$data = json_encode($data);
echo '<pre>';
var_dump($data);
echo '</pre>';

$submit_url = "https://us10.api.mailchimp.com/2.0/reports/opened.json";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $submit_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, urlencode($data));
$result = curl_exec($ch);
curl_close ($ch);

$info = json_decode(json_encode(json_decode($result)), true);
echo '<pre>';
var_dump($info);
echo '</pre>';

奇怪的是,这适用于我使用 API 1.3 进行的任何其他调用。我真的迷失在这里我做错了什么。希望你们能帮帮我吗?

提前致谢。

** 编辑 ** 这是我的回应:

array(4) {
  ["status"]=>
  string(5) "error"
  ["code"]=>
  int(-100)
  ["name"]=>
  string(15) "ValidationError"
  ["error"]=>
  string(31) "You must specify a apikey value"
}

对我有用的最终代码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $submit_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_setopt($ch, CURLOPT_USERAGENT, 'MailChimp-PHP/2.0.6');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 600);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);

$result = curl_exec($ch);
curl_close ($ch);

【问题讨论】:

  • 我想到的 2 个快速的事情:你试过使用官方的 mc api v2 php 包装器吗?也许您可以尝试指定 json 内容类型标头(似乎不在您的代码中)
  • 您确定必须对您的帖子字段进行 url 编码吗?

标签: php curl mailchimp


【解决方案1】:

确保提交 URL (us10) 中的“dc”与您的 API 密钥的最后部分匹配。

另外...尝试在调用中添加以下选项:

curl_setopt($ch, CURLOPT_USERAGENT, 'MailChimp-PHP/2.0.6');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 600);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

您还可以添加以下选项来更明确地调试调用

curl_setopt($ch, CURLOPT_VERBOSE, true);

【讨论】:

  • 这个答案与@Parris Varney 关于删除 url_encode 的评论一起帮助我检索了正确的结果。谢谢大家!
猜你喜欢
  • 2014-10-14
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 2013-08-20
  • 2019-10-30
  • 2013-06-12
  • 2016-01-03
  • 2022-12-10
相关资源
最近更新 更多