自己最近搞了公众号,记录一下。
目的就是为了在微信公众号里启用服务器配置。 微信文档
其实微信文档已经写得很清楚了,也很简单。(微信的目的就是它发送一个get请求,希望我们能接受一下,然后给微信回个数据告诉它)
方法一:用WebApi,MVC架构(注意Controller里的这个Action不要去添加视图)
微信发给我们四个参数:signature timestamp nonce echostr 我们通过微信要求之后把echostr这个字符串再发给微信。(最最简单的办法就是,我们啥都不做,接收echostr参数,直接返回这个参数。嘿嘿嘿)
在Controller里这样写,也是能通过的。API架构加个路由,get请求。弄好后自己可以用postman测试一下(真的是啥都不用写)
按照微信要求来:微信官方流程图
我们拿到数据需要处理一下:代码如下
/// <summary> /// 验证微信签名 wuchen /// </summary> /// <returns></returns> /// * 将token、timestamp、nonce三个参数进行字典序排序 /// * 将三个参数字符串拼接成一个字符串进行sha1加密 /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。 public bool CheckSignature() { var WeChat_Token = "TokenCrCool"; //从微信服务器接收传递过来的数据 string signature = VqiRequest.GetQueryString("signature"); //微信加密签名 string timestamp = VqiRequest.GetQueryString("timestamp");//时间戳 string nonce = VqiRequest.GetQueryString("nonce");//随机数 string[] ArrTmp = { WeChat_Token, timestamp, nonce }; Array.Sort(ArrTmp); //字典排序 string tmpStr = string.Join("", ArrTmp);//将三个字符串组成一个字符串 tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");//进行sha1加密 tmpStr = tmpStr.ToLower(); //加过密的字符串与微信发送的signature进行比较,一样则通过微信验证,否则失败。 if (tmpStr == signature) { return true; } else { return false; } }
返回true,然后再返回echostr字符串。
方法二:三层架构的aspx页面(注意把前端页面删除干净,确保自己用postman测试的时候,只返回echostr)
就是这么简单粗暴。前端页面代码要删除干净的,像这样
方法三:一般处理程序 就两行代码。
三种方法都是可行的,完成之后发布在自己的云服务器上。使用80,443端口才可以。其他的微信文档有步骤的。