国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 微信小程式 微信開發(fā) asp.net微信開發(fā)(高階群發(fā)圖文)

asp.net微信開發(fā)(高階群發(fā)圖文)

Feb 22, 2017 pm 02:10 PM

這篇文章主要介紹了asp.net微信開發(fā)中有關高級群發(fā)圖文的相關內(nèi)容,需要的朋友可以參考下

上一篇介紹了如何群發(fā)文本消息,本篇將介紹如何群發(fā)圖文信息,上傳圖文信息所需的素材,界面如下:

asp.net微信開發(fā)(高階群發(fā)圖文)

我們先看從素材庫中獲取圖文素材的代碼,界面:

asp.net微信開發(fā)(高階群發(fā)圖文)

素材列表,我是使用的repeater控件,

前臺代碼如下:

 <!--彈出選擇素材窗口-->
  <p id="shownewgroup">
  <p class="closeLogin" style="height:40px; background-color:#ddd9ff; line-height:40px;"><span style="float:left; color:#000; font-size:14px; text-indent:5px;">選擇素材</span>
  <span style="float:left;margin-left:20px;"><a href="WxNewTuWen.aspx" style="color:red;" onclick="hrefurl();" class="hrefurl">新建圖文素材</a></span>
  <a class="closeloginpage"><img src="/static/imghw/default1.png"  data-src="images/close1.png"  class="lazy"   alt="" /></a>  </p>
  
  <p style="height:455px; width:100%;">
  <asp:UpdatePanel ID="UpdatePanel2" runat="server">
   <ContentTemplate>
    <p style="width:100%; height:35px; margin:10px;"><asp:LinkButton ID="LinkBtnSelect" runat="server" OnClick="LinkBtnSelect_Click" ><p style="background-image:url(&#39;images/buttonbg.png&#39;); width:111px; height:35px; float:left; line-height:35px; font-weight:bold; text-align:center;color:#fff;">確認選擇</p></asp:LinkButton>
    <span style="float:left;margin-left:20px;"><asp:LinkButton ID="LinkbtnRefresh" CssClass="LinkbtnRefresh" runat="server" OnClick="LinkbtnRefresh_Click"><p style="background-image:url(&#39;images/buttonbg.png&#39;); width:111px; height:35px; line-height:35px; font-weight:bold; text-align:center;color:#fff;">刷新</p></asp:LinkButton></span>
    <span style="float:left;margin-left:20px;"><asp:LinkButton ID="LinkBtnDelete" CssClass="LinkbtnRefresh" runat="server" OnClick="LinkBtnDelete_Click"><p style="background-image:url(&#39;images/buttonbg.png&#39;); width:111px; height:35px; line-height:35px; font-weight:bold; text-align:center;color:#fff;">刪除素材</p></asp:LinkButton></span>
    </p>
  <p style="word-wrap:break-word;" id="lbnewssucai" runat="server">
   <asp:Repeater ID="Repeatersucailist" runat="server" OnItemDataBound="Repeatersucailist_ItemDataBound">
   <ItemTemplate>
    <table style="width:100%; border-top:1px solid #edc9df; border-collapse:collapse; font-size:12px;" >
    <tr>
     <td style="width:100px;"><asp:Image ID="ImageUrl" CssClass="fenmianstyle2" runat="server" /></td>
     <td style="text-align:left; width:470px; ">
     <asp:Repeater ID="Repeatersucailist2" runat="server">
      <ItemTemplate>
      <ul style="margin:0px;padding:0px;">
       <li><%# Eval("title") %></li>
      </ul>
      </ItemTemplate>
     </asp:Repeater>
     </td>
     <td style="width:130px;">
     <asp:Label ID="lbUpate_time" runat="server" Text="Label"></asp:Label>
     </td>
     <td style="width:50px; text-align:center;">
     <asp:CheckBox ID="CheckIn" runat="server" />
     <asp:Label ID="lbmedia_id" runat="server" Visible="false" Text=""></asp:Label>
     </td>
    </tr>
    </table>
   </ItemTemplate> 
   </asp:Repeater>
   <p style="font-size:14px; height:30px; line-height:30px; text-indent:10px; border-top:1px solid #ced9df;">
   <span style="float:left;">本類型素材總數(shù)量為:</span><span style="float:left; color:red;"><asp:Label ID="lbtotal_count" runat="server" Text="0"></asp:Label></span>  
   <span style="float:left; margin-left:20px;">本次獲取的素材數(shù)量為:</span><span style="float:left; color:red;"><asp:Label ID="lbitem_count" runat="server" Text="0"></asp:Label></span>
   </p>
  </p>
   </ContentTemplate>
  </asp:UpdatePanel>
  </p>
 </p>
 <p id="shownewgroupzhezhaoceng"></p>

