距离第一讲又已经过去了一个多星期了,本打算一周更新一讲的,奈何实在太忙。最近也在群里发现有一部分人已经可以熟练调用微信的部分接口但却不是很清楚微信公众平台接收消息的一个处理机制。本讲就来介绍下怎么接入开发者的服务器。

  接入微信公众平台开发,开发者需要按照如下步骤完成:

  1、填写服务器配置
  2、验证服务器地址的有效性
  3、依据接口文档实现业务逻辑
   
   举个形象的例子:比如在抗战时期,各个军队之间需要进行通讯,在战场上军情的保密是很重要的。所以A、B两个军队事先约定好了接头的暗号(token),所有的书信都是需要使用密文的(加密方式也已经约定好了)。假如现在A(微信服务器)收到上级(用户)命令需要和B(开发者服务器)联合作战,但上级与B军队之间无法进行直接的沟通,那么现在就由A将指令告诉给B,B收到指定后,根据事先约定好的解密方式和暗号(token)解密成功后,派个通讯兵告诉A,说已经收到他们的信息了,那么A和B之间的通讯就建立起来了。假如A和B之间的加密方式被敌军C窃取到了,但C不知道他们之间的暗号,所以C就算知道了加密方式也无法冒充A与B进行通讯。所以,在整个通讯的过程中,token是至关重要的。

 填写服务器配置
 
此操作的目的就是告诉微信服务器开发者的服务器在哪儿,已经他们之间的通讯口令。
 
 校验服务器地址的有效性
 开发者在接入时,微信服务器将发送get请求到你填写的url上,此请求携带四个参数,分别signature(微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。),timestamp(时间戳),nonce(随机数),echostr(随机字符串).用HttpContext.Current.Request.RawUrl可以获取当前请求的原始url,如下图所示:
130207555223769
 
 

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
 
下面我们一步步来实现这个流程
   1、获取token、timestamp、nonce,并字典序排序
var signature = context.Request.QueryString["signature"];
var timestamp = context.Request.QueryString["timestamp"];
var nonce = context.Request.QueryString["nonce"];
var echostr = context.Request.QueryString["echostr"];
 var arr = new[] {token, timestamp, nonce};
 Array.Sort(arr);

    2. 将三个参数字符串拼接成一个字符串进行sha1加密

var tempstr = string.Join("", arr);
 var tempsign = FormsAuthentication.HashPasswordForStoringInConfigFile(tempstr, "sha1").ToLower();

   3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。

if (signature == tempsign)
{
        context.Response.Write(echostr);
}

  由于接入的时候,微信服务器发送的是get请求,接入之后转发的消息是post的请求,所以可以根据请求的方式来判断当前是接入还是接入后的消息推送。

完整的代码如下所示:

