磨刀不误砍柴工

微信公众号大家肯定都用过。目前微信公众号主要分为订阅号和服务号,每种账号又分为未认证和已认证,它们的差别主要在于具有不同的接口权限,下图(引用自微信开发实战系列)是一些例子:

不同类型公众号的权限

总体来说,服务号权限 > 订阅号权限,认证账号权限 > 未认证账号权限。申请订阅号比较简单,服务号相对复杂点,另外要认证的话还要额外提交一些材料。我们可以根据不同的业务需求去申请不同类型的账号,基本上常用的权限列表已经可以满足大部分的场景。

开发微信公众号本质上和通常的网站开发并无区别。当我们进入一个公众号页面之后,我们可以向公众号发送文字、语音、图片等消息,也可以通过点击页面下方的菜单触发相应的功能。那么开发者与微信用户究竟是怎么进行交互的呢?实际上我们在公众号里的所有操作,都会发送到微信的服务器上,微信服务器将这些动作的具体含义按照一定的格式进行封装后,发送到微信公众号所对应的服务器上(这个服务器的地址可以由开发者在微信公众号的后台进行配置),开发者通过编写代码来处理不同的用户行为,并将处理后的结果按照一定的格式返回给微信服务器,再由微信服务器发送到微信公众号里面,从而完成了一次交互过程。在这里借用方倍老师博客中的一张图片来展示下这个过程,可以帮助大家理解地更清楚:

微信用户与开发者的交互流程

到这里我们可以知道,所谓的微信公众号开发,其实就是编写业务代码来处理用户的动作请求。这里面会涉及到和微信服务器之间的通信,也就涉及到一些安全认证方面的知识,后文会通过一个实际的例子进行说明。现在,就让我们来看看具体的流程吧。

巧妇难为无米之炊

开发微信公众号需要准备以下两样食材:

1、微信公众号

微信公众号可以在微信·公众平台的官网上申请。前文说过,微信公众号分为几种类型,不同的类型具有不同的权限,具体的权限列表可以查看微信公众平台技术文档。值得注意的是,现在已经不再支持个人类型的公众账号申请微信认证。申请的过程无非是填写下邮箱和信息,建议使用QQ邮箱,毕竟是自家的东西。

2、服务器

由于我们的服务器需要与微信服务器进行交互,因此必须能够让微信服务器可以访问到。很多公司都提供了云服务器租赁,价格不一,可以自行申请,细节在此不表。如果不想花钱申请,也可以使用一些外网穿透工具,将本地的IP暴露到公网中供外部访问,具体的工具请自行百度,不过大部分软件稳定性无法保证,而且分配的域名经常改变。个人建议还是申请一台服务器比较方便,等以后公众号运营良好开始涨(ying)粉(li)了,这些都不是事~

撸起袖子加油干

以下是详细步骤:

1、开启公众号开发者模式

为了让微信服务器知道开发者服务器的存在,必须在公众号后台进行相应的配置。

(1)登录公众平台官网,找到左边功能栏的最下方,有一个基本配置的选项

(2)点击基本配置按钮,在右边的页面中填写服务器的相关信息。其中URL填写http://外网IP:端口号/wx,这里外网IP是服务器的外网IP地址,端口号固定填写80。Token可以自由填写,用于两个服务器之间的验证。具体见下图:

配置微信公众号

(3)点击提交按钮,提示配置失败。这是自然的,因为我们还需要在开发者服务器上进行配置,才能完成验证的过程。

(4)前面在配置微信公众号时为什么提示失败呢?在此我们有必要探究下这个认证过程。当我们点击了提交后,微信服务器会向我们所填写的那个URL发起一个GET请求,并携带以下几个参数:timestamp, nonce, echostr, signature。其中timestamp是一个时间戳,nonce是一个随机数,echostr也是随机数,这几个都很普通,重点在于signature,它的生成方式是将nonce、timestamp和token(也就是我们在网页中配置的TOKNE)三个字符串按照字典序排序后,对排序后得到的字符串数组使用哈希加密算法得到。我们的服务器在收到这个GET请求后,提取对应的参数,并按照前面说的方式生成hashcode,如果这个值与参数中的signature相同,那么我们就将echostr返回给微信服务器,否则返回空值。微信服务器收到这个echostr之后,验证这个值与它发送的echostr值是否相同,如果相同,说明这个值的确是由我们的服务器返回的,从而完成验证,今后所有的信息就都可以发送到这个服务器地址上。这里面涉及到了一些安全认证的相关知识,有兴趣的朋友可以去查阅更详细的资料。总的来说,就是让通信的双方都能够确认对方的真实身份。以下是认证部分的主要代码,使用Python2.7和web.py框架编写:

验证开发者服务器

2、编写服务器业务逻辑

前面我们完成了微信服务器与开发者服务器的相互认证过程,接下来我们需要编写业务逻辑代码来处理微信服务器发送过来的信息。以文本消息为例,当用户在公众号页面发送了消息后,微信服务器会将这条消息封装成如下的XML格式,并将其作为请求的内容向开发者服务器发起一个POST请求:

微信服务器封装的请求内容

各个字段的具体含义就如字段名所示,比较直观。我们首先需要解析这个XML对象,并提取出各个字段用于后续的处理:

解析XML对象

解析之后,我们可以在主函数中根据消息的不同类型,来调用不同的处理函数得到相应的处理结果,然后我们要将处理结果封装成同样的XML格式返回给微信服务器,封装XML对象的代码如下所示(以文本消息为例):

封装XML对象

至此,我们就完成了一个简单的回复流程(虽然目前这种只能回复文本消息==)。

更上一层楼

以上就是一个基本的微信公众号开发流程。当然,想要让我们的公众号变得多姿多彩,需要掌握的内容还有很多。比如

(1)access_token:前面我们所做的实际是被动回复消息,微信服务器发起POST请求,我们将处理后的内容借由微信服务器返回给用户。如果我们需要主动地和用户进行交互,比如主动地向用户发一条消息,我们就需要调用微信公众平台提供的相应接口,并且需要主动告诉微信服务器我们的身份,这是通过access_token实现的。

access_token是微信公众号的全局唯一接口调用凭据,公众号在调用各个接口时都需要使用access_token

如上所述,在我们调用各个接口前,需要先使用公众号的appidappSecret信息(这两个值可以从微信公众号的网页上查看)向微信服务器请求获取access_token,然后带着这个值去调用微信公众平台提供的接口,实现相应的功能。

(2)微信网页开发:网页开发就是指编写一系列的HTML5页面,并在微信公众号中引导用户打开我们开发的页面,从而实现相关的业务逻辑,这一功能使得公众号可以像一个内嵌在微信当中的应用一样,能够实现非常复杂的交互逻辑,而且相比于通常的应用来说更加小巧。

从这里出发

以上就是本文的主体内容。楼主经验尚浅,斗胆提笔撰文,有不当之处欢迎各位指出。本文主要是一个入门的简介,后续的开发还有很多内容要学,以下列出一些个人认为比较不错的文档和资料,楼主也从中学到了很多,在此感谢各位作者。

(1)微信公众平台技术文档

(2)方培工作室-微信公众平台开发教程

(3)Webot

(4)微信开发者联盟

(5)微信开发实战系列

本文中的代码已上传到github,里面包含了微信公众号一些常用功能的实现,仅供参考:微信公众号开发示例程序

最后,各位如果有任何的问题或者想法,欢迎在评论区交流。

转自https://www.cnblogs.com/08291018wan/p/10523517.html

