C#微信开发小白成长教程二(新手接入指南,附视频)
距离第一讲又已经过去了一个多星期了,本打算一周更新一讲的,奈何实在太忙。最近也在群里发现有一部分人已经可以熟练调用微信的部分接口但却不是很清楚微信公众平台接收消息的一个处理机制。本讲就来介绍下怎么接入开发者的服务器。
接入微信公众平台开发,开发者需要按照如下步骤完成:
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,如下图所示:
开发者通过检验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。

C#微信开发小白成长教程二(新手接入指南,附视频)的更多相关文章
- C#微信开发小白成长教程一(公众平台的工作原理与调试环境部署,附视频)
黑夜给了我黑色的眼睛,我决定录视频到天明.半年前的现在,我还在苦逼着加着班,半年后的今天我依旧苦逼着加着班.不过现在的是为自己加班,作为一个资深程序小白,一个月前我光荣的成了一个不称职的资本家,不称职 ...
- C#微信公众号开发系列教程二(新手接入指南)
http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可 ...
- java微信开发API解析(二)-获取消息和回复消息
java微信开发API解析(二)-获取消息和回复消息 说明 * 本演示样例依据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/20 ...
- php微信开发之带参数二维码的使用
最近做微信PC端网页微信相关功能的开发,从一个新手的角度来说,微信公众号的文档还是不好理解的,网上找的帖子大都也都基本上是复制微信公众平台上给的文档,开发微信带参数二维码过程中还是遇到不少坑的,在此把 ...
- [微信开发] - 使用weixin4j进行二次开发
1. 服务器连接配置OK, 配置文件在classpath:weixin4j.properties中 # weixin4j-spring-demo### 使用weixin4j(岸思版)springboo ...
- 【Android开发VR实战】二.播放360°全景视频
转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53924006 本文出自[DylanAndroid的博客] [Android开发 ...
- 关于C#的微信开发的入门记录二
在准备了空间和域名之后,现在来讲讲我们接下来的编码过程: 今天就先到这里了!没有服务器那些的请看我之前的博客:http://www.cnblogs.com/zhankui/p/4515905.html ...
- Python开发的入门教程(二)-List和Tuple类型
介绍 本文主要介绍Python中List和Tuple类型的基本知识和使用. Python创建list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的 ...
- yii2实战教程之新手入门指南-简单博客管理系统
作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文 ...
随机推荐
- Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
- iOS OC和Swift进行互相调用
有时候 ,我们会涉及到双向混合编程,特别是OC和swift的互相引用. swift调用oc的方法: 1.桥接文件,一般是swift工程,在创建一个oc文件时,系统自动添加(不用改名,直接默认即可) 2 ...
- 从Mysql数据库中导入导出表结构
1.从Mysql数据库中导入sql表 很简单,只需要一个命令即可搞定:[root@localhost ~]# mysql -uroot -piweb_xxx_mysql iweb < modif ...
- CentOS 6.3下配置iSCSI网络存储
一.简介 iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够 ...
- HQL的一些语句总结
HQL原文来自:http://slaytanic.blog.51cto.com/2057708/782175/ Slaytanic老师 关于Hadoop的介绍来自:http://www.cnblo ...
- vim IDE平台-打造属于自己的配置
vim IDE平台-打造属于自己的配置 一.前言 目前工作环境基本以Linux为主,自然用到VIM也很多,很早就对如何提高VIM的使用效率有所研究,限于时间关系,也没做个系统记录和资料积累,时间久了又 ...
- AI(Adobe Illustrator)简单入门——米老鼠
成果: 步骤如下: 一.新建文档 二.选椭圆工具,在画布中间点一下,画一个100px*100px的圆,如下 三.同上,再画两个50px*50px小圆.点左上角的选择工具,点小圆中心,放好位置. 四.全 ...
- 查看centos系统版本
1.查看系统版本 [root@yl-web yl]# cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core) 2.查看内核版本 [ro ...
- MVC调用SVC无法找到资源解决问题
webconfig配置下就可以,但MVC当中老是报错 404 not found.解决办法: routes.IgnoreRoute("{resource}.svc/{*pathInfo}&q ...
- No.1 S2错题
正确答案:C,因为ABD是值类型,所以选择C 正确答案:A,因为test属于标记内容 正确答案:ABD,本题考查对异常处理的理解.通常,Java的非检查异常(编译器不要求强制处置的异常):包括运行时异 ...
