Senparc.Weixin.MP SDK 微信公众平台开发教程(二):成为开发者
这一篇主要讲作为一名使用公众平台接口的开发者,你需要知道的一些东西。其中也涉及到一些微信官方的规定或比较掩蔽的注意点。欢迎补充!
我觉得做好成为开发者的准备比稀里糊涂开通微信后台的“高级”功能更重要,所以这一节先放在前面说。
一、公众平台的通讯过程
作为开发者,我们需要面对的主要有两个对象:微信服务器和应用程序(网站)服务器。
当微信用户向你的公众平台发送一条消息,实际上这条消息首先发送到微信服务器,由微信服务器向网站服务器发起另外一个请求,网站服务器返回这个请求的结果,再由微信服务器发送到微信客户端。
整个消息通讯流程如下图:
上述5个步骤中,作为开发者我们主要精力都集中在步骤3上,这个步骤主实际上要有3项任务:
- 接收来自2的XML信息
- 服务器内部逻辑执行
- 组织并返回用于4的XML信息
上述三项任务我会在后面做详细说明,并提供一整套简单、高效的处理方法。
二、XML通讯格式
用户使用微信客户端发送的不同类型的消息,网站服务器会收到不同格式的数据(文字、语音、图片等等),数据格式暂时只有XML一种。
作为学习,我觉得只要熟练掌握最简单的文字类型就可以了,其他的格式都是大同小异。且在后面的说明中你会发现,Senparc.Weixin.MP.dll可以帮助我们完全忽略这些繁琐的格式和定义。
一个简单的文字请求XML(RequestMessage)内容如下:
<xml><ToUserName><![CDATA[gh_a96a4a619366]]></ToUserName><FromUserName><![CDATA[olPjZjsXuQPJoV0HlruZkNzKc91E]]></FromUserName><CreateTime>1357986928</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[TNT2]]></Content><MsgId>5832509444155992350</MsgId>
</xml>
对应节点的官方说明如下:
参数 | 描述 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | text |
Content | 文本消息内容 |
MsgId | 消息id,64位整型 |
一个简单的文字返回XML(ResponseMessage)内容如下:
<xml><ToUserName><![CDATA[olPjZjsXuQPJoV0HlruZkNzKc91E]]></ToUserName><FromUserName><![CDATA[gh_a96a4a619366]]></FromUserName><CreateTime>12345678</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[content]]></Content><FuncFlag>0</FuncFlag>
</xml>
对应节点的官方说明如下:
参数 | 描述 |
---|---|
ToUserName | 接收方帐号(收到的OpenID) |
FromUserName | 开发者微信号 |
CreateTime | 消息创建时间 |
MsgType | text |
Content | 回复的消息内容,长度不超过2048字节 |
FuncFlag | 位0x0001被标志时,星标刚收到的消息。 |
三、一些需要注意和容易被忽视的问题:
- 每条XML信息都有大小限制,如文本信息,建议Content内容不要超过600字。
- 上图中,步骤2开始之后,微信服务器有一个等待时间:5秒,如果在这个时间内没有进行到步骤4,那么这个请求将会被关闭(包括数据传输的时间)。也就是说如果超过时间,即使网站服务器返回了数据,客户端也无法收到回复。
- 在文本消息中,是允许添加<a>标签来放置连接的,但是有许多朋友测试之后发现iOS没问题,Android上链接无法点击,其实原因是(至少目前为止):Android的微信客户端对<a>标签格式的判定比较严格,请严格按照这个格式书写:<a href="http://xxxx">内容</a>,href后不要使用单引号,也不要添加其他属性。
- 上面XML节点中的FromUserName即微信用户的OpenId,对于同一个公众账号,这个OpenId的前6位是一致的,并且在整个公众平台的记录中也是唯一的。也就是说同一个用户关注了两个不同的公众账号,他会有两个不同的OpenId。
- CreateTime使用的是Unix时间,因此如果使用C#的话,需要做一个转换。
- 尽量保持官方API中XML节点的顺序,以前微信服务器是使用节点位置的方式读取信息的(node[0]),而非节点名称,现在这个问题似乎有好转,不过还是要小心(¥…………&%&……)。
- 由于这种特殊的通讯方式,(至少目前为止)所有请求必须从客户端先发起,不要指望光使用API或SDK可以实现由网站服务器主动推送消息到客户端(当然其他办法还是有的,比如模拟登陆)。
四、工欲善其事,必先利其器:Senparc.Weixin.MP.dll
虽然整个通讯过程十分简单,但是官方API还是对一些字段做了特殊的约定或处理,况且面向过程地处理这么多类型的请求数据也是一件十分费力的事情。
为此我做了一个开源项目:Senparc.Weixin.MP,地址:https://github.com/JeffreySu/WeiXinMPSDK/
Senparc.Weixin.MP的主要目的是帮助C#开发者简化整个通讯过程,面向对象地处理消息,把主要精力放到业务逻辑上,而非繁琐的API上。
使用Senparc.Weixin.MP,并部署到外网与微信服务器通讯,你需要准备这些环境:
- VS2012(至少VS2010 SP1);
- 如果需要运行MVC的Demo,至少需要.NET 4.0(安装MVC 4),运行Webforms Demo,至少需要.NET 3.5;
- 一个可以使用80端口访问的域名或IP,虚拟主机、花生壳映射内网、VPS、独立服务器都可以。
这里先简单地引入Senparc.Weixin.MP这个项目的介绍,后面我会做更详细的说明并举例(https://github.com/JeffreySu/WeiXinMPSDK/ 里面也已经编写了足够多的使用文档和Demo可以参考)。
系列教程索引:http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html
Senparc.Weixin.MP SDK 微信公众平台开发教程(二):成为开发者相关推荐
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明
这里所说的高级接口是指面向通过认证的服务号开通的高级功能. 高级功能大致可以分类为: 用户接口 分组接口 客服接口(有别于之前介绍的多客服) 群发接口 多媒体接口 二维码接口 模板消息接口(不是所有账 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能
在Senparc.Weixin.dll v4.5.7版本开始,我们提供了Web代理功能,以方便在受限制的局域网内的应用可以顺利调用接口. 有关的修改都在Senparc.Weixin/Utilities ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明
Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明 原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明 上一篇&l ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制
在<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>中,我介绍了获取AccessToken(通用接口)的方法. 在实际的开发过程中,所有的高级接口都需 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler
原文地址为: Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler 上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程( ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):如何安装 Nuget(dll) 后使用项目源代码调试...
最近碰到开发者问:我使用 nuget 安装了 Senparc.Weixin SDK,但是有一些已经封装好的过程想要调试,我又不想直接附加源代码项目,这样就没有办法同步更新了,我应该怎么办? 这其实是一 ...
- 转载收藏之用 - 微信公众平台开发教程(三):微信公众平台开发验证
要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方 ...
- 微信支付(企业付款到个人微信零钱账户)微信公众平台开发教程(6)
微信支付(企业付款到个人微信零钱账户)微信公众平台开发教程(6 简介 开发步骤 后端代码实现 简介 Senparc.Weixin SDK 是由盛派网络(Senparc)团队自主研发的针对微信各模块的 ...
- 微信公众平台开发教程(二) 基本原理及消息接口
微信公众平台开发教程(二) 基本原理及消息接口 一.基本原理 在开始做之前,大家可能对这个很感兴趣,但是又比较茫然.是不是很复杂?很难学啊? 其实恰恰相反,很简单.为了打消大家的顾虑,先简单介绍了微信 ...
- 微信公众平台开发教程(一) 微信公众账号注册流程
微信公众平台开发教程(一) 微信公众账号注册流程 具体的操作步骤 1.注册公众账号 注册地址:http://mp.weixin.qq.com/ 1)首先需要邮箱注册: 2)邮箱激活.邮箱将会收到激活邮 ...
最新文章
- JS字符串的下划线命名和驼峰命名转换
- 谷歌量子计算突破登Science封面!首次对化学反应进行量子模拟
- ubuntu下firefox中,直接在网页上安装程序的方法
- BZOJ2958 序列染色
- Boost::context模块callcc的回声测试程序
- 薅羊毛丨5个平价好物,终于终于终于打折了!
- datatable如何生成级联数据_如何把Excel表数据批量生成条形码
- 视觉SLAM——ORB-SLAM3运行本地视频文件
- docker stop
- SQL Server 中死锁产生的原因及解决办法
- 电话号码正则表达式(标准)
- VMware激活密钥
- 计算机win764位相机驱动,Win7万能驱动64位
- idea工具推荐几款好用的代码theme主题颜色
- 交换机与路由器工作原理
- c语言 原子 字符串,Atomic operations library(原子操作库)
- php视频转音频文件怎么打开,视频怎么转音频格式 MP4格式怎样转MP3格式
- JavaScript 删除对象中的某一项
- matlab如何打开dcm_Matlab绘图简明手册
- 最近工作里遇到的一些问题,记录下来
热门文章
- 计算机windows8黑屏怎么办,详解笔记本电脑出现电源拔出就黑屏的win8处理教程
- 画五角星中间没有填充_冷军画两个白色五角星,卖出230万,专家大呼:这不是画...
- SRGAN:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network
- 数据分析中会常犯哪些错误,如何解决? 六
- PathProber:基于暴力破解方法探测和发现HTTP路径名
- scrapy-cluster scrapy集群建设
- 2020牛客多校训练2 I Interval(对偶图最短路求最小割)
- 医学相关excel表格计算机作业,求计算机作业电子表格演示文稿。
- q 与 blockquote 的区别
- python 小知识总结汇整