后臺代碼如下:

 /// <summary>
 /// 綁定圖文素材列表
 /// </summary>
 private void BindNewsSucaiList()
 {
  WeiXinServer wxs = new WeiXinServer();
  string res = "";

  ///從緩存讀取accesstoken
  string Access_token = Cache["Access_token"] as string;

  if (Access_token == null)
  {
  //如果為空,重新獲取
  Access_token = wxs.GetAccessToken();

  //設置緩存的數(shù)據(jù)7000秒后過期
  Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
  }

  string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);


  string posturl = "https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=" + Access_tokento;


  //POST數(shù)據(jù)例子: POST數(shù)據(jù)例子:{"type":TYPE,"offset":OFFSET,"count":COUNT}

  string postData = "{\"type\":\"news\",\"offset\":\"0\",\"count\":\"20\"}";

  res = wxs.GetPage(posturl, postData);

  //使用前需要引用Newtonsoft.json.dll文件
  JObject jsonObj = JObject.Parse(res);

  int groupsnum = jsonObj["item"].Count();

  List<WxNewsSucaiIteminfo> newssucaiitemlist = new List<WxNewsSucaiIteminfo>();
  List<WxNewsSuCaiItemlistinfo> WxNewsSuCaiItemlist = new List<WxNewsSuCaiItemlistinfo>();
  for (int i = 0; i < groupsnum; i++)
  {
  WxNewsSucaiIteminfo newssucaiitem = new WxNewsSucaiIteminfo();
  newssucaiitem.media_id = jsonObj["item"][i]["media_id"].ToString();
  newssucaiitem.update_time = jsonObj["item"][i]["update_time"].ToString();
  newssucaiitem.total_count = jsonObj["total_count"].ToString();
  newssucaiitem.item_count = jsonObj["item_count"].ToString();

  newssucaiitemlist.Add(newssucaiitem);
  int news_itemcount = jsonObj["item"][i]["content"]["news_item"].Count();
  if (news_itemcount > 0)
  {
   for (int j = 0; j < news_itemcount; j++)
   {
   WxNewsSuCaiItemlistinfo wnscilinfo = new WxNewsSuCaiItemlistinfo();
   wnscilinfo.title = jsonObj["item"][i]["content"]["news_item"][j]["title"].ToString();
   wnscilinfo.thumb_media_id = jsonObj["item"][i]["content"]["news_item"][j]["thumb_media_id"].ToString();
   wnscilinfo.show_cover_pic = int.Parse(jsonObj["item"][i]["content"]["news_item"][j]["show_cover_pic"].ToString());
   wnscilinfo.author = jsonObj["item"][i]["content"]["news_item"][j]["author"].ToString();
   wnscilinfo.digest = jsonObj["item"][i]["content"]["news_item"][j]["digest"].ToString();
   wnscilinfo.content = jsonObj["item"][i]["content"]["news_item"][j]["content"].ToString();
   wnscilinfo.url = jsonObj["item"][i]["content"]["news_item"][j]["url"].ToString();
   wnscilinfo.content_source_url = jsonObj["item"][i]["content"]["news_item"][j]["content_source_url"].ToString();
   wnscilinfo.media_id = newssucaiitem.media_id.ToString();
   WxNewsSuCaiItemlist.Add(wnscilinfo);
   }
  }
  }
  Session["WxNewsSuCaiItemlist"] = WxNewsSuCaiItemlist;
  this.Repeatersucailist.DataSource = newssucaiitemlist;
  this.Repeatersucailist.DataBind();
 }

再來看看,新建單圖文信息界面:

asp.net微信開發(fā)(高階群發(fā)圖文)

asp.net微信開發(fā)(高階群發(fā)圖文)

