Mailchimp API移除会员标签失败:WordPress调用返回204求助
解决Mailchimp API移除标签返回204但标签未删除的问题
我看到你已经折腾了好一阵——查了一堆帖子、试了各种方法,结果API返回204(成功无内容)但标签就是没被移除。仔细扒了你的代码,问题出在请求参数的结构和格式完全不符合Mailchimp API的要求,下面给你具体的修正方案:
问题根源分析
- 请求体位置错误:你把
tags数组直接丢在了wp_remote_post的参数顶层,但WordPress的wp_remote_post要求POST的请求内容必须放在body字段里。 - 缺少JSON编码与正确请求头:Mailchimp API只认JSON格式的请求体,同时必须在请求头里声明
Content-Type: application/json,不然服务器根本读不懂你发的标签数据。
修正后的完整代码
function post_to_third_party( $entry, $form ) { $api = 'my_api'; $list_id = 'id_list'; $current_user = wp_get_current_user(); $email = $current_user->user_email; // 生成Mailchimp要求的会员唯一ID(小写邮箱的MD5值) $member_id = md5( strtolower( $email ) ); // 拼接正确的API端点URL $api_url = 'https://' . substr( $api, strpos( $api, '-') + 1 ) . '.api.mailchimp.com/3.0/lists/' . $list_id . '/members/' . $member_id . '/tags'; // 构建符合API要求的请求体,标签数组必须包裹在tags键下 $body = json_encode( array( 'tags' => array( array( 'name' => 'gomme', 'status' => 'inactive' ) ) ) ); $response = wp_remote_post( $api_url, array( 'headers' => array( 'Authorization' => 'Basic ' . base64_encode( 'user:' . $api ), 'Content-Type' => 'application/json' // 新增:告诉服务器请求体是JSON格式 ), 'body' => $body, // 把编码后的JSON放到正确的位置 'timeout' => 10 // 可选:设置超时时间,避免请求挂起 ) ); error_log( 'gform_after_submission: response => ' . print_r( $response, true ) ); } add_action( 'gform_after_submission', 'post_to_third_party', 10, 2 );
额外验证要点
除了代码修正,你还可以检查这几个细节确保万无一失:
- 标签名称完全匹配:Mailchimp的标签名称是大小写敏感的,确认你写的
gomme和列表里实际存在的标签名称完全一致(包括大小写)。 - 会员在目标列表中:确保当前用户的邮箱确实在你指定的
list_id对应的Mailchimp列表里,不然API会返回204但不会执行任何操作。 - API密钥权限:确认你的API密钥拥有管理列表会员标签的权限(默认API密钥都有这个权限,但如果是自定义权限组需要检查)。
内容的提问来源于stack exchange,提问作者C. Max
相关产品推荐
相关产品推荐

