asp.net微信開發第八篇----永久素材管理

除了3天就會失效的臨時素材外,開發者有時須要永久保存一些素材,屆時就能夠經過本接口新增永久素材。css

最近更新,永久圖片素材新增後,將帶有URL返回給開發者,開發者能夠在騰訊系域名內使用(騰訊系域名外使用,圖片將被屏蔽)。html

請注意:數據庫

一、新增的永久素材也能夠在公衆平臺官網素材管理模塊中看到
二、永久素材的數量是有上限的,請謹慎新增。圖文消息素材和圖片素材的上限爲5000,其餘類型爲1000
三、素材的格式大小等要求與公衆平臺官網一致。具體是,圖片大小不超過2M,支持bmp/png/jpeg/jpg/gif格式,語音大小不超過5M,長度不超過60秒,支持mp3/wma/wav/amr格式
四、調用該接口需https協議

新增永久圖文素材

接口調用請求說明json

http請求方式: POST
https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=ACCESS_TOKEN

調用示例api

{
  "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結構
 ]
}

參數說明緩存

參數 是否必須 說明
title 標題
thumb_media_id 圖文消息的封面圖片素材id(必須是永久mediaID)
author 做者
digest 圖文消息的摘要,僅有單圖文消息纔有摘要,多圖文此處爲空
show_cover_pic 是否顯示封面,0爲false,即不顯示,1爲true,即顯示
content 圖文消息的具體內容,支持HTML標籤,必須少於2萬字符,小於1M,且此處會去除JS
content_source_url 圖文消息的原文地址,即點擊「閱讀原文」後的URL

返回說明服務器

{
   "media_id":MEDIA_ID
}

返回的即爲新增的圖文消息素材的media_id。微信

請注意,在圖文消息的具體內容中,將過濾外部的圖片連接,開發者能夠經過下述接口上傳圖片獲得URL,放到圖文內容中使用。session

上傳圖文消息內的圖片獲取URL 請注意,本接口所上傳的圖片不佔用公衆號的素材庫中圖片數量的5000個的限制。圖片僅支持jpg/png格式,大小必須在1MB如下。ssh

接口調用請求說明

http請求方式: POST
https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN
調用示例(使用curl命令,用FORM表單方式上傳一個圖片):
curl -F media=@test.jpg "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN"

參數說明

參數 是否必須 說明
access_token 調用接口憑證
media form-data中媒體文件標識,有filename、filelength、content-type等信息

返回說明 正常狀況下的返回結果爲:

{
    "url":  "http://mmbiz.qpic.cn/mmbiz/gLO17UPS6FS2xsypf378iaNhWacZ1G1UplZYWEYfwvuU6Ont96b1roYs CNFwaRrSaKTPCUdBK9DgEHicsKwWCBRQ/0"
}

其中url就是上傳圖片的URL,可用於後續羣發中,放置到圖文消息中。

新增其餘類型永久素材

接口調用請求說明

經過POST表單來調用接口,表單id爲media,包含須要上傳的素材內容,有filename、filelength、content-type等信息。請注意:圖片素材將進入公衆平臺官網素材管理模塊中的默認分組。

http請求方式: POST,需使用https
https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN
調用示例(使用curl命令,用FORM表單方式新增一個其餘類型的永久素材,curl命令的使用請自行查閱資料)

參數說明

參數 是否必須 說明
access_token 調用接口憑證
type 媒體文件類型,分別有圖片(image)、語音(voice)、視頻(video)和縮略圖(thumb)
media form-data中媒體文件標識,有filename、filelength、content-type等信息

新增永久視頻素材需特別注意

在上傳視頻素材時須要POST另外一個表單,id爲description,包含素材的描述信息,內容格式爲JSON,格式以下:

{
  "title":VIDEO_TITLE,
  "introduction":INTRODUCTION
}

新增永久視頻素材的調用示例:

curl "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN" -F media=@media.file -F  description='{"title":VIDEO_TITLE, "introduction":INTRODUCTION}'

參數說明

參數 是否必須 說明
title 視頻素材的標題
introduction 視頻素材的描述

返回說明

{
  "media_id":MEDIA_ID,
  "url":URL
}

返回參數說明

參數 描述
media_id 新增的永久素材的media_id
url 新增的圖片素材的圖片URL(僅新增圖片素材時會返回該字段)