新建單圖文上傳封面,刪除封面的代碼如下:

 /// <summary>
 /// 
 /// </summary>上傳圖片文件
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected void LinkBtnFileUploadImg_Click(object sender, EventArgs e)
 {
  if (this.FileUploadImg.HasFile)
  {
  string fileContentType = FileUploadImg.PostedFile.ContentType;
  if (fileContentType == "image/bmp" || fileContentType == "image/gif" || fileContentType == "image/png" || fileContentType == "image/x-png" || fileContentType == "image/jpeg"
   || fileContentType == "image/pjpeg")
  {
   int fileSize = this.FileUploadImg.PostedFile.ContentLength;

   if (fileSize <=2097152)
   {
   string fileName = this.FileUploadImg.PostedFile.FileName; 
   // 客戶端文件路徑
   string filepath = FileUploadImg.PostedFile.FileName; //得到的是文件的完整路徑,包括文件名,如:C:\Documents and Settings\Administrator\My Documents\My Pictures\20022775_m.jpg 
   //string filepath = FileUpload1.FileName;  //得到上傳的文件名20022775_m.jpg 
   string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);//20022775_m.jpg 
   string serverpath = Server.MapPath("~/WeiXinImg/") + filename;//取得文件在服務器上保存的位置C:\Inetpub\wwwroot\WebSite1\images\20022775_m.jpg 

   this.ImgTuWen.ImageUrl = "~/WeiXinImg/" + FileUploadImg.FileName;
   this.ImgTuWen2.Visible = true;
   this.ImgTuWen2.ImageUrl = "~/WeiXinImg/" + FileUploadImg.FileName;
   this.FileUploadImg.PostedFile.SaveAs(serverpath);//將上傳的文件另存為 
   this.LinkBtnDeleteImg.Visible = true;
   Session["fileNameimg"] = this.FileUploadImg.PostedFile.FileName;


   //上傳臨時圖片素材至微信服務器,3天后微信服務器會自動刪除

   WeiXinServer wxs = new WeiXinServer();

   ///從緩存讀取accesstoken
   string Access_token = Cache["Access_token"] as string;

   if (Access_token == null)
   {
    //如果為空,重新獲取
    Access_token = wxs.GetAccessToken();

    //設置緩存的數(shù)據(jù)7000秒后過期
    Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
   }

   string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);


   //WebClient wx_upload = new WebClient();
   //wx_upload.Credentials = CredentialCache.DefaultCredentials;
   string url = string.Format("http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token={0}&type={1}", Access_tokento, "image");

   string result = HttpUploadFile(url, serverpath);

   if (result.Contains("media_id"))
   {
    //使用前需要引用Newtonsoft.json.dll文件
    JObject jsonObj = JObject.Parse(result);

    Session["imgmedia_id"] = jsonObj["media_id"].ToString();
   }


   Response.Write("<script>alert(&#39;上傳圖片成功!&#39;)</script>");
   }
   else
   {
   Response.Write("<script>alert(&#39;上傳文件不能大于2M!&#39;)</script>");
   }
   
  }
  else
  {
   Response.Write("<script>alert(&#39;只支持BMP,GIF,PNG,JPG格式的圖片!&#39;)</script>");
  }
  }
  else
  {
  Response.Write("<script>alert(&#39;請選擇圖片!&#39;)</script>");
  }
 }
 /// <summary> 
 /// Http上傳文件 
 /// </summary> 
 public static string HttpUploadFile(string url, string path)
 {
  // 設置參數(shù) 
  HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
  CookieContainer cookieContainer = new CookieContainer();
  request.CookieContainer = cookieContainer;
  request.AllowAutoRedirect = true;
  request.Method = "POST";
  string boundary = DateTime.Now.Ticks.ToString("X"); // 隨機分隔線 
  request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary;
  byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
  byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");

  int pos = path.LastIndexOf("\\");
  string fileName = path.Substring(pos + 1);

  //請求頭部信息 
  StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name=\"file\";filename=\"{0}\"\r\nContent-Type:application/octet-stream\r\n\r\n", fileName));
  byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString());

  FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
  byte[] bArr = new byte[fs.Length];
  fs.Read(bArr, 0, bArr.Length);
  fs.Close();

  Stream postStream = request.GetRequestStream();
  postStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
  postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
  postStream.Write(bArr, 0, bArr.Length);
  postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
  postStream.Close();

  //發(fā)送請求并獲取相應回應數(shù)據(jù) 
  HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  //直到request.GetResponse()程序才開始向目標網(wǎng)頁發(fā)送Post請求 
  Stream instream = response.GetResponseStream();
  StreamReader sr = new StreamReader(instream, Encoding.UTF8);
  //返回結(jié)果網(wǎng)頁(html)代碼 
  string content = sr.ReadToEnd();
  return content;
 } 
 /// <summary>
 /// 刪除圖片
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected void LinkBtnDeleteImg_Click(object sender, EventArgs e)
 {
  string filename = Session["fileNameimg"].ToString();

  if (!string.IsNullOrEmpty(filename))//確保picPath有值并且不為空。
  {
  
  string serverpath = Server.MapPath("~/WeiXinImg/") + filename;//取得文件在服務器上保存的位置C:\Inetpub\wwwroot\WebSite1\images\20022775_m.jpg 

  if (File.Exists(serverpath))
  {
   try
   {
   File.Delete(serverpath);
   this.ImgTuWen.ImageUrl = "weixinimg/fengmiandefault.jpg";
   this.ImgTuWen2.Visible = false;
   this.ImgTuWen2.ImageUrl = "";
   Session["fileNameimg"] = null;
   this.LinkBtnDeleteImg.Visible = false;
   }
   catch(Exception ex)
   {
   //錯誤處理:
   Response.Write(ex.Message.ToString());
   }
  }
  }
 }