public void ProcessRequest(HttpContext context)
        {
             string token = "qqq";
            if (context.Request.HttpMethod == "GET")
            {
                //说明是接入请求
                var signature = context.Request.QueryString["signature"];
                var timestamp = context.Request.QueryString["timestamp"];
                var nonce = context.Request.QueryString["nonce"];
                var echostr = context.Request.QueryString["echostr"];
                var arr = new[] {token, timestamp, nonce};
                Array.Sort(arr);
                var tempstr = string.Join("", arr);
                var tempsign = FormsAuthentication.HashPasswordForStoringInConfigFile(tempstr, "sha1").ToLower();
                if (signature == tempsign)
                {
                    context.Response.Write(echostr);
                }
            }
            else
            {
                //接收消息处理
            }

     注:可能由于微信服务器的缓存问题,接入成功后,现在不会立即生效。

     附视频教程:http://pan.baidu.com/s/1GwsVk

     本人才疏学浅,人丑钱少脸皮薄,所以文章或视频中有错误或不妥之处,欢迎各位同仁指教。

     如有疑问加群一起交流,我需要广大屌丝小伙伴的反馈与建议,   点击这里给我发消息

     如果觉得本文对你有帮助,请点击文章下面的推荐哦,去帮助更多的小伙伴了解微信开发的流程。

     如果你是土豪,想支持笔者继续更新本系列教程,可以扫描下面的二维码悬赏一下,你的支持是笔者继续更新下去的动力。

     如果你司需求微信开发项目合作,可以私聊我QQ。

posted @ 2015-06-09 00:46 billsking 阅读(3381) 评论(3) 推荐(7) 编辑
摘要: 黑夜给了我黑色的眼睛,我决定录视频到天明。半年前的现在,我还在苦逼着加着班,半年后的今天我依旧苦逼着加着班。不过现在的是为自己加班,作为一个资深程序小白,一个月前我光荣的成了一个不称职的资本家,不称职的原因有二:一是我人丑钱少脸皮薄(没有资本),而是我先阶段还只能剥削我自己。 回想着半年的历程,好... 阅读全文
posted @ 2015-05-27 03:46 billsking 阅读(7059) 评论(13) 推荐(29) 编辑
摘要: 研究微信开发一年多了,每个新接口,都会第一时间进行研究。微信支付开放很久,一直没机会接触到支付接口,等了好久终于从朋友那儿搞到了接口,从此开始了我两天多的支付接口的研究。拿到这个接口文档的第一个想法就是这也没什么难的嘛, 和支付宝、财付通、网银在线等一些传统接口的思路逻辑都是一样的,觉得差不多最多一... 阅读全文
posted @ 2014-11-02 15:47 billsking 阅读(10848) 评论(15) 推荐(6) 编辑
摘要: wp新人打造专属windows phone博客园客户端,通过http请求,抓取博客园的页面,文章列表用ListBox显示,点击后,将地址传到另一个页面,进行详细内容的抓取,用插件就行页面分析,显示在WebBrowser中。 阅读全文
posted @ 2014-07-10 19:47 billsking 阅读(4027) 评论(25) 推荐(26) 编辑
摘要: 废话不多说, 直接说需求。公司的网站需要抓取其他网站的文章,但任务没到我这,同事搞了一下午没搞出来。由于刚刚到公司, 想证明下自己,就把活揽过来了。因为以前做过,觉得应该很简单,但当我开始做的时候,我崩溃了,http请求后,得到的是字符串竟然是乱码,然后就各种百度(谷歌一直崩溃中),最后找到了原因。... 阅读全文
posted @ 2014-06-26 08:34 billsking 阅读(5835) 评论(27) 推荐(9) 编辑
摘要: 你是否在初学 .net core时,被依赖注入所折磨? 你是否在开发过程中,为了注入依赖而不停的在Startup中增加注入代码,而感到麻烦? 你是否考虑过或寻找过能轻松实现自动注入的组件? 如果有,那请欢迎继续往下看。 或许你是被我这标题给吸引过来的,请不要怀疑自己的眼睛,如果你真的遇到过以上的问题 阅读全文
posted @ 2020-01-20 15:04 billsking 阅读(4862) 评论(30) 推荐(29) 编辑
摘要: 世间万物,纷繁复杂。如何在一个纷繁复杂的世界中,找到问题最简单的解决方案,往往是人们追求的目标。然而,总是会有一些游戏规则的掌控者将简单的问题复杂化。比如,“伟大”而又“令人抓狂”的微信,微信的伟大是不可否认的,它改变了绝大多数人生活方式,工作方式。而之所以说微信令人抓狂,是因为凡是看过微信文档的开 阅读全文
posted @ 2018-12-31 15:43 billsking 阅读(1078) 评论(2) 推荐(7) 编辑
摘要: 小程序版好友对战实战系列第二篇,讲述了安全的WebSocket的配置以及小程序微信登录逻辑。结合服务端与小程序端,分析实现了微信小程序用户身份的授权和wss证书的申请与部署。绝对的干货。 阅读全文
posted @ 2018-03-09 09:27 billsking 阅读(6772) 评论(5) 推荐(6) 编辑
摘要: 序 新的一年已经拉开了序幕,有的忙着离职、有的忙着请求加薪,有的忙着春运,有人忙着相亲。。 对于绝大多数人来说,新的一年就是新的开始,新的开始也就是雄心壮志立flag的之时,只求不恍惚间到年尾,然后再把去年的flag,copy一次。 千里之行,始于足下。所以,我的雄心壮志,也从这简简单单的知识分享开 阅读全文
posted @ 2018-03-01 20:08 billsking 阅读(3362) 评论(3) 推荐(2) 编辑
摘要: 首先, 如果你能看到这句话,那我就应该恭喜你,你已经被此文的标题所吸引。不过,千万不要想太多,此文不是什么《今日说法》,但也与法有那么一丁点的关系;此文也不是什么《我们约会吧》,约会自古与单身狗就无缘,何况此文的受众仅仅是大龄屌丝单身程序员。 等等等~~,先别着急关,既然来都来了,就别太在意自己是不 阅读全文
posted @ 2017-02-16 15:05 billsking 阅读(1865) 评论(14) 推荐(8) 编辑
摘要: 草原上的两匹马! 打从当年微信开始布局公众号之初时,估计就已经想到了与支付宝正面冲突的场面,所以微信先来个瞒天过海,在春晚搞了个微信红包,那叫一个火呀,此时的云云隐隐感觉到些许不安。 早期的微信开发者可能都知道,微信公众号刚开始的时候接入支付要交巨额的保证金,根据行业不同,金额也不同,但也有大几万呢 阅读全文
posted @ 2016-09-01 22:45 billsking 阅读(9075) 评论(54) 推荐(63) 编辑
摘要: 恍惚之间,距离上次写博客已经过去差不多两个月了。最近忙成狗,自从书出版后关注微信接口的时间就很少了,一方面,公司的事情实在太忙,现在是求生存的阶段,只能一心扎在项目中。另一方面,书发行后,好像突然少了点继续关注微信的动力,一种被微信折磨了大半年然后终于释然的感觉。最近也很少在群里说话了,... 阅读全文
posted @ 2015-12-13 02:15 billsking 阅读(1868) 评论(17) 推荐(10) 编辑
摘要: Web性能优化已经是老生常谈的话题了, 不过笔者也一直没放在心上,主要的原因还是项目的用户量以及页面中的js,css文件就那几个,感觉没什么优化的。人总要进步的嘛,最近在被angularjs吸引着,也用了angularjs开发了一个项目,那感觉真的是谁用谁知道。 angularjs的好处我... 阅读全文
posted @ 2015-10-27 00:29 billsking 阅读(6537) 评论(1) 推荐(1) 编辑
摘要: 在笔者的系列微信开发教程中,有一个比较基础且重要的一节:微信开发的调试。在文章中我推荐了两种动态域名解析的工具用于将本地的开发环境部署成服务器,一种是花生壳,一种是ngrok,但毕竟我等屌丝用不起或者不愿意付费试用花生壳,导致花生壳经常来大姨妈(解析失败)。而ngrok的服务器是国外的,而天朝的... 阅读全文
posted @ 2015-10-05 22:16 billsking 阅读(5406) 评论(30) 推荐(31) 编辑
点击右上角即可分享
微信分享提示