码迷,mamicode.com
首页 > 微信 > 详细

c#接入微信公众平台

时间:2015-01-17 20:55:27      阅读:524      评论:0      收藏:0      [点我收藏+]

标签:接入微信   微信   c#   asp.net   

微信公众平台接入方式(asp.net)


第一步:使用vs2012等等建一个web站点

1.1 建立完成后,新建一个接入的页面,以aspx为例

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace weixin.weixin
{
    /// <summary>
    /// 接入微信公众平台
    /// </summary>
    public partial class weixin_api : System.Web.UI.Page
    {
        /// <summary>
        /// 此token(票据)和服务器一致即可,可以随便写
        /// </summary>
        private const string token = "mmmv390crazyhs";

        //是从微信服务器发来的url,并不是某人访问浏览器的url
        protected void Page_Load(object sender, EventArgs e)
        {
            string url = Request.Url.ToString();
            WriteLog("url:"+url);
            //开始验证
            Valid();
            string postStr = "";

            if (Request.HttpMethod.ToLower() == "post")
            {
                Stream s = System.Web.HttpContext.Current.Request.InputStream;
                byte[] b = new byte[s.Length];
                s.Read(b, 0, (int)s.Length);
                postStr = Encoding.UTF8.GetString(b);
                if (!string.IsNullOrEmpty(postStr))
                {
                    ResponseMsg(postStr);
                }
                //WriteLog("postStr:" + postStr);
            }
        }
        /// <summary>
        /// 2.0 调用CheckSignature方法验证签名是否正确,如果正确,就把从微信服务器上发来的ehcostr再返回给微信服务器,这样就微信公众平台服务器就知道接入成功了
        /// </summary>
        /// *
        /// *
        /// *
        public void Valid()
        {
            string echostr = Request.Params["echostr"];
            if (CheckSignature())
            {
                //如果微信签名验证成功
                if (!string.IsNullOrEmpty(echostr))
                {
                    WriteLog("echoStr不为null:" + echostr);
                    Response.Write(echostr);
                    Response.End();;
                }
            }
        }

        /// <summary>
        /// 1.0 验证微信签名[应该是防止被人在网络上嗅探到明文的 token(票据)]
        /// </summary>
        ///* 将token、timestamp、nonce三个参数进行字典序排序                  
        ///* 将三个参数字符串拼接成一个字符串进行sha1加密                     
        ///*开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
        /// http://www.rdpsafe.com/weixin/weixin_api.aspx?timestamp=1421492404&nonce=1067705734&signature=7da3235a00c03a14105741dbb306e193871be8fb
        ///<returns></returns>
        public bool CheckSignature()
        {
            bool res = false;
            //1.1 接收微信服务器发来的签名,用来做最后的比较
            string signatureFromWeixinServ = Request.Params["signature"];

            //1.2 接收timestamp
            string timestamp = Request.Params["timestamp"];
            //1.3 接收nonce
            string nonce = Request.Params["nonce"];
            //1.4 开始用timestamp和nonce来组装加密成signature来跟接收到的signature比较
            //1.4.1 合并三个字符串到字符串数组中
            string[] arrStrs = { token, timestamp, nonce };
            //1.4.2 排序
            Array.Sort(arrStrs);
            //1.4.3 接收返回的字符串
            string resStr = string.Join("", arrStrs);

            //调试
            WriteLog("token:" + token);
            WriteLog("timestamp:" + timestamp);
            WriteLog("nonce:" + nonce);
            WriteLog("返回的是:" + resStr);
            WriteLog("提交来的签名:"+signatureFromWeixinServ);
            //1.4.4 使用sha1加密算法加密
            resStr = FormsAuthentication.HashPasswordForStoringInConfigFile(resStr, "SHA1");
            //1.4.5 变成小写
            resStr = resStr.ToLower();
            //1.5 比较后返回
            if (resStr.Equals(signatureFromWeixinServ))
            {
                res = true;
            }
            else
            {
                res = false;
            }
            return res;
        }


        /// <summary>
        /// 3.0 返回信息结果(微信信息返回)
        /// </summary>
        /// <param name="weixinXML"></param>
        private void ResponseMsg(string weixinXML)
        {
            //回复消息的部分:你的代码写在这里

        }


        public void WriteLog(string log)
        {
            string filename = Server.MapPath("/logs/log.txt");
            if (!Directory.Exists(Server.MapPath("//logs//")))
                    Directory.CreateDirectory(Server.MapPath("/")+"//logs//");
            StreamWriter sr = null;
            try
            {
                if (!File.Exists(filename))
                {
                    sr = File.CreateText(filename);
                }
                else
                {
                    sr = File.AppendText(filename);
                }
                sr.WriteLine(log);
            }
            catch
            {
            }
            finally
            {
                if (sr != null)
                    sr.Close();
            }
        }

        /// <summary>
        /// datetime转换为unixtime
        /// </summary>
        /// <param name="time"></param>
        /// <returns></returns>
        private int ConvertDateTimeInt(System.DateTime time)
        {
            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
            return (int)(time - startTime).TotalSeconds;
        }
    }
}


第二步: 如果没有安装IIS,以本机为例,先安装一个iis

2.1 安装iis,以win8.1为例 ,快捷键CTRL+X,在弹出的选项卡中选择"程序和功能",在弹出的窗口中点击"启用和关闭window功能"

技术分享

技术分享

2.2在iis中新建一个网站,并把目录指向vs2012中网站项目的根目录即可

技术分享

技术分享

技术分享技术分享

技术分享

技术分享

这样就OK了


c#接入微信公众平台

标签:接入微信   微信   c#   asp.net   

原文地址:http://blog.csdn.net/mmmv390/article/details/42808125

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!