錯誤狀況下的返回JSON數據包示例以下(示例爲無效媒體類型錯誤):

{"errcode":40007,"errmsg":"invalid media_id"}


先來看我本身自定義的後臺永久素材管理效果圖,以下:








再看看微信官網後臺上的顯示界面,同步的哦!







首先咱們來分析一下步驟:

第一步:若是想讓圖片在本身的頁面顯示,首先得先建個實體類吧,用來存儲素材的信息吧

/// <summary>
    /// 微信永久素材實體類,用於保存永久素材上傳至微信服務器後返回的數據
    /// </summary>
   public class WxSuCaiInfo
    {
        public int SuCaiId { get; set; }//自增列序號

       public string SuCaiUrl { get; set; }// 存儲文件名

       public string SuCaiType { get; set; }//素材類型,可分爲image,voice,video,thumb(縮略圖)

       public string SuCaiTitle { get; set; }//圖文消息的標題

       public string SuCaiDigest { get; set; }//圖文消息的摘要


       public string SuCaiauthor { get; set; }//圖文消息的做者
       public string SuCaishow_cover_pic { get; set; }//圖文消息是否顯示封面.保存0或1

       public string SuCaicontent { get; set; }//圖文消息的正文內容
       public string SuCaicontent_source_url { get; set; }//圖文消息的原文連接


       public string media_ID { get; set; }//上傳至微信服務器後,返回的永久mediaID


       public string Url { get; set; }//上傳至微信服務器後,返回的圖片URL,僅圖片纔會返回此屬性

       public string uploadDate { get; set; }//上傳日期時間


    }
View Code

 

 第二步:上傳圖片至微信服務器,成功後將返回的media_id和url兩個字段數據和其餘字段數據一併保存到本地服務器,上傳的代碼以下:

 /// <summary>
        /// 上傳圖片至微信服務器,而且本地也保存一份
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void LinBtnUploadImg_Click(object sender, EventArgs e)
        {
            if (this.FileUploadImage.HasFile)
            {
                string fileContentType = FileUploadImage.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.FileUploadImage.PostedFile.ContentLength;

                    if (fileSize <= 2097152)
                    {
                        string fileName = this.FileUploadImage.PostedFile.FileName;
                        // 客戶端文件路徑
                        string filepath = FileUploadImage.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.FileUploadImage.PostedFile.SaveAs(serverpath);//將上傳的文件另存爲 


                        //上傳圖片素材至微信服務器,永久保存

                        WeiXinServer wxs = new WeiXinServer();

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

                        if (Access_token == null)
                        {
                            //若是爲空,從新獲取
                            Access_token = wxs.GetAccessToken();

                            //設置緩存的數據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 url = string.Format("http://api.weixin.qq.com/cgi-bin/material/add_material?access_token={0}&type={1}", Access_tokento,"image");

                        try
                        {

                            string res = HttpUploadFile(url, serverpath);
                            //判斷res結果集裏面是否包含media_id
                            if (res.Contains("media_id"))
                            {
                                //若是能進行到這裏,那說明圖片已經上傳至微信服務器,是永久素材哦,
                                //開始解析json串,使用前須要引用Newtonsoft.json.dll文件
                                JObject jsonObj = JObject.Parse(res);

                              

                                //圖片上傳成功後,返回的是兩個字段,media_id和url


                                //將兩個字段開始存入數據庫,保存數據,方便獲取列表的時候直接從本地服務器讀取
                                WxSuCaiInfo wsc = new WxSuCaiInfo();

                                wsc.SuCaiUrl = filename;//注意,這裏保存的圖片名稱

                                wsc.SuCaiType = "image";//文件類型

                                wsc.media_ID = jsonObj["media_id"].ToString();//這個屬性保存的是微信返回的media_id

                                wsc.Url = jsonObj["url"].ToString();//這個屬性保存的纔是微信返回的url

                                wsc.uploadDate = System.DateTime.Now.ToString();//記錄當前文件上傳日期時間

                                //存入數據庫
                                WxSuCaiService wscs = new WxSuCaiService();


                                int num = wscs.AddWxSuCaiInfo(wsc);

                                if (num > 0)
                                {
                                    Response.Write("<script>alert('上傳圖片素材成功!');location='WxSuCaiMannageImageList.aspx';</script>");
                                }
                                else
                                {
                                    Response.Write("<script>alert('上傳圖片素材失敗!');location='WxSuCaiMannageImageList.aspx';</script>");
                                }
                            }
                        }
                        catch(Exception ex)
                        {
                            Response.Write(ex.Message.ToString());
                        }
                    }
                    else
                    {
                        Response.Write("<script>alert('上傳文件不能大於2M!')</script>");
                    }

                }
                else
                {
                    Response.Write("<script>alert('只支持BMP,GIF,PNG,JPG,JPEG格式的圖片!')</script>");
                }
            }
            else
            {
                Response.Write("<script>alert('請選擇圖片!')</script>");
            }
        }
