园子里面很多关于微信接口开发的文章,Github也一堆的开源代码。
官方文档地址:http://mp.weixin.qq.com/wiki/home/index.html
接下来主要以代码为主,接口说明自己去看文档
验证接入需要一个80端口的外网服务器地址,在填写地址,Token信息之后,程序会验证接入
验证会像就扣地址通过GET的方式发送几个数据:
signature,timestamp, nonce, echostr(该参数仅仅在验证接入时候会带上)
接下来就是你服务端接口验证签名的可用性了,加密是根据前面三个参数进行排序然后通过SHA1方式加密
排序代码:
List<string> StrArr = new List<string>(); StrArr.Add(token); StrArr.Add(timestamp); StrArr.Add(nonce); StrArr.Sort(); string Str = string.Empty; StrArr.ForEach(s => { Str = string.Concat(Str, s); }); Str = StrArr.Aggregate((prev, next) => { return prev + next; }); Str = Encrypt.Sha1(Str); return string.Compare(Str, signature, true) == 0;
中间用到的SHA1加密方法代码:
public static string Sha1(string str) { SHA1 sha = new SHA1CryptoServiceProvider(); ASCIIEncoding asci = new ASCIIEncoding(); byte[] data = asci.GetBytes(str); byte[] hashdata = sha.ComputeHash(data); return BitConverter.ToString(hashdata).Replace("-", ""); }
验证OK,返回服务器传递过来的echostr的值就行了,这样就算验证通过了~
以后接微信调用该接口不会有echostr参数!
我一般用MVC做开发
Controller如下
public ActionResult Index(string signature, string timestamp, string nonce, string echostr) { bool valid = CheckSignature(signature, "token", timestamp, nonce); if (!valid) return Content("接口接入失败,请验证令牌是否正确!"); if (!string.IsNullOrEmpty(echostr)) return Content(echostr); if (Request.InputStream.Length <= 0) return Content("请POST请求!"); //接下来你自己的业务逻辑 }
到这里基本微信的接入已经实现~ Enjoy it!