做公司的微信开发也有一段时间了,从开始的茫然无知,到现在的小有了解,中间查阅资料、微信API以及一步一步手动尝试的个中酸爽,只有自己最清楚。但坚持下来之后收获到的也很多。本着分享精神,现在总结一下微信开发的一些心得体会。
首先,申请公众号,成为开发者这些就不再啰嗦,这里注意介绍一下微信服务器url验证,这也是微信开发的第一步以及最重要的一步。首先你得有一个服务器,需要有公网IP。我本人使用的是阿里云服务器(每个月200大洋,肉疼。。。),接下来,你需要开发自己的接口,这里本人新建一个mvc项目(webform也可以,个人喜好,道理是一样的),在homecongroller里面新建一个action方法,方法接收四个参数,参数名称为小写(记得是小写),其中,nonce是一个随机数字,timestamp是64位整型的时间戳,echostr是微信验证的时候发送的随机串,signature是加密签名。这四个参数是微信给我们的接口地址发送请求的时候附加上去的。所以我们需要对它进行验证(当然这里不做任何验证,直接返回echostr也是可以通过验证的,但为了安全性考虑,还是需要进行验证)。
验证方法是,拿到nonce、timestamp以及你自己设置的token,进行字典排序,然后对排序后的字符串拼接成一个新的字符串,对这个字符串进行sha1加密,并且于signature进行对比,如果相等,则表示该请求是微信服务器发送的。下面贴上验证代码:
Sha1加密方法:
public string Sha1(string input) { byte[] cleanBytes = Encoding.Default.GetBytes(input); byte[] hashedBytes = System.Security.Cryptography.SHA1.Create().ComputeHash(cleanBytes); return BitConverter.ToString(hashedBytes).Replace("-", ""); }
请求真实性校验:
public bool TokenAuthentication(string nonce, string timestamp, string signture) { bool tag = false; try { string token = "开发者token"; List<string> list = new List<string>() { token, nonce, timestamp }; list.Sort(); string str = ""; foreach (string s in list) str += s; str = Sha1(str); str = str.ToLower(); signture = signture.ToLower(); if (signture.Equals(str)) tag = true; } catch (Exception) { } return tag; }
控制器部分:
public class HomeController : Controller { // // GET: /Home/ public ActionResult Index(string nonce, string timestamp, string echostr, string signature) { //验证请求是否来自微信服务器 if(!TokenAuthentication(nonce,timestamp,signature)) { //请求不是来自微信服务器 return Content("非法的请求!"); } //验证通过,返回echostr即可通过验证 return Content(echostr); } #region sha1加密(不可逆) /// <summary> /// sha1加密(不可逆) /// </summary> /// <param name="input"></param> /// <returns></returns> public string Sha1(string input) { byte[] cleanBytes = Encoding.Default.GetBytes(input); byte[] hashedBytes = System.Security.Cryptography.SHA1.Create().ComputeHash(cleanBytes); return BitConverter.ToString(hashedBytes).Replace("-", ""); } #endregion #region 微信消息真实性验证 /// <summary> /// 微信消息真实性验证 /// </summary> /// <param name="nonce"></param> /// <param name="timestamp"></param> /// <param name="signture"></param> /// <returns></returns> public bool TokenAuthentication(string nonce, string timestamp, string signture) { bool tag = false; try { string token = "开发者token"; List<string> list = new List<string>() { token, nonce, timestamp }; list.Sort(); string str = ""; foreach (string s in list) str += s; str = Sha1(str); str = str.ToLower(); signture = signture.ToLower(); if (signture.Equals(str)) tag = true; } catch (Exception) { } return tag; } #endregion }
以上工作完毕之后,将你的项目发布到你的服务器,一定要80端口,然后填写token以及加密密钥,点击提交即可完成服务器配置。服务器配置之后,微信服务器会把相关的信息发送到你的这个url上面(不过要先到微信公众号的基本配置-->服务器配置里面启用)。
配置完成之后,点击提交按钮即可。