新建單圖文預覽代碼如下:

 /// <summary>
 /// 預覽圖文消息
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected void LinkBtnSendPreview_Click(object sender, EventArgs e)
 {
  Session["media_id"] = null;

  //非空驗證
  if (String.IsNullOrWhiteSpace(this.txttuwen_title.Value.ToString()))
  {
  ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;請輸入圖文標題!&#39;);", true);
  this.txttuwen_title.Focus();
  return;
  }
  if (this.ImgTuWen2.ImageUrl.ToString().Equals(""))
  {
  ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;必須上傳一張圖片!&#39;);", true);
  this.ImgTuWen2.Focus();
  return;
  }
  if (String.IsNullOrWhiteSpace(this.tbContent.InnerText.ToString()))
  {
  ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;請輸入正文內(nèi)容!&#39;);", true);
  this.tbContent.Focus();
  return;
  }

  //對各項進行賦值
  WeiXinServer wxs = new WeiXinServer();

  ///從緩存讀取accesstoken
  string Access_token = Cache["Access_token"] as string;

  if (Access_token == null)
  {
  //如果為空,重新獲取
  Access_token = wxs.GetAccessToken();

  //設置緩存的數(shù)據(jù)7000秒后過期
  Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
  }

  string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);



  //POST數(shù)據(jù)例子: POST數(shù)據(jù)例子:
  //{
  // "articles": [{
  // "title": TITLE,
  // "thumb_media_id": THUMB_MEDIA_ID,
  // "author": AUTHOR,
  // "digest": DIGEST,
  // "show_cover_pic": SHOW_COVER_PIC(0 / 1),
  // "content": CONTENT,
  // "content_source_url": CONTENT_SOURCE_URL
  // },
  // //若新增的是多圖文素材,則此處應還有幾段articles結(jié)構(gòu)
  // ]
  //}

  string isshow_cover_pic = "";
  if (this.CheckFengMianShow.Checked)
  {
  isshow_cover_pic = "1";
  }
  else
  {
  isshow_cover_pic = "0";
  }


  string description = NoHTML(this.tbContent.InnerText.ToString());

  
  string postData = "{\"articles\":[{\"title\":\"" + this.txttuwen_title.Value.ToString() +
  "\",\"thumb_media_id\":\"" + Session["imgmedia_id"].ToString() +
  "\",\"author\":\"" + this.txttuwen_author.Value.ToString() +
  "\",\"digest\":\"" + this.txtzhaiyao.InnerText.ToString() +
   "\",\"show_cover_pic\":\"" + isshow_cover_pic +
   "\",\"content\":\"" + description +
   "\",\"content_source_url\":\"" + this.txtYuanWenUrl.Text.ToString() +
   "\"}]}";

  string posturl = string.Format("https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token={0}", Access_tokento);

  string jsonres = PostUrl(posturl, postData);


  if (jsonres.Contains("media_id"))
  {
  //使用前需要引用Newtonsoft.json.dll文件
  JObject jsonObj = JObject.Parse(jsonres);

  if (this.txttoUserName.Value.ToString().Trim().Equals("請輸入用戶微信號"))
  {
   ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;請輸入接收消息的用戶微信號!&#39;);", true);
   return;
  }



  string posturls = "https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=" + Access_tokento;

  //預覽圖文消息的json數(shù)據(jù){
  // "touser":"OPENID", 可改為對微信號預覽,例如towxname:zhangsan
  // "mpnews":{  
  //  "media_id":"123dsdajkasd231jhksad"  
  //  },
  // "msgtype":"mpnews" 
  //}
  string postDatas = "{\"towxname\":\"" + this.txttoUserName.Value.ToString() +
     "\",\"mpnews\":{\"media_id\":\"" + jsonObj["media_id"].ToString() +
     "\"},\"msgtype\":\"mpnews\"}";

  string tuwenres = wxs.GetPage(posturls, postDatas);

  //使用前需藥引用Newtonsoft.json.dll文件
  JObject jsonObjss = JObject.Parse(tuwenres);

  if (jsonObjss["errcode"].ToString().Equals("0"))
  {
   ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;發(fā)送預覽成功!!&#39;);", true);
   return;
  }
  else
  {
   ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;發(fā)送預覽失敗??!&#39;);", true);
   return;
  }
  }
 }
 public static string NoHTML(string Htmlstring)
 {

  //刪除腳本 
  Htmlstring = Regex.Replace(Htmlstring, @"<script[^>]*?>.*?</script>", "", RegexOptions.IgnoreCase);

  //替換標簽
  Htmlstring = Htmlstring.Replace("\r\n", " ");
  Htmlstring = Htmlstring.Replace("\"", "&#39;");
  Htmlstring = Htmlstring.Replace(" ", " ");
  return Htmlstring;

 }

