C#微信公众平台开发之高级群发接口

2019-12-30 11:47:44王冬梅

List<string> openidList = WXApi.GetOpenIDs(access_token); //获取关注者OpenID列表
拼接图文消息Json(WXMsgUtil类):


/// <summary>
/// 图文消息json
/// </summary>
public static string CreateNewsJson(string media_id, List<string> openidList)
{
 StringBuilder sb = new StringBuilder();
 sb.Append("{"touser":[");
 sb.Append(string.Join(",", openidList.ConvertAll<string>(a => """ + a + """).ToArray()));
 sb.Append("],");
 sb.Append(""msgtype":"mpnews",");
 sb.Append(""mpnews":{"media_id":"" + media_id + ""}");
 sb.Append("}");
 return sb.ToString();
}

群发代码:


resultMsg = WXApi.Send(access_token, WXMsgUtil.CreateNewsJson(newsid, openidList));


/// <summary>
/// 根据OpenID列表群发
/// </summary>
public static string Send(string access_token, string postData)
{
 return HttpRequestUtil.PostUrl(string.Format("https://www.easck.com/cgi-bin/message/mass/send?access_token={0}", access_token), postData);
}

供群发按钮调用的方法(data是传到页面的id,根据它从数据库中取数据):

 


/// <summary>
/// 群发
/// </summary>
public string Send()
{
 string type = Request["type"];
 string data = Request["data"];

 string access_token = AdminUtil.GetAccessToken(this); //获取access_token
 List<string> openidList = WXApi.GetOpenIDs(access_token); //获取关注者OpenID列表
 UserInfo loginUser = AdminUtil.GetLoginUser(this); //当前登录用户 

 string resultMsg = null;

 //发送文本
 if (type == "1")
 {
  resultMsg = WXApi.Send(access_token, WXMsgUtil.CreateTextJson(data, openidList));
 }

 //发送图片
 if (type == "2")
 {
  string path = MapPath(data);
  if (!File.Exists(path))
  {
   return "{"code":0,"msg":"要发送的图片不存在"}";
  }
  string msg = WXApi.UploadMedia(access_token, "image", path);
  string media_id = Tools.GetJsonValue(msg, "media_id");
  resultMsg = WXApi.Send(access_token, WXMsgUtil.CreateImageJson(media_id, openidList));
 }

 //发送图文消息
 if (type == "3")
 {
  DataTable dt = ImgItemDal.GetImgItemTable(loginUser.OrgID, data);
  string articlesJson = ImgItemDal.GetArticlesJsonStr(this, access_token, dt);
  string newsMsg = WXApi.UploadNews(access_token, articlesJson);
  string newsid = Tools.GetJsonValue(newsMsg, "media_id");
  resultMsg = WXApi.Send(access_token, WXMsgUtil.CreateNewsJson(newsid, openidList));
 }

 //结果处理
 if (!string.IsNullOrWhiteSpace(resultMsg))
 {
  string errcode = Tools.GetJsonValue(resultMsg, "errcode");
  string errmsg = Tools.GetJsonValue(resultMsg, "errmsg");
  if (errcode == "0")
  {
   return "{"code":1,"msg":""}";
  }
  else
  {
   return "{"code":0,"msg":"errcode:"
    + errcode + ", errmsg:"
    + errmsg + ""}";
  }
 }
 else
 {
  return "{"code":0,"msg":"type参数错误"}";
 }
}