微信公众平台开发(二)

一、实现URL接入

相关参数描述

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace WeiXinWebApplication
{
    public class CheckSignature
    {
        /// <summary>
        /// 网站没有提供Token情况下的默认Token
        /// </summary>
        public const string Token = "weixin";

        /// <summary>
        /// 检查签名是否正确
        /// </summary>
        /// <param name="signature">微信加密签名</param>
        /// <param name="timestamp">时间戳</param>
        /// <param name="nonce">随机数</param>
        /// <param name="token"></param>
        /// <returns></returns>
        public static bool Check(string signature, string timestamp, string nonce, string token)
        {
            return signature == GetSignature(timestamp, nonce, token);
        }

        /// <summary>
        /// 返回正确的签名
        /// </summary>
        /// <param name="timestamp"></param>
        /// <param name="nonce"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        public static string GetSignature(string timestamp, string nonce, string token = Token)
        {
            token = token ?? Token;
            string[] arr = new[] {token,timestamp,nonce }.OrderBy(z=>z).ToArray();
            string arrString = string.Join("",arr);
            System.Security.Cryptography.SHA1 shal = System.Security.Cryptography.SHA1.Create();
            byte[] shalArr = shal.ComputeHash(Encoding.UTF8.GetBytes(arrString));
            StringBuilder enText = new StringBuilder();
            foreach (var b in shalArr)
            {
                enText.AppendFormat("{0:x2}",b);
            }
            return enText.ToString();
        }
    }
}

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WeiXinWebApplication
{
    public partial class Index : System.Web.UI.Page
    {
        /// <summary>
        /// 与微信公众账号后台的Token设置保持一致,区分大小写
        /// </summary>
        private readonly string Token = "weixin";

        protected void Page_Load(object sender, EventArgs e)
        {
            Auth();
        }

        /// <summary>
        /// 处理微信服务器验证消息
        /// </summary>
        private void Auth()
        {
            string signature = Request["signature"];
            string timestamp = Request["timestamp"];
            string nonce = Request["nonce"];
            string echostr = Request["echostr"];
            if (Request.HttpMethod == "GET")
            {
                if (CheckSignature.Check(signature, timestamp, nonce, Token))
                {
                    WriteContent(echostr);
                }
                else
                {
                    WriteContent("failed:" + signature + "," + CheckSignature.GetSignature(timestamp, nonce, Token) + "." + "如果你在浏览器中看到这句话,说明此地址可以被作为微信公众号后台的URL,请注意保持Token一致。");
                }
                Response.End();
            }
        }

        private void WriteContent(string str)
        {
            Response.Output.Write(str);
        }
    }
}

 二、接入微信公众平台

这样我们就成功实现了URL接入微信公众平台的工作。

 

posted @ 2015-11-10 14:50  蓦然浩怪  阅读(1282)  评论(2编辑  收藏  举报