磨快你的刀并防止它砍柴
想必大家都用过微信公众号。 目前微信公众号主要分为订阅号和服务号。 每个账户分为未认证账户和已认证账户。 它们之间的主要区别在于接口权限不同。 下图(引自微信开发实战系列)是一些例子:
一般来说,服务账号权限 > 订阅账号权限,认证账号权限 > 未认证账号权限。 申请订阅号相对简单,但服务号则比较复杂。 另外,如果想要获得认证,还需要提交一些额外的材料。 我们可以根据不同的业务需求申请不同类型的账户。 基本上常用的权限列表可以满足大部分场景。
开发微信公众号本质上和普通网站开发没有什么区别。 当我们进入公众号页面时,我们可以向公众号发送文字、语音、图片等消息,也可以通过点击页面底部的菜单来触发相应的功能。 那么开发者如何与微信用户互动呢? 事实上,我们在公众号中的所有操作都会发送到微信服务器上。 微信服务器将这些动作的具体含义以一定的格式封装起来,发送到微信公众号对应的服务器上(这个服务器的地址可以由开发者在微信公众号后台进行配置)。 开发者编写代码处理不同的用户行为,并将处理结果以一定的格式返回给微信服务器,然后微信服务器发送给微信公众号。 从而完成一个交互过程。 这里我借用方蓓老师博客上的一张图来展示一下这个过程,可以帮助大家更清楚地理解:
至此我们就可以知道,所谓的微信公众号开发其实就是编写业务代码来处理用户的操作请求。 这会涉及到与微信服务器的通信,也涉及到安全认证的一些知识。 本文将通过一个实际例子来说明。 现在,我们来看看具体的流程。
不用稻草砌砖
开发微信公众号需要准备以下两个材料:
微信公众号
您可以在微信公众平台官网申请微信公众号。 如前所述,微信公众号分为几种类型。 不同的类型有不同的权限。 具体权限列表可以查看微信公众平台技术文档。 值得注意的是,不再支持个人公众号申请微信认证。 申请过程无非就是填写您的电子邮件和信息。 推荐使用QQ邮箱,毕竟是你自己的事。
服务器
由于我们的服务器需要与微信服务器进行交互,所以必须能够被微信服务器访问。 许多公司以不同的价格提供云服务器租赁。 您可以自行申请。 详细内容在此不一一列举。 如果不想花钱申请,也可以使用一些外网穿透工具,将本地IP暴露到公网,供外部访问。 具体工具请参考百度。 但大多数软件的稳定性无法保证,分配的域名也经常发生变化。 个人建议还是申请服务器比较方便。 一旦公众号运营好了,开始有粉丝了,这一切都不再重要了~
撸起袖子加油干
以下是详细步骤:
开启公众号开发者模式
为了让微信服务器知道开发者服务器的存在,必须在公众号后台进行相应的配置。
(1)登录公众平台官网,在左侧功能栏下方找到一个基本配置选项。
(2)点击基本配置按钮,在右侧页面填写服务器相关信息。 URL中填写外部IP:端口号/wx,其中外部IP为服务器的外部IP地址,端口号固定为80。可以随意填写,用于与服务器之间的验证两台服务器。 详细见下图:
(3) 点击提交按钮,会提示配置失败。 这是很自然的,因为我们还需要在开发者服务器上进行配置来完成验证过程。
(4)为什么配置微信公众号时提示失败? 这里我们需要探讨一下这个认证过程。 当我们点击提交时,微信服务器会向我们填写的URL发起GET请求,携带以下参数:, , , 。 其中有时间戳、随机数、随机数。 这些都很常见。 关键点在于,它的生成方式是将“、”、“、”(这是我们在网页中配置的)这三个字符串按照字典顺序组合起来。 排序后,对排序后的字符串数组使用哈希加密算法获取。 我们的服务器收到这个GET请求后,会提取相应的参数并生成,如上所述。 如果值与参数相同,则返回给微信服务器,否则返回空值。 微信服务器收到后,会验证该值是否与自己发送的值相同。 如果相同,则说明这个值确实是我们服务器返回的,从而完成了验证。 以后所有的信息都可以发送到这个服务器地址。 。 这就涉及到一些安全认证相关的知识。 有兴趣的朋友可以查看更详细的信息。 一般来说,就是让双方进行沟通,确认对方的真实身份。 以下是认证部分的主要代码,使用.7和web.py框架编写:
编写服务器业务逻辑
前面我们完成了微信服务器和开发者服务器之间的相互认证过程。 接下来我们需要编写业务逻辑代码来处理微信服务器发送的信息。 以短信为例,当用户在公众号页面发送消息时,微信服务器会将消息封装成如下XML格式,并作为请求内容向开发者服务器发起POST请求:
每个字段的具体含义通过字段名称来体现,比较直观。 我们首先需要解析这个XML对象并提取每个字段以进行后续处理:
解析之后,我们可以根据不同类型的消息,在主函数中调用不同的处理函数,得到相应的处理结果。 然后我们需要将处理结果封装成同样的XML格式返回给微信服务器。 封装XML对象的代码如下所示(以短信为例):
至此,我们就完成了一个简单的回复流程(虽然目前这只能回复短信==)。
进入下一个级别
以上是一个基本的微信公众号开发流程。 当然,想要让我们的公众号丰富多彩,我们需要掌握的东西还有很多,比如
(1):我们之前所做的实际上是被动回复消息。 微信服务器发起POST请求,我们通过微信服务器将处理后的内容返回给用户。 如果我们需要主动与用户进行交互,比如主动给用户发送消息,我们就需要调用微信公众平台提供的相应接口,并且需要主动告诉微信服务器我们的身份,这是通过.
微信公众号全球唯一的接口调用凭证。 公众号调用各个接口时都需要用到。
上面提到,我们在调用各个接口之前,需要使用公众号的 和 信息(这两个值可以在微信公众号的网页上查看)来请求微信服务器,然后用这个值来调用微信公众平台提供的接口来实现相应的功能。
(2)微信网页开发:网页开发是指编写一系列的页面,引导用户打开我们在微信公众号中开发的页面,实现相关的业务逻辑。 该功能让公众号就像微信中的嵌入式应用程序一样,可以实现非常复杂的交互逻辑,并且比普通应用程序要小。
从这里开始
以上就是本文的主要内容。 作者经验不多,大胆写出文章。 如有不妥之处,欢迎指出。 本文主要是介绍性的介绍。 后续的开发还有很多需要学习的地方。 这里有一些我个人认为不错的文档和资料。 笔者也从他们身上学到了很多东西。 我要感谢所有作者。
(1)微信公众平台技术文档
(2)方培工作室-微信公众平台开发教程
(三)微信开发者联盟
(4)微信开发实战系列
本文代码已上传至,包含微信公众号一些常用功能的实现,仅供参考:微信公众号开发示例程序