View Code

 

走到這其實效果已經出來了,接下來看最後一步就是刪除選中的素材,刪除微信遠程服務器的數據--再刪除本地服務器的數據,有人問難道這個還有順序?
其實你能夠想象,若是微信服務器的圖片沒有刪除成功,你先把本地服務器的圖片刪除了,那就和官網同步不了了。

第三步:刪除素材
  /// <summary>
        /// 全選全不選
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void CheckAll_CheckedChanged(object sender, EventArgs e)
        {
            foreach (DataListItem item in this.DLSuCaiImageList.Items)
            {
                CheckBox checkIn = item.FindControl("CheckIn") as CheckBox;
                checkIn.Checked = CheckAll.Checked;
            }
        }
        /// <summary>
        /// 刪除選中項
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void LinkBtnDeleteSelected_Click(object sender, EventArgs e)
        {
            Boolean ischeck = false;

            foreach (DataListItem item in this.DLSuCaiImageList.Items)
            {
                CheckBox checkIn = item.FindControl("CheckIn") as CheckBox;
                if (checkIn.Checked)
                {
                    ischeck = true;
                    Label lbSuCaiId = item.FindControl("lbSuCaiId") as Label;
                    Label lbSuCaiUrl = item.FindControl("lbSuCaiUrl") as Label;
                    Label lbmedia_ID = item.FindControl("lbmedia_ID") as Label;
                 
                    //刪除微信服務器上的圖片
                    WeiXinServer wxs = new WeiXinServer();
                    string res = "";

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

                    if (Access_token == null)
                    {
                        //若是爲空,從新獲取
                        Access_token = wxs.GetAccessToken();

                        //設置緩存的數據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/del_material?access_token=" + Access_tokento;


                    //POST數據例子:  POST數據例子:{"media_id":MEDIA_ID}

                    string media_id = lbmedia_ID.Text.ToString();

                    string postData = "{\"media_id\":\"" + media_id + "\"}";

                    res = wxs.GetPage(posturl, postData);

                    if (res.Contains("errcode"))
                    {
                        //開始解析json串,使用前須要引用Newtonsoft.json.dll文件
                        JObject jsonObj = JObject.Parse(res);

                        if (jsonObj["errcode"].ToString().Equals("0"))
                        {

                            ///獲取本地服務器的路徑
                            string serverPathss = Server.MapPath("~/WeiXinImg/") + lbSuCaiUrl.Text.ToString();
                            //驗證本地服務的路徑是否存在該圖片
                            if (File.Exists(serverPathss))
                            {
                                //若是存在就刪除
                                File.Delete(serverPathss);
                            }

                            WxSuCaiService wscs = new WxSuCaiService();
                            //經過media_id刪除本地服務器數據庫記錄
                            int num = wscs.DeleteWxSuCaiInfo(lbmedia_ID.Text.ToString());
                            if (num > 0)
                            {
                                Response.Write("<script>alert('圖片素材刪除成功!');location='WxSuCaiMannageImageList.aspx';</script>");
                            }
                            else
                            {
                                Response.Write("<script>alert('微信服務器圖片刪除成功!本地服務器圖片素材刪除失敗!');location='WxSuCaiMannageImageList.aspx';</script>");
                            }
                        }
                    }  
                }
            }
            if (!ischeck)
            {
                ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('請先選中刪除項!!!')", true);
                return;
            }
        }
View Code

 

最後是頁面的代碼一併奉上,研究不透可再諮詢我哦

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
      <link href="css/style.css" rel="Stylesheet" type="text/css" />
    <style type="text/css">
        .meun { width:1100px; height:40px; margin-left:20px; line-height:40px; margin-top:10px;border-bottom:1px solid #d6d6d6;
        }
        .meun ul { padding:0px; margin:0px;
        }
         .meun ul li{  float:left; width:100px; text-align:center;list-style:none;
        }
         .meun ul li:hover{  border-bottom:3px solid #ecd9df; cursor:pointer;
        }
        a:hover { color:#000;
        }
        .checkedstyle { border-bottom:3px solid #208008;
        }
        .meun_imglist { width:1050px; min-height:300px; border:1px solid #d6d6d6; margin-top:20px; margin-left:35px; margin-bottom:30px;
        }
        .uploadstyle { width:300px; background-image:url('images/inputbg.gif'); background-repeat:repeat-x; height:35px; border:1px solid #d6d6d6; float:left; margin-bottom:10px; line-height:35px;
        }
        .CheckAll { float:left; padding:5px;
        }
        .CheckIn { float:left; padding:2px;
        }
        .DLSuCaiImageList { margin-top:10px; margin-left:10px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div class="place">
        <span>位置:</span>
        <ul class="placeul">
            <li><a href="WelCome.aspx" target="rightFrame">首頁</a></li>
            <li>微信管理</li>
            <li>德橋員工服務中心--素材管理</li>
        </ul>
      </div>
         <div style="height:30px; line-height:30px; margin-top:10px; margin-left:45px;"><span style="float:left; font-size:16px;">素材管理</span><span style="color:red; float:left; margin-left:20px;">永久素材和微信官網同步,您在這裏所操做的任何一項,將影響到官網後臺素材管理,謹慎操做!</span></div>
       <div class="meun">
           <ul>
               <li><a href="WxSuCaiManageList.aspx">圖文消息</a></li>
               <li class="checkedstyle"><a href="WxSuCaiMannageImageList.aspx">圖片庫</a></li>
               <li><a href="#">語音</a></li>
               <li><a href="#">視頻</a></li>
           </ul>
       </div>
      <div class="meun_imglist">
          <div style="margin:5px auto 10px 10px; height:36px; line-height:36px;">
              <asp:FileUpload ID="FileUploadImage" CssClass="uploadstyle" runat="server" /> 
              <asp:LinkButton ID="LinBtnUploadImg" runat="server" OnClick="LinBtnUploadImg_Click"><span style="background-image:url('images/buttonbg.png'); width:111px; height:35px; line-height:35px; margin-bottom:10px; font-weight:bold; text-align:center; float:left; margin-left:10px; color:#fff;">上傳</span></asp:LinkButton>
              <span  style="margin-left:30px; color:red;" >&nbsp;&nbsp;支持jpg,gif,png,bmp格式圖片,大小2M內,如上傳成功後,圖片未能顯示,請將圖片從新命名後再嘗試上傳.</span>
          </div>
          <div style=" clear:both;line-height:35px; margin:10px auto auto auto; height:35px; width:1030px; background-color:#f6f6f6; border-radius:5px; border-bottom:1px solid #d6d6d6;">
              <asp:CheckBox ID="CheckAll" CssClass="CheckAll" AutoPostBack="true" runat="server" OnCheckedChanged="CheckAll_CheckedChanged"  />&nbsp;&nbsp;<span style="float:left; padding:3px;">全選</span>
              <asp:LinkButton ID="LinkBtnDeleteSelected" runat="server" OnClick="LinkBtnDeleteSelected_Click"><span style="width:111px; height:25px; line-height:25px; font-weight:bold; text-align:center; float:left; margin-left:15px; color:#000; background-color:#fff; margin-top:5px; border:1px solid #ecd9df; border-radius:3px;">刪除選中</span></asp:LinkButton>
          </div>
          
          <asp:DataList ID="DLSuCaiImageList" CssClass="DLSuCaiImageList" runat="server" RepeatColumns="6">
              <ItemTemplate>
                  <div style="width:150px; height:180px; margin-right:22px;margin-bottom:15px; border:1px solid #d9d9d9;">
                      <img src='../WeiXinImg/<%# Eval("SuCaiUrl") %>' style="height:120px; width:150px; border:0px;" />
                      <div style="width:150px;height:25px; line-height:25px; text-indent:3px; border-top:1px solid #d9d9d9;">
                          <asp:CheckBox ID="CheckIn" CssClass="CheckIn" runat="server" />
                          <asp:Label ID="lbSuCaiUrl" ToolTip='<%# Eval("SuCaiUrl")%>' runat="server" Text='<%# Eval("SuCaiUrl").ToString().Length>8?Eval("SuCaiUrl").ToString().Substring(0,8)+"...":Eval("SuCaiUrl").ToString() %>'></asp:Label>
                      </div>
                      <div style=" clear:both; width:150px;height:25px; line-height:25px; text-indent:5px; border-top:1px solid #d9d9d9;">
                          <%# Eval("uploadDate").ToString().Length>20?Eval("uploadDate").ToString().Substring(0,20)+"...":Eval("uploadDate").ToString() %>
                          <asp:Label ID="lbSuCaiId" runat="server" Visible="false" Text='<%# Eval("SuCaiId") %>'></asp:Label>
                          <asp:Label ID="lbmedia_ID" runat="server" Visible="false" Text='<%# Eval("media_ID") %>'></asp:Label>
                      </div>
                  </div>
              </ItemTemplate>
          </asp:DataList>

      </div>
    </form>
</body>
</html>
View Code

 

其餘素材上傳都相似,我就不一 一 介紹了。



新建圖文素材界面以下:




從圖片庫選擇圖片素材以下:



這是就是從已上傳過的圖片庫中選擇的,和圖片素材管理界面的功能基本類似,只不過多了一個確認選擇的按鈕,由於確認選擇了以後,要關閉本頁,回到新建圖文頁面,主要代碼:

 /// <summary>
        /// 確認選擇,選中以後,跳轉至新建圖文頁面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void LinkBtnSubMitSelected_Click(object sender, EventArgs e)
        {

            Boolean bools = false;
            int num = 0;
            foreach (DataListItem item in this.DLSuCaiImageList.Items)
            {
                CheckBox checkIn = item.FindControl("CheckIn") as CheckBox;

                if (checkIn.Checked)
                {
                    num += 1;
                    bools = true;
                }
            }
            if (!bools)
            {
                ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('請選擇一個圖片素材!!!')", true);
                return;
            }
            if (num >= 2)
            {
                ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('您只能選擇一個圖片素材!');", true);
                return;
            }
            else
            {
                foreach (DataListItem item in this.DLSuCaiImageList.Items)
                {
                    CheckBox checkIn = item.FindControl("CheckIn") as CheckBox;

                    if (checkIn.Checked)
                    {
                        ///獲取選中圖片media_id
                        Label lbmedia_ID = item.FindControl("lbmedia_ID") as Label;
                        Session["imgmedia_id"] = lbmedia_ID.Text.ToString();
                        Response.Write("<script>alert('已選擇!');window.opener.location.reload();window.close();</script>");
                    }
                }
            }
        }
View Code

 

新建圖文的頁面在接收的時候能夠這樣:

 if (Session["imgmedia_id"] != null)
                    {
                        WxSuCaiService wscs = new WxSuCaiService();

                        WxSuCaiInfo wscinfo = wscs.GetWxSuCaiInfo(Session["imgmedia_id"].ToString());

                        if(wscinfo!=null)
                        {
                            this.ImgTuWen.ImageUrl = "~/WeiXinImg/" + wscinfo.SuCaiUrl.ToString();
                            this.ImgTuWen2.ImageUrl = "~/WeiXinImg/" + wscinfo.SuCaiUrl.ToString();
                            this.ImgTuWen2.Visible = true;
                            Session["imgmedia_id"] = wscinfo.media_ID.ToString();//圖片的media_id
                            Session["fileNameimg"] = wscinfo.SuCaiUrl.ToString();//圖片的文件名稱
                        }


                    }
View Code

 


最後新建圖文信息的效果圖以下:

 

官方後臺以下:

 


關於編輯圖文信息的關鍵代碼以下:

 /// <summary>
        /// 綁定事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void DLMpNewsList_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
            {
                LinkButton LinkBtnDeleteSucai = e.Item.FindControl("LinkBtnDeleteSucai") as LinkButton;


                LinkBtnDeleteSucai.Attributes.Add("OnClick","return confirm('您肯定刪除該圖文素材???刪除後將和微信官網同步刪除!!')");


                HyperLink HyperLinkEdit = e.Item.FindControl("HyperLinkEdit") as HyperLink;

                HyperLinkEdit.Attributes.Add("OnClick", "return confirm('即將進入編輯模式!!是否執行下一步操做??')");


                Label lbmedia_ID = e.Item.FindControl("lbmedia_ID") as Label;


                HyperLinkEdit.NavigateUrl = "WxNewTuWen.aspx?media_id=" + lbmedia_ID.Text.ToString();//把圖文消息的media_id傳參到新建圖文界面

            }
        }
View Code

 

新建圖文頁面關鍵代碼以下:

 if(!Page.IsPostBack)
            {
                ///編輯模式
                if (Request.QueryString["media_id"] != null)
                {
                    string media_id = Request.QueryString["media_id"].ToString();

                    Session["sucaimedia_id"] = media_id;

                    WxSuCaiService wscs = new WxSuCaiService();


                    WxSuCaiInfo wscinfo = wscs.GetWxSuCaiInfo(media_id);

                    if (wscinfo != null)
                    {
                        this.txttuwen_title.Value = wscinfo.SuCaiTitle.ToString();

                        if (wscinfo.SuCaiTitle.ToString().Length > 15)
                        {
                            this.biaoti_yulan.InnerText = wscinfo.SuCaiTitle.ToString().Substring(0, 15) + "...";
                        }
                        else
                        {
                            this.biaoti_yulan.InnerText = wscinfo.SuCaiTitle.ToString();
                        }

                        this.txttuwen_author.Value = wscinfo.SuCaiauthor.ToString();
                        this.txtzhaiyao.InnerText = wscinfo.SuCaiDigest.ToString();
                        this.ImgTuWen.ImageUrl = "~/WeiXinImg/" + wscinfo.SuCaiUrl.ToString();
                        this.ImgTuWen2.ImageUrl = "~/WeiXinImg/" + wscinfo.SuCaiUrl.ToString();
                        this.ImgTuWen2.Visible = true;
                        Session["imgmedia_id"] = wscinfo.SuCaithumb_media_id.ToString();
                        this.LinkBtnDeleteImg.Visible = true;

                        if (!String.IsNullOrWhiteSpace(wscinfo.SuCaicontent_source_url.ToString()))
                        {
                            this.txtYuanWenUrl.Text = wscinfo.SuCaicontent_source_url.ToString();
                            this.txtYuanWenUrl.Visible = true;
                            this.CheckYuanWen.Checked = true;
                        }

                        this.txtYuanWenUrl.Text = wscinfo.SuCaicontent_source_url.ToString();

                        this.tbContent.InnerText = wscinfo.SuCaicontent.ToString();


                        if (wscinfo.SuCaishow_cover_pic.ToString().Equals("1"))
                        {
                            this.CheckFengMianShow.Checked = true;
                        }
                        else
                        {
                            this.CheckFengMianShow.Checked = false;
                        }
                    }
                }
            }
View Code

 

 

編輯提交關鍵代碼以下:

  1  /// <summary>
  2         /// 保存圖文素材和修改按鈕公用
  3         /// </summary>
  4         /// <param name="sender"></param>
  5         /// <param name="e"></param>
  6         protected void LinkBtnSaveYongjiu_Click(object sender, EventArgs e)
  7         {
  8             //非空驗證
  9             if (String.IsNullOrWhiteSpace(this.txttuwen_title.Value.ToString()))
 10             {
 11                 ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('請輸入圖文標題!');", true);
 12                 return;
 13             }
 14             if (this.ImgTuWen2.ImageUrl.ToString().Equals(""))
 15             {
 16                 ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('必須上傳一張圖片!');", true);
 17                 return;
 18             }
 19             if (String.IsNullOrWhiteSpace(this.tbContent.InnerText.ToString()))
 20             {
 21                 ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('請輸入正文內容!');", true);
 22                 return;
 23             }
 24 
 25             //對各項進行賦值
 26             WeiXinServer wxs = new WeiXinServer();
 27 
 28             ///從緩存讀取accesstoken
 29             string Access_token = Cache["Access_token"] as string;
 30 
 31             if (Access_token == null)
 32             {
 33                 //若是爲空,從新獲取
 34                 Access_token = wxs.GetAccessToken();
 35 
 36                 //設置緩存的數據7000秒後過時
 37                 Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
 38             }
 39 
 40             string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);
 41 
 42 
 43            
 44     //根據session判斷media_id是否爲空,也可根據request.queryString["media_id"]進行判斷是否爲空
 45             if (Session["sucaimedia_id"] != null)
 46             {
 47                 //執行更新操做
 48 
 49                 //{
 50                 //  "media_id":MEDIA_ID,
 51                 //  "index":INDEX,
 52                 //  "articles": {
 53                 //       "title": TITLE,
 54                 //       "thumb_media_id": THUMB_MEDIA_ID,
 55                 //       "author": AUTHOR,
 56                 //       "digest": DIGEST,
 57                 //       "show_cover_pic": SHOW_COVER_PIC(0 / 1),
 58                 //       "content": CONTENT,
 59                 //       "content_source_url": CONTENT_SOURCE_URL
 60                 //    }
 61                 //}
 62 
 63                 string isshow_cover_pic = "";
 64                 if (this.CheckFengMianShow.Checked)
 65                 {
 66                     isshow_cover_pic = "1";
 67                 }
 68                 else
 69                 {
 70                     isshow_cover_pic = "0";
 71                 }
 72 
 73                 string description = NoHTML(this.tbContent.InnerText.ToString());
 74 
 75                 string postData = "{\"media_id\":\"" + Session["sucaimedia_id"].ToString() +
 76                     "\",\"index\":\"0\" ,\"articles\":{\"title\":\"" + this.txttuwen_title.Value.ToString() +
 77                     "\",\"thumb_media_id\":\"" + Session["imgmedia_id"].ToString() +
 78                     "\",\"author\":\"" + this.txttuwen_author.Value.ToString() +
 79             "\",\"digest\":\"" + this.txtzhaiyao.InnerText.ToString() +
 80                 "\",\"show_cover_pic\":\"" + isshow_cover_pic +
 81                 "\",\"content\":\"" + description +
 82                 "\",\"content_source_url\":\"" + this.txtYuanWenUrl.Text.ToString() +
 83                 "\"}}";
 84 
 85 
 86                 ///修改永久圖文素材
 87                 string url = string.Format("https://api.weixin.qq.com/cgi-bin/material/update_news?access_token={0}", Access_tokento);
 88 
 89                 string jsonres = PostUrl(url, postData);
 90 
 91                 if (jsonres.Contains("errcode"))
 92                 {
 93                     //使用前須要引用Newtonsoft.json.dll文件
 94                     JObject jsonObj = JObject.Parse(jsonres);
 95 
 96                     if (jsonObj["errcode"].ToString().Equals("0"))
 97                     {
 98                         //修改本地數據
 99                         //保存數據,方便獲取列表的時候直接從本地服務器讀取
100                         WxSuCaiInfo wsc = new WxSuCaiInfo();
101 
102                         wsc.SuCaiUrl = Session["fileNameimg"].ToString();//注意,這裏保存的圖片名稱
103 
104                         wsc.SuCaiTitle = this.txttuwen_title.Value.ToString();//圖文消息的標題
105 
106                         wsc.SuCaiDigest = this.txtzhaiyao.InnerText.ToString();//圖文消息的摘要
107 
108                         wsc.SuCaithumb_media_id = Session["imgmedia_id"].ToString();//圖文的消息封面media_id
109 
110                         wsc.SuCaiauthor = this.txttuwen_author.Value.ToString();
111 
112                         wsc.SuCaishow_cover_pic = isshow_cover_pic;
113 
114                         wsc.SuCaicontent = description;
115 
116                         wsc.SuCaicontent_source_url = this.txtYuanWenUrl.Text.ToString();
117 
118                         wsc.uploadDate = System.DateTime.Now.ToString();//記錄當前文件保存圖文素材日期時間
119 
120                         //修改數據庫信息
121                         WxSuCaiService wscs = new WxSuCaiService();
122 
123                         int num = wscs.UpdateWxSuCaiInfo(Session["sucaimedia_id"].ToString(), wsc);
124 
125                         if (num > 0)
126                         {
127                             Session["sucaimedia_id"] = null;
128                             Response.Write("<script>alert('圖文素材修改爲功!');location='WxSuCaiManageList.aspx';</script>");
129                         }
130                         else
131                         {
132                             Response.Write("<script>alert('圖文素材修改失敗!');</script>");
133                         }
134 
135                     }
136 
137                 }
138 
139             }
140             else
141             {
142                 //新增圖文素材
143             }
144         }                
View Code

 

 

需注意:新建圖文頁面和修改圖文頁面是公用的一個頁面.......

編輯提交按鈕和保存按鈕是公用的一個按鈕.....

相關文章
相關標籤/搜索