本系列文章均为A2BGeek原创,转载务必在明显处注明:
转载自A2BGeek的【微信易信公众平台开发】系列,原文链接:http://blog.csdn.net/a2bgeek/article/details/17250383

我的个人博客站点已经开通,会有技术分享和其他一些有意思的东西,希望读者能去访问一下,网址是http://a2bgeek.me

我把微信/易信的公众号看成一个APP内的轻量级APP(此时可以把微信/易信看成是应用商店),为什么这么说呢?因为有很多日常生活需要的服务都能在公众号中得到,比如查询天气、查询快递、办理银行业务、办理手机业务等,再加上现在有了自定义菜单,俨然已经成为了一个APP,但是这种APP是有局限性的,其一是这种APP只是一个I/O型的APP,即用户输入然后得到一个输出;其二是交互方式比较单调,除了I/O就是跳转到网页,只能在网页上想想有什么好的交互方式了。

编辑模式与开发模式的区别

玩公众平台开发首先要明白“编辑模式”(易信中叫做“自动回复”)和“开发者模式”的区别,下面两张图可以清楚地看到区别:

在编辑模式下,用户在公众号内的输入被发送到微信服务器上,微信服务器根据预先设置的“消息自动回复”、“关键词自动回复”把消息发回给客户端。

在开发模式下,用户的输入首先发送到微信服务器上,微信服务器把消息转发给开发者的服务器,开发者的服务器处理之后给微信服务器发消息,微信服务器再把消息转发给客户端。微信服务器在某种意义上成了一个代理服务器,不过有个特殊的限制就是开发者服务器在收到消息后必须在5s内给微信服务器发消息,否则微信服务器不会接受此次返回的消息。

成为开发者

这部分大概说一下就可以了,首先你要注册公众平台的账号,微信的是https://mp.weixin.qq.com,易信的是https://plus.yixin.im/,然后登录,然后在“高级功能”中会看到有“编辑模式”/“自动回复”和“开发模式”,微信和易信都是同时不能开启两种模式,需要先关闭“编辑模式”/“自动回复”,然后打开“开发模式”,这时会提示申请成为开发者,申请一下就行了,审核大概半天时间。

开启开发者模式

如上图所示,开发模式需要开发者有一个个人的服务器,不过对于大多数开发者来说弄一个服务器有点奢侈,还好我们已经进入了所谓的云计算时代,有土豪已经为我们搭好了服务器,你可以随便选择一个ae,比如gae、bae、sae等等。我个人的习惯是用bae,用git克隆一个版本到电脑上,写好了再push上去。这里就不介绍云引擎的用法了,不会的读者可以花上一点儿时间玩一玩,很好上手。

在有了个人服务器之后,你需要做的就是“网址接入”,接入后微信/易信服务器就能和你的个人服务器通信了。

如图,当你填写上URL和Token后,点击“提交验证”的按钮后,微信/易信服务器会发送GET请求到你的服务器上,如果有对HTTP不熟悉的朋友,可以看我的这篇博客http://blog.csdn.net/a2bgeek/article/details/11580395,GET请求的参数分别是:

参数 描述
signature 易信加密签名
timestamp 时间戳
nonce 随机数
echostr 随机字符串

开发者通过检验signature对请求进行校验,校验方式如下:

加密/校验流程: 1. 将token、timestamp、nonce三个参数进行字典序排序 2. 将三个参数字符串拼接成一个字符串进行sha1加密 3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信/易信 

若确认此次GET请求来自微信/易信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。

signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。

下面上代码,服务器端我使用的是Tornado框架:

from bae.api import logging
import tornado.wsgi
import hashlib
class MainHandler(tornado.web.RequestHandler):def get(self):signature = self.get_argument('signature')timestamp = self.get_argument('timestamp')nonce = self.get_argument('nonce')echostr = self.get_argument('echostr')if checksignature(signature, timestamp, nonce):logging.info('return echostr')self.write(echostr)else:logging.info('return fail')self.write('fail')
app = tornado.wsgi.WSGIApplication([(r"/", MainHandler),
])from bae.core.wsgi import WSGIApplication
application = WSGIApplication(app)def checksignature(signature, timestamp, nonce):args = []args.append("XXXXXXXX")args.append(timestamp)args.append(nonce)args.sort()mysig = hashlib.sha1(''.join(args)).hexdigest()logging.info('mysig is %s' % mysig)return mysig == signature

代码中我自己的Token用XXXXXXX代替了。
好了今天就到这里,下一篇将讲解一个非常给力的功能——如何生成自定义菜单。