單擊確定按鈕代碼如下:

 /// <summary>
 /// 確認選擇
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected void LinkBtnSubSave_Click(object sender, EventArgs e)
 {
  Session["media_id"] = null;
  //非空驗證
  if (String.IsNullOrWhiteSpace(this.txttuwen_title.Value.ToString()))
  {
  ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;請輸入圖文標題!&#39;);", true);
  return;
  }
  if (this.ImgTuWen2.ImageUrl.ToString().Equals(""))
  {
  ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;必須上傳一張圖片!&#39;);", true);
  return;
  }
  if (String.IsNullOrWhiteSpace(this.tbContent.InnerText.ToString()))
  {
  ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;請輸入正文內(nèi)容!&#39;);", true);
  return;
  }

  //對各項進行賦值
  WeiXinServer wxs = new WeiXinServer();

  ///從緩存讀取accesstoken
  string Access_token = Cache["Access_token"] as string;

  if (Access_token == null)
  {
  //如果為空,重新獲取
  Access_token = wxs.GetAccessToken();

  //設置緩存的數(shù)據(jù)7000秒后過期
  Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
  }

  string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);



  //POST數(shù)據(jù)例子: POST數(shù)據(jù)例子:
  //{
  // "articles": [{
  // "title": TITLE,
  // "thumb_media_id": THUMB_MEDIA_ID,
  // "author": AUTHOR,
  // "digest": DIGEST,
  // "show_cover_pic": SHOW_COVER_PIC(0 / 1),
  // "content": CONTENT,
  // "content_source_url": CONTENT_SOURCE_URL
  // },
  // //若新增的是多圖文素材,則此處應還有幾段articles結(jié)構(gòu)
  // ]
  //}

  string isshow_cover_pic = "";
  if (this.CheckFengMianShow.Checked)
  {
  isshow_cover_pic = "1";
  }
  else
  {
  isshow_cover_pic = "0";
  }

  string description = NoHTML(this.tbContent.InnerText.ToString());


  string postData = "{\"articles\":[{\"title\":\"" + this.txttuwen_title.Value.ToString() +
  "\",\"thumb_media_id\":\"" + Session["imgmedia_id"].ToString() +
  "\",\"author\":\"" + this.txttuwen_author.Value.ToString() +
  "\",\"digest\":\"" + this.txtzhaiyao.InnerText.ToString() +
   "\",\"show_cover_pic\":\"" + isshow_cover_pic +
   "\",\"content\":\"" + description +
   "\",\"content_source_url\":\"" + this.txtYuanWenUrl.Text.ToString() +
   "\"}]}";

  string posturl = string.Format("https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token={0}", Access_tokento);

  string jsonres = PostUrl(posturl, postData);


  if (jsonres.Contains("media_id"))
  {
  //使用前需要引用Newtonsoft.json.dll文件
  JObject jsonObj = JObject.Parse(jsonres);

  WxMpNewsInfo wmninfo = new WxMpNewsInfo();
  wmninfo.title = this.txttuwen_title.Value.ToString();
  wmninfo.contents = description.ToString();
  wmninfo.ImageUrl = this.ImgTuWen.ImageUrl.ToString();
  Session["wmninfo"] = wmninfo;
  Response.Redirect("WxMassManage.aspx?media_id=" + jsonObj["media_id"].ToString());
  }
 }
 /// <summary> 
 /// 請求Url,發(fā)送數(shù)據(jù) 
 /// </summary> 
 public static string PostUrl(string url, string postData)
 {
  byte[] data = Encoding.UTF8.GetBytes(postData);

  // 設置參數(shù) 
  HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
  CookieContainer cookieContainer = new CookieContainer();
  request.CookieContainer = cookieContainer;
  request.AllowAutoRedirect = true;
  request.Method = "POST";
  request.ContentType = "application/x-www-form-urlencoded";
  request.ContentLength = data.Length;
  Stream outstream = request.GetRequestStream();
  outstream.Write(data, 0, data.Length);
  outstream.Close();

  //發(fā)送請求并獲取相應回應數(shù)據(jù) 
  HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  //直到request.GetResponse()程序才開始向目標網(wǎng)頁發(fā)送Post請求 
  Stream instream = response.GetResponseStream();
  StreamReader sr = new StreamReader(instream, Encoding.UTF8);
  //返回結(jié)果網(wǎng)頁(html)代碼 
  string content = sr.ReadToEnd();
  return content;
 }

