You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cURL更新Mailchimp联系人时{subscriber_hash}获取及400报错问题

问题根源

你请求报错的核心原因是URL路径中的{subscriber_hash}没有替换为实际有效值,你直接把字面量字符串{subscriber_hash}拼接到了请求地址中,导致Mailchimp无法匹配到正确的单成员操作端点,服务端误将请求判定为新增成员操作,检测到邮箱已存在后返回了400错误。

subscriber_hash的获取方式

这个参数不需要提前调用接口查询,按照Mailchimp的约定规则本地即可生成:

  • 先将目标联系人的邮箱地址全部转换为小写格式
  • 对小写后的邮箱字符串做MD5哈希计算,得到的32位字符串就是需要的subscriber_hash

PHP中可以直接用内置函数生成:
$subscriber_hash = md5(strtolower($email));

修正后的完整代码
$list_id = '[LISTID]';
$authToken = '[APIKEY]';
$email = "example@example.com";
// 生成正确的subscriber_hash
$subscriber_hash = md5(strtolower($email));
$postData = array(
    "email_address" => $email,
    "status" => "subscribed"
);
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://us12.api.mailchimp.com/3.0/lists/'.$list_id.'/members/'.$subscriber_hash,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "PUT",
  CURLOPT_POSTFIELDS => json_encode($postData),
  CURLOPT_HTTPHEADER => array(
    'Authorization: apikey '.$authToken,
    "cache-control: no-cache",
    "content-type: application/json"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
注意事项
  • 计算哈希前必须把邮箱转为全小写,哪怕原始邮箱包含大写字符,大小写不一致会导致哈希值不匹配,最终触发404成员不存在的错误
  • 该哈希生成规则是Mailchimp公开约定的固定规则,不存在版本差异,所有涉及单成员操作的接口(查询、更新、删除)都使用这个值作为路径参数

内容的提问来源于stack exchange,提问作者David Xoma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:03:26