【微信易信公众平台开发】开启开发者模式相关推荐

  1. 【微信易信公众平台开发】创建自定义菜单

    本系列文章均为A2BGeek原创,转载务必在明显处注明: 转载自A2BGeek的[微信易信公众平台开发]系列,原文链接:http://blog.csdn.net/a2bgeek/article/det ...

  2. 【微信易信公众平台开发】天气查询功能

    本系列文章均为A2BGeek原创,转载务必在明显处注明: 转载自A2BGeek的[微信易信公众平台开发]系列,原文链接:http://blog.csdn.net/a2bgeek/article/det ...

  3. 【微信易信公众平台开发】写在最前面

    微信和易信一样,都有公众平台,使用方法几乎一样,不过易信政策比较宽松,所以我选择了易信来写这个系列的博客,具体要做一个什么样子的例子还没有想清楚,不过先把久违的自定义菜单体验一下先.本系列的第一篇是讲 ...

  4. 微信/易信公共平台开发(一):开发了一个简单易用的PHP类(提供源码),十几行代码搞定一个公众号

    这两天学习了一下微信公共平台和易信公共平台的开发 (易信与微信协议是基本一样的)(PS:没听说过易信?你out了?) 公共平台开发原理这里就不讲了,如果是初次接触的同学,建议先看 David_Tang ...

  5. 微信/易信公共平台开发(四):公众号调试器 (仿真微信平台,提供PHP源码)

    开发微信/易信公共平台时,调试往往很麻烦,一般只能在手机上边试边改, 或在服务器写日志.当你的服务器脚本有Bug时,手机上没有显示,追查是不容易的.我在开发过程中,编写了一个调试器, 能仿真微信/易信 ...

  6. 易信公众平台开发(ASP.NET WebForm) Using Senparc.Weixin.MP SDK

    本文主要简单介绍如何通过Senparc.Weixin.MP SDK开发易信后台, 0.为什么可以用专门为微信开发的SDK 这个在Senparc.Weixin.MPSDK的官网里面有所提及, 你可以比较 ...

  7. 易信公众平台开发从入门到精通之接收普通消息

    对公众号来说,这是一种新的接收用户发送消息的方式.公众号不需要再登录平台,就可以接收用户发送的文本,图片,语音,视频,地理位置等消息 当普通易信用户向公众账号发消息时,易信服务器将POST消息的XML ...

  8. 易信公众平台开发从入门到精通之天气预报

    天气预报 易信公众平台支持图文消息的返回,今天我们就说说如何使用易信公众平台实现一个图文天气预报. 天气预报API接口 1百度天气API 百度天气预报API接口可以提供当天以及未来三天的天气预报,其U ...

  9. 易信公众平台开发从入门到精通之开发验证

    开发者模式 在"高级功能"页面中,我们首先要开启"开发者模式",如下图: 点击"查看详情"按钮,打开界面如下: 这里我们需要填写URL和To ...

最新文章

  1. python3.6.3安装-CentOS6.8安装Python3.6.3
  2. kafka安装、配置、启动、常用命令及shell启动脚本编写
  3. linux之universal usb installer安装ubuntu
  4. 计算机选配 注意事项,选择鼠标注意事项有哪些
  5. Stanley-系列三
  6. 利用 Flask 动态展示 Pyecharts 图表数据的几种方法
  7. 快速修复 Log4j2 远程代码执行漏洞步骤
  8. 网页设计中一些小功能
  9. rhel5编译安装2.6.29.2内核
  10. mysql 获得年月函数_mysql之日期函数
  11. python可以代替按键精灵吗_Python 假装自己是按键精灵
  12. c++实习岗面试经历
  13. 装了V2.6.41,C4D启动卡死在初始化插件页面,装了RS后C4D无法启动,C4D用什么版本的RS?
  14. 小米平板1刷los神盾系统
  15. VMware Workstation Pro安装教程图文详解
  16. java技术--报警通知及实现方式
  17. android 后台自动拍照,怎么实现后台拍照功能,求解
  18. ICPR 2022 | 第一届卫星视频运动目标检测与跟踪挑战赛正式开赛
  19. 进程间通信的方式——信号、管道、消息队列、共享内存
  20. 播放器android版最新官方版下载安装,万能播放器安卓版下载

热门文章

  1. 云存储服务broker系统(九)——桶标签及桶日志管理
  2. 唐僧团队的师徒定位(转载)
  3. php 两段文本对比,不同的文字显示高亮
  4. MATLAB-fsolve函数帮助文档翻译与补充
  5. excel制作柏拉图步骤
  6. [转]李平:大型网站的灵魂——性能
  7. ZYNQ7000固化流程
  8. 全球及中国建筑设计行业规划布局与十四五竞争现状分析报告2021版
  9. python手册 apk_python apk签名
  10. 马老板回国,必有大事发生!阿里一拆为六,迎24年来最大组织改革,张勇放权助力六大业务板块再冲IPO!