Response.Redirect("WxMassManage.aspx?media_id=" + jsonObj["media_id"].ToString());
這句代碼就是將上傳圖文后得到的media_Id參數(shù)傳送到群發(fā)界面,群發(fā)界面接收代碼如下:

 protected void Page_Load(object sender, EventArgs e)
 {
  if(!Page.IsPostBack)
  {
  BindNewsSucaiList();//綁定素材列表
  BindGroupList();//綁定分組列表
  BindMassCount();//綁定本月已群發(fā)條數(shù)
  this.DataBind();
  if (Request.QueryString["media_id"] != null)
  {
   this.RadioBtnList.SelectedValue = "1";
   this.showExpress.Visible = false;
   this.txtwenben.Visible = false;
   this.tuwen.Visible = true;
   this.tuwenxuan.Visible = false;
   this.tuwenjian.Visible = false;
   this.lbtuwenmedai_id.Visible = true;
   this.lbtuwenmedai_id.Text = Request.QueryString["media_id"].ToString();
   this.LinkBtndeletetuwen.Visible = true;
   this.Imageyixuan.Visible = true;
  }
  }
 }

最終界面如下:

asp.net微信開發(fā)(高階群發(fā)圖文)

我這里只接收了一個media_id值,相對于做的簡單,直接將值賦值給了一個label用于顯示,也可以做成像官網(wǎng)那樣,確定選擇后,按照圖文樣式顯示.

asp.net微信開發(fā)(高階群發(fā)圖文)

