使用 Senparc 取得微信公众平台的粉丝
功能说明
通过 UserApi.Get 接口可以快速获取公众号的关注粉丝列表。由于微信接口每次最多返回 10000 条数据,当粉丝数量超过 10000 时,需要通过 next_openid 参数进行分页循环获取。获取到 openid 列表后,再逐条调用 UserApi.Info 获取每个粉丝的详细信息。
实现代码
/// <summary>
/// 取得所有微信关注的粉丝
/// </summary>
/// <returns></returns>
public JsonResult GetUserList()
{
var accessToken = AccessTokenContainer.TryGetAccessToken(appId, appSecret);
OpenIdResultJson openIdResultJson = null;
string nextOpenid = string.Empty;
List<UserInfoJson> list = new List<UserInfoJson>();
do
{
openIdResultJson = UserApi.Get(accessToken, nextOpenid);
nextOpenid = openIdResultJson.next_openid;
if (openIdResultJson.data != null)
{
foreach (string openid in openIdResultJson.data.openid)
{
UserInfoJson userJson = UserApi.Info(accessToken, openid);
list.Add(userJson);
}
}
} while (openIdResultJson != null && !string.IsNullOrEmpty(openIdResultJson.next_openid));
return Json(list, JsonRequestBehavior.AllowGet);
}Code language: PHP (php)
关键点说明
UserApi.Get(accessToken, nextOpenid):获取粉丝 openid 列表。首次调用时nextOpenid传空字符串,后续传入上次返回的next_openid实现分页。UserApi.Info(accessToken, openid):根据 openid 获取单个粉丝的详细信息,返回UserInfoJson对象,包含以下常用属性:openid:用户唯一标识nickname:昵称sex:性别(1 男,2 女,0 未知)city/province/country:城市、省份、国家headimgurl:头像地址subscribe:是否关注(1 关注,0 未关注)subscribe_time:关注时间remark:备注名groupid:所属分组 ID
OpenIdResultJson主要属性:total:关注总数count:本次获取的数量data:包含openid列表的对象next_openid:下一个 openid,为空时表示已获取完毕
do...while循环确保当粉丝数超过 10000 时,能自动翻页获取全部数据。- 返回
JsonResult并设置JsonRequestBehavior.AllowGet,允许 GET 请求直接访问。
注意事项
- 当粉丝数量较大时,逐条调用
UserApi.Info会导致请求次数较多,可能触发微信 API 调用频率限制。建议在实际项目中增加缓存或批量处理机制。 - 测试账号的关注粉丝数量有限,可用于功能验证;正式环境需注意接口调用配额。
AccessTokenContainer.TryGetAccessToken()内部已处理 Token 缓存,无需每次手动刷新。
提示:如果仅需获取 openid 列表而不需要详细信息,可直接返回
openIdResultJson以减少 API 调用次数。
Previous: 取得公众号的用户组
Next: 上传临时素材——以上传一张图片为例