手把手教你入门微信公众号开发相关推荐

  1. 实例:用C#.NET手把手教你做微信公众号开发(20)--使用微信支付线上收款:jsapi方式

    在做线上.线下销售时,可以使用微信便捷支付,通过微信公众号收款有很多种收款方式,如下图: 今天我们来讲一下jsapi支付,场景就是在微信内打开某个页面,完成在线支付,同样一个网页,使用微信打开就是js ...

  2. 实例:用C#.NET手把手教你做微信公众号开发(21)--使用微信支付线上收款:H5方式

    在做线上.线下销售时,可以使用微信便捷支付,通过微信公众号收款有很多种收款方式,如下图: 今天我们来讲一下H5场景支付,使用手机浏览器打开就是H5方式,最常见的推广是短信内置链接,这种场景需要调用微信 ...

  3. 手把手教你如何微信公众号开发

    最近的话,发现微信开发其实也有很多挺有意思的地方,比如最近很火的一款游戏"跳一跳",也让我如此着迷..但是,今天我所要讲的并不是对于小程序的开发,而是要说一下,关于微信开发的另外一 ...

  4. 实例:用C#.NET手把手教你做微信公众号开发(4)--获取普通access_token、jsapi的方法;用MediaId获取微信服务器图片

    一.access_token概念 这里在后续几篇处理不同的普通消息文章前插播一个适用于整个微信公众号开发的公共类QinMingWeixinContainer,用于获取普通access_token和js ...

  5. 实例:用C#.NET手把手教你做微信公众号开发(2)--普通消息处理之文本

    上一篇文章我们完成了自己的web服务器与微信公众号服务器的对接,本篇开始处理微信用户和服务器之间的互动交流.一个用户与公众号之间,无外乎用户向公众号发送信息.点击公众号里的菜单和链接,或者公众号向用户 ...

  6. 实例:用C#.NET手把手教你做微信公众号开发(22)--网页里通过OAuth获取用户openid

    第一篇:理论 如果一个用户并未关注某个公众号,只是在微信内打开了公众号web服务器上的某个网页,要如何获取用户的openid以及用户的微信信息,以便实现业务逻辑呢?本篇讲述网页授权OAuth获取微信用 ...

  7. 实例:用C#.NET手把手教你做微信公众号开发(7)--普通消息处理之位置消息

    今天我们来讲一下一个非常重要的消息:GPS位置消息. 一.应用举例 基于位置的应用太多太多了,比如: 查找附近的人: 查找附近的商家: 计算与指定的人或商家的距离: 使用百度地图.腾讯地图.阿里地图的 ...

  8. 实例:用C#.NET手把手教你做微信公众号开发(9)--菜单设置

    一.菜单定义 先看个直观的图,菜单在公众号的底部,当一个公众号没有设置菜单时是看不到的,设置之后就是下面的样子. 注意事项: 自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单. 一级菜 ...

  9. 实例:用C#.NET手把手教你做微信公众号开发(3)--普通消息处理之图片

    本着简短.便于理解应用的原则,本系列文章每次只讲一个公众号知识点,给出一个应用实例,通过一个知识点帮助你掌握公众号一类应用的开发方法. 上一篇我们掌握了微信客户端.微信服务器.你的服务器之间的信息互动 ...

  10. 实例:用C#.NET手把手教你做微信公众号开发(6)--普通消息处理之视频、小视频

    本篇讲解微信客户端向公众号发送视频和小视频的处理方式. 视频消息常见应用: 在线教学: 基于公众号的定向类型小视频应用,类似于抖音.快手,但不用再安装app: 视频剪辑.特效添加,比如美颜: 其它视频 ...

最新文章

  1. 树莓派作为客户端与WemosD1作为服务器的无线通信(局域网通信)
  2. php修改ini文件内容,php上传大文件需要修改的php.ini配置文件
  3. 原型即对象(以及认识这点的重要性)
  4. jfinal mysql存储过程_jfinal调用mysql存储过程
  5. hive 列表去重_Hive企业级调优
  6. Linux用户管理命令和压缩解压命令
  7. 计算机制作乘法表格,excel表格乘法怎么用,excel表格怎么算乘法
  8. 让ssh跳转支持ipv6
  9. 算法与数据结构 第2章 排序基础 下 插入排序
  10. python身份证区域分割_python 身份证归属地解析
  11. Android google中文开发网站
  12. PS如何压缩图片而不失真
  13. access如何设置定期报表汇总_创建分组报表或汇总报表
  14. iis服务器版本信息泄漏,IIS短文件和文件夹泄漏漏洞
  15. 写给父亲的语音计算器(‘(‘‘)‘括号优先级处理递归算法c#,一)
  16. android.intent.action大全和用法收集
  17. uis向3d投影全息界面的连续演化。
  18. 符号链接symlink_什么是符号链接或符号链接? 如何为Windows和Linux创建Symlink?
  19. 那些著名的网络攻击事件 一
  20. 针对11.2 RAC丢失OCR和Votedisk所在ASM Diskgroup的恢复手段

热门文章

  1. three.js教程和手册
  2. java jxls 变量,11、进阶之Jxls2的自定义函数
  3. 计算机多媒体简历,[计算机个人简历模板范文]计算机多媒体专业个人简历
  4. mysql的简单用法_mysql简单用法,以及增删改查语句
  5. 【OpenCV】Rect函数
  6. win Server 2012 R2 密钥
  7. java 页面换行_java 页面换行处理
  8. SSM项目实战——图书管理系统
  9. Masscan——端口扫描
  10. VUE源码相关面试题汇总