最后一步:群發(fā)按鈕代碼:其實上一章已經(jīng)將代碼貼出去了,這一章,我就單獨貼一遍吧。

 /// <summary>
  /// 群發(fā)
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  protected void LinkBtnSubSend_Click(object sender, EventArgs e)
  {
   //根據(jù)單選按鈕判斷類型,//如果選擇的是圖文消息
   if (this.RadioBtnList.SelectedValue.ToString().Equals("1"))
   {
    if (String.IsNullOrWhiteSpace(this.lbtuwenmedai_id.Text.ToString().Trim()))
    {
     ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;請選擇或新建圖文素材再進行群發(fā)!&#39;);", true);
     return;
    }

    WxMassService wms = new WxMassService();

    List<WxMassInfo> wxmaslist = wms.GetMonthMassCount();

    if (wxmaslist.Count >= 4)
    {
     ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;本月可群發(fā)消息數(shù)量已達上限!&#39;);", true);
     return;
    }
    else
    {
     
     //如何群發(fā)類型為全部用戶,根據(jù)openID列表群發(fā)給全部用戶,訂閱號不可用,服務號認證后可用
     if (this.DDLMassType.SelectedValue.ToString().Equals("0"))
     {
      StringBuilder sbs = new StringBuilder();
      sbs.Append(GetAllUserOpenIDList());

      WeiXinServer wxs = new WeiXinServer();

      ///從緩存讀取accesstoken
      string Access_token = Cache["Access_token"] as string;

      if (Access_token == null)
      {
       //如果為空,重新獲取
       Access_token = wxs.GetAccessToken();

       //設置緩存的數(shù)據(jù)7000秒后過期
       Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
      }

      string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);


      string posturl = "https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=" + Access_tokento;

      ///群發(fā)POST數(shù)據(jù)示例如下: 
      // {
      // "touser":[
      // "OPENID1",
      // "OPENID2"
      // ],
      // "mpnews":{
      //  "media_id":"123dsdajkasd231jhksad"
      // },
      // "msgtype":"mpnews"
      //}

      string postData = "{\"touser\":[" + sbs.ToString() +
       "],\"mpnews\":{\"media_id\":\"" + this.lbtuwenmedai_id.Text.ToString() +
       "\"},\"msgtype\":\"mpnews\"}";


      string tuwenres = wxs.GetPage(posturl, postData);

      //使用前需藥引用Newtonsoft.json.dll文件
      JObject jsonObj = JObject.Parse(tuwenres);

      if (jsonObj["errcode"].ToString().Equals("0"))
      {
       Session["media_id"] = null;
       WxMassInfo wmi = new WxMassInfo();
       if (Session["wmninfo"] != null)
       {
        WxMpNewsInfo wmninfo = Session["wmninfo"] as WxMpNewsInfo;

        wmi.title = wmninfo.title.ToString();
        wmi.contents = wmninfo.contents.ToString();
        wmi.ImageUrl = wmninfo.ImageUrl.ToString();


        wmi.type = "圖文";

        if (this.DDLMassType.SelectedValue.ToString().Equals("0"))
        {
         wmi.massObject = this.DDLMassType.SelectedItem.Text.ToString();
        }
        else
        {
         wmi.massObject = this.DDLGroupList.SelectedItem.Text.ToString();
        }

        wmi.massStatus = "成功";//群發(fā)成功之后返回的狀態(tài)碼
        wmi.massMessageID = jsonObj["msg_id"].ToString();//群發(fā)成功之后返回的消息ID

        wmi.massDate = System.DateTime.Now.ToString();

        int num = wms.AddWxMassInfo(wmi);

        if (num > 0)
        {
         Session["wmninfo"] = null;
         ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;群發(fā)任務已提交成功?。?!數(shù)據(jù)已保存!&#39;);location=&#39;WxMassManage.aspx&#39;;", true);
         return;
        }
        else
        {
         ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;群發(fā)任務已提交成功!?。?shù)據(jù)保存失??!&#39;);", true);
         return;
        }
       }
       else
       {
        wmi.title = "";
        wmi.contents = "";
        wmi.ImageUrl = "";
        wmi.type = "圖文";

        if (this.DDLMassType.SelectedValue.ToString().Equals("0"))
        {
         wmi.massObject = this.DDLMassType.SelectedItem.Text.ToString();
        }
        else
        {
         wmi.massObject = this.DDLGroupList.SelectedItem.Text.ToString();
        }

        wmi.massStatus = "成功";//群發(fā)成功之后返回的狀態(tài)碼
        wmi.massMessageID = jsonObj["msg_id"].ToString();//群發(fā)成功之后返回的消息ID

        wmi.massDate = System.DateTime.Now.ToString();

        int num = wms.AddWxMassInfo(wmi);

        if (num > 0)
        {
         Session["wmninfo"] = null;
         ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;群發(fā)任務已提交成功?。?!圖文部分數(shù)據(jù)已保存!&#39;);location=&#39;WxMassManage.aspx&#39;;", true);
         return;
        }
        else
        {
         ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;群發(fā)任務已提交成功?。?!數(shù)據(jù)保存失??!&#39;);", true);
         return;
        }
       }
      }
      else
      {
       ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;群發(fā)任務提交失敗??!&#39;);", true);
       return;
      }


     }
     else
     {
      //根據(jù)分組進行群發(fā),訂閱號和服務號認證后均可用

      string group_id = this.DDLGroupList.SelectedValue.ToString();


      WeiXinServer wxs = new WeiXinServer();

      ///從緩存讀取accesstoken
      string Access_token = Cache["Access_token"] as string;

      if (Access_token == null)
      {
       //如果為空,重新獲取
       Access_token = wxs.GetAccessToken();

       //設置緩存的數(shù)據(jù)7000秒后過期
       Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
      }

      string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);


      string posturl = "https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=" + Access_tokento;

      ///群發(fā)POST數(shù)據(jù)示例如下: 
      // {
      // "filter":{
      //  "is_to_all":false
      //  "group_id":"2"
      // },
      // "mpnews":{
      //  "media_id":"123dsdajkasd231jhksad"
      // },
      // "msgtype":"mpnews"
      //}

      string postData = "{\"filter\":{\"is_to_all\":\"false\"\"group_id\":\""+group_id+
       "\"},\"mpnews\":{\"media_id\":\"" + this.lbtuwenmedai_id.Text.ToString() +
       "\"},\"msgtype\":\"mpnews\"}";


      string tuwenres = wxs.GetPage(posturl, postData);

      //使用前需藥引用Newtonsoft.json.dll文件
      JObject jsonObj = JObject.Parse(tuwenres);

      if (jsonObj["errcode"].ToString().Equals("0"))
      {
       Session["media_id"] = null;
       WxMassInfo wmi = new WxMassInfo();
       if (Session["wmninfo"] != null)
       {
        WxMpNewsInfo wmninfo = Session["wmninfo"] as WxMpNewsInfo;

        wmi.title = wmninfo.title.ToString();
        wmi.contents = wmninfo.contents.ToString();
        wmi.ImageUrl = wmninfo.ImageUrl.ToString();


        wmi.type = "圖文";

        if (this.DDLMassType.SelectedValue.ToString().Equals("0"))
        {
         wmi.massObject = this.DDLMassType.SelectedItem.Text.ToString();
        }
        else
        {
         wmi.massObject = this.DDLGroupList.SelectedItem.Text.ToString();
        }

        wmi.massStatus = "成功";//群發(fā)成功之后返回的狀態(tài)碼
        wmi.massMessageID = jsonObj["msg_id"].ToString();//群發(fā)成功之后返回的消息ID

        wmi.massDate = System.DateTime.Now.ToString();

        int num = wms.AddWxMassInfo(wmi);

        if (num > 0)
        {
         Session["wmninfo"] = null;
         ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;群發(fā)任務已提交成功!?。?shù)據(jù)已保存!&#39;);location=&#39;WxMassManage.aspx&#39;;", true);
         return;
        }
        else
        {
         ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;群發(fā)任務已提交成功!?。?shù)據(jù)保存失??!&#39;);", true);
         return;
        }
       }
       else
       {
        wmi.title = "";
        wmi.contents = "";
        wmi.ImageUrl = "";
        wmi.type = "圖文";

        if (this.DDLMassType.SelectedValue.ToString().Equals("0"))
        {
         wmi.massObject = this.DDLMassType.SelectedItem.Text.ToString();
        }
        else
        {
         wmi.massObject = this.DDLGroupList.SelectedItem.Text.ToString();
        }

        wmi.massStatus = "成功";//群發(fā)成功之后返回的狀態(tài)碼
        wmi.massMessageID = jsonObj["msg_id"].ToString();//群發(fā)成功之后返回的消息ID

        wmi.massDate = System.DateTime.Now.ToString();

        int num = wms.AddWxMassInfo(wmi);

        if (num > 0)
        {
         Session["wmninfo"] = null;
         ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;群發(fā)任務已提交成功!?。D文部分數(shù)據(jù)已保存!&#39;);location=&#39;WxMassManage.aspx&#39;;", true);
         return;
        }
        else
        {
         ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;群發(fā)任務已提交成功?。?!數(shù)據(jù)保存失??!&#39;);", true);
         return;
        }
       }
      }
      else
      {
       ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;群發(fā)任務提交失敗?。?amp;#39;);", true);
       return;
      }
     }
    }
   }
  }

