C# 封裝微信的模板消息

 

1.先新建一個類庫,以方便之後移植到其餘的項目上繼續使用,如何新建類庫就本身去百度了哈,這裏就不描述了,如有不會的朋友請留言哈。標紅了的都要注意下咯。數據庫

 

2.先看看WxTemplate這個類文件的代碼api

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WxTemplateMsg
{
    public class WxTemplate
    {
        /// <summary>
        /// 目標用戶OpenId
        /// </summary>
        public string touser { get; set; }
        /// <summary>
        /// 模板ID
        /// </summary>
        public string template_id { get; set; }
        /// <summary>
        /// 模板消息頂部顏色(16進制),默認爲#FF0000
        /// </summary>
        public string topcolor { get; set; }
        /// <summary>
        /// 模板跳轉連接
        /// </summary>
        public string url { get; set; }
        /// <summary>
        /// 數據
        /// </summary>
        public object data { get; set; }
        public WxTemplate()
        {
            topcolor = "#FF0000";
        }
    }

    public class TemplateDataItem
    {
        /// <summary>
        /// 項目值
        /// </summary>
        public string value { get; set; }
        /// <summary>
        /// 16進制顏色代碼,如:#FF0000
        /// </summary>
        public string color { get; set; }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="v">value</param>
        /// <param name="c">color</param>
        public TemplateDataItem(string v, string c = "#173177")
        {
            value = v;
            color = c;
        }
    }
}

TemplateModel文件夾是放不一樣模板的類文件,我這裏的是金額變更的微信模板消息微信

MemRechargeTemplate.cs文件代碼以下:app

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WxTemplateMsg.TemplateModel
{
    public class MemRechargeTemplate
    {
        /// <summary>
        /// 標題
        /// </summary>
        public TemplateDataItem first { get; set; }
        /// <summary>
        /// 日期
        /// </summary>
        public TemplateDataItem date { get; set; }
        /// <summary>
        /// 變更金額
        /// </summary>
        public TemplateDataItem adCharge { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public TemplateDataItem type { get; set; }
        /// <summary>
        /// 卡內餘額
        /// </summary>
        public TemplateDataItem cashBalance { get; set; }
        /// <summary>
        /// 備註
        /// </summary>
        public TemplateDataItem remark { get; set; }
    }
}

3.怎麼調用呢,看下面代碼:post

#region 發送模板消息 
                                WxTemplateMsg.WxTemplate wxTemp = new WxTemplateMsg.WxTemplate();
                                wxTemp.touser = openid;
                                wxTemp.template_id = template_id;
                                wxTemp.topcolor = "#FF0000";
                                wxTemp.url = "http://" + PubFunction.curParameter.strDoMain + "/mobile/member/bill.aspx";

                                MemRechargeTemplate memRecTemp = new MemRechargeTemplate();
                                memRecTemp.first = new WxTemplateMsg.TemplateDataItem(title);
                                memRecTemp.date = new WxTemplateMsg.TemplateDataItem(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
                                memRecTemp.adCharge = new WxTemplateMsg.TemplateDataItem((dclTotalRechargeMoney).ToString("#0.00"));
                                memRecTemp.type = new WxTemplateMsg.TemplateDataItem("");
                                memRecTemp.cashBalance = new WxTemplateMsg.TemplateDataItem(modelMem.MemMoney.ToString("#0.00"));
                                memRecTemp.remark = new WxTemplateMsg.TemplateDataItem("點擊「詳情「當即查閱您的賬戶財務記錄。");
                                wxTemp.data = memRecTemp;

                                string res = PubFunction.PushTempleModel(wxTemp, access_token);
                                if (!res.Contains("ok"))
                                {
                                    //PubFunction.LogError("會員充值推送錯誤》" + res);//這裏是把錯誤日誌進入到數據庫的表中,這個就自行補腦了哈
                                }
                                #endregion

上面的代碼中有一個方法:PushTempleModel編碼

/// <summary>
    /// 發送模板消息
    /// </summary>
    /// <returns></returns>
    public static string PushTempleModel(WxTemplateMsg.WxTemplate tm, string access_token)
    {
        string url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token;
        HttpRequestHelper httpRequest = new HttpRequestHelper();

        string postData = JavaScriptConvert.SerializeObject(tm);
        
        string response = httpRequest.Reqeust(url, postData);//調用HTTP通訊接口提交數據  
        return response;
    }

 

HttpRequestHelper.cs文件的代碼:url

public string Reqeust(string url, string postText)
        {
            System.Net.HttpWebRequest request;
            request = (System.Net.HttpWebRequest)WebRequest.Create(url);
            //Post請求方式
            request.Method = "POST";
            // 內容類型
            request.ContentType = "application/x-www-form-urlencoded";
            //// 參數通過URL編碼
            //string paraUrlCoded = System.Web.HttpUtility.UrlEncode(postText);
            byte[] payload;
            //將URL編碼後的字符串轉化爲字節
            payload = System.Text.Encoding.UTF8.GetBytes(postText);
            //設置請求的 ContentLength 
            request.ContentLength = payload.Length;
            //得到請 求流
            System.IO.Stream writer = request.GetRequestStream();
            //將請求參數寫入流
            writer.Write(payload, 0, payload.Length);
            // 關閉請求流
            writer.Close();
            System.Net.HttpWebResponse response;
            // 得到響應流
            response = (System.Net.HttpWebResponse)request.GetResponse();
            System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream(), Encoding.UTF8);
            string responseText = reader.ReadToEnd();
            reader.Close();
            return responseText;
        }

在此完畢了,有疑問的朋友請留言哈,若沒能及時回覆還請見諒哈。spa

相關文章
相關標籤/搜索