為什么叫群發(fā)任務提交成功或失敗,因為將信息提交給微信服務器,微信服務器還需審核,審核過程中也有可能審核不通過,不給于群發(fā),所以我起名叫這個,嘿嘿,隨便你們怎么起。。。。。

asp.net微信開發(fā)(高階群發(fā)圖文)

至此群發(fā)圖文信息功能,已完畢,最后是群發(fā)記錄,還記得上一章提到的群發(fā)成功之后要在本地保存記錄嗎,保存記錄的原因,用于計算當月已群發(fā)幾條信息,另外還有一個功能就是,群發(fā)成功之后,會得到一個消息msgid,根據(jù)這個ID可以對已經(jīng)發(fā)送成功的信息進行撤銷(刪除)操作,關于撤銷操作:微信官方規(guī)定,對群發(fā)成功的圖文和視頻消息,半個小時之內(nèi)可以進行刪除操作,其他消息一經(jīng)群發(fā)成功概不支持此操作。截圖如下:

asp.net微信開發(fā)(高階群發(fā)圖文)

該類用于存儲已群發(fā)記錄的實體類

 /// <summary>
 /// 微信已群發(fā)消息實體類,用于記錄已群發(fā)消息的條數(shù),信息實體
 /// </summary>
 public class WxMassInfo
 {
  public int WxMassNo { get; set; }//群發(fā)消息編號,數(shù)據(jù)庫自增列

  public string title { get; set; }//圖文消息的標題,若消息是文本類型,此項不顯示

  public string ImageUrl { get; set; }//圖片地址,若消息是文本類型,此項不顯示

  public string type { get; set; }//消息的類型,文本,圖文,圖片,語音,視頻

  public string contents { get; set; }//文本消息的內(nèi)容,圖文消息的正文

  public string massObject { get; set; }//群發(fā)對象

  public string massStatus { get; set; }//群發(fā)狀態(tài)

  public string massMessageID{ get; set; }//群發(fā)成功后返回的消息ID

  public string massDate { get; set; }//群發(fā)日期時間

 }

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助。

更多asp.net微信開發(fā)(高階群發(fā)圖文)相關文章請關注PHP中文網(wǎng)!


本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)