申请公众号网页
邮箱激活后,选择公众号类型。不同的公众号拥有不同的能力,详情请见wiki:公众号接口权限说明,当然,服务号、企业号需要一定的证件和相关资料填写,如果证件一时不能准备好,没关系,公众号其实已注册,下次可以根据此邮箱&密码登录再选择。
1.4 开发者基本配置
1) 公众平台官网登录之后,找到“基本配置”菜单栏
2) 填写配置
url填写:http://外网IP/wx 。外网IP请到腾讯云购买成功处查询。http的端口号固定使用80,不可填写其他。
Token:自主设置,这个token与公众平台wiki中常提的access_token不是一回事。这个token只用于验证开发者服务器。
3) 现在选择提交肯定是验证token失败,因为还需要完成代码逻辑。改动原先main.py文件,新增handle.py
先附加逻辑流程图
4) 重新启动成功后(python main.py 80),点击提交按钮。若提示”token验证失败”, 请认真检查代码或网络链接等。若token验证成功,会自动返回基本配置的主页面,点击启动按钮
1.5 重要事情提前交代
接下来,文章准备从两个简单的示例入手。
示例一:实现“你说我学”
示例一:实现“图尚往来”
两个简单的示例后,是一些基础功能的介绍:素材管理、自定义菜单、群发。所有的示例代码是为了简明的说明问题,避免代码复杂化。
在实际中搭建一个安全稳定高效的公众号,建议参考框架如下图:
1)AccessToken中控服务器:
负责:提供主动刷新和被动刷新机制来刷新accessToken并存储(为了防止并发刷新,注意加并发锁),提供给业务逻辑有效的accessToken。
优点:避免业务逻辑方并发获取access_token,避免AccessToken互相覆盖,提高业务功能的稳定性。
2)API-Proxy服务器:
负责:专一与微信API对接,不同的服务器可以负责对接不同的业务逻辑,更可进行调用频率、权限限制。
优点:某台API-proxy异常,还有其余服务器支持继续提供服务,提高稳定性,
避免直接暴漏内部接口,有效防止恶意攻击,提高安全性。
2 实现“你问我答”
目的:
1)理解被动消息的含义
2)理解收\发消息机制
预实现功能:
粉丝给公众号一条文本消息,公众号立马回复一条文本消息给粉丝,不需要通过公众平台网页操作。
2.1 接受文本消息
即粉丝给公众号发送的文本消息。官方wiki链接:消息管理/接收消息-接受普通消息
粉丝给公众号发送文本消息:“欢迎开启公众号开发者模式”,在开发者后台,收到公众平台发送的xml 如下:(下文均隐藏了ToUserName 及 FromUserName 信息)
解释:
text: 用于标记该xml 是文本消息,一般用于区别判断
欢迎开启公众号开发者模式: 说明该粉丝发给公众号的具体内容是欢迎开启公众号开发者模式
2.2 被动回复文本消息
即公众号给粉丝发送的文本消息,官方wiki链接: 消息管理/接收消息-被动回复消息
特别强调:
1) 被动回复消息,即发送被动响应消息,不同于客服消息接口
2) 它其实并不是一种接口,而是对微信服务器发过来消息的一次回复
3) 收到粉丝消息后不想或者不能5秒内回复时,需回复“success”字符串(下文详细介绍)
4) 客服接口在满足一定条件下随时调用
公众号想回复给粉丝一条文本消息,内容为“test”, 那么开发者发送给公众平台后台的xml 内容如下:
特别备注:
1)ToUserName(接受者)、FromUserName(发送者) 字段请实际填写。
3)text : 用于标记 此次行为是发送文本消息 (当然可以是image/voice等类型)。
4)文本换行 ‘\n’。
2.3 回复success问题
解释一下为何有这么奇怪的规定。发起重试是微信后台为了尽可以保证粉丝发送的内容开发者均可以收到。如果开发者不进行回复,微信后台没办法确认开发者已收到消息,只好重试。
真的是这样子吗?尝试一下收到消息后,不做任何回复。在日志中查看到微信后台发起了三次重试操作,日志截图如下:
三次重试后,依旧没有及时回复任何内容,系统自动在粉丝会话界面出现错误提示“该公众号暂时无法提供服务,请稍后再试”。
2.4 流程图
测试结果:
1)”请求失败”,说明代码有问题,请检查代码逻辑。
2)“请求成功”,然后根据返回结果查看是否符合预期。
2.7 真实体验
拿出手机,微信扫描公众号二维码,成为自己公众号的**个粉丝。公众号二维码位置如下图:
测试如下图:
3 实现“图”尚往来
目的:
1)引入素材管理
2)以文本消息,图片消息为基础,可自行理解剩余的语音消息、视频消息、地理消息等
预实现功能:
接受粉丝发送的图片消息,并立马回复相同的图片给粉丝。
3.1 接收图片消息
即粉丝给公众号发送的图片消息。官方wiki链接:消息管理/接收消息-接受普通消息/ 图片消息从实例讲解,粉丝给公众号发送一张图片消息,在公众号开发者后台接收到的xml如下:
特别说明:
这里填写的MediaId的内容,其实就是粉丝的发送图片的原MediaId,所以粉丝收到了一张一模一样的原图。
如果想回复粉丝其它图片怎么呢?
1) 新增素材,请参考 新增临时素材 或者 新增**素材
2) 获取其MediaId,请参考 获取临时素材MediaID 或者 获取**素材MediaID
3.3 流程图
3.4 码代码
只显示更改的代码部分,其余部分参考上小节,在线测试,真是体验,回复空串,请参考 实现"你问我答"
4.1 查看appid及appsecret
公众平台官网查看, 其中AppSecret 不点击重置时候,则一直保持不变。
4.2 获取accessToken
4.2.1临时方法获取
为了方便先体验其他接口,可以临时通过在线测试 或者 浏览器获取accessToken。
4.2.2 接口获取
5 临时素材
公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过MediaID来进行的。譬如实现“图”尚往来中,粉丝给公众号发送图片消息,便产生一临时素材。
因为**素材有数量的限制,但是公众号又需要临时性使用一些素材,因而产生了临时素材。这类素材不在微信公众平台后台长期存储,所以在公众平台官网的素材管理中查询不到,但是可以通过接口对其操作。
其他详情请以公众平台官网wiki介绍为依据。
5.1 新建临时素材
接口详情请依据wiki介绍。提供参考代码如何上传素材作为临时素材,供其它接口使用。
vim media.py 编写完成之后,直接运行media.py 即可上传临时素材。
_ID (自行替换数据)
ACCESS_TOKEN 如 "AccessToken"章节讲解
MEDIA_ID 如 图尚往来/接受图片消息xml中的MediaId 讲解
只要数据正确,则会下载图片到本地,如下图:
5.3.2接口获取
现在已经理解这个接口的功能了,只剩码代码了。
直接运行 media.py 即可把想要的素材下载下来,其中图文消息类型的,会直接在屏幕输出json数据段。
6 **素材
6.1 新建**素材的方式
6.1.1 手工体验
6.1.2接口删除
新增**素材接口(详情见wiki),跟新增临时素材的操作差不多,使用url不一样而已,这里避免重复,以新增**图文素材接口为例,新增其他类型的素材请参考新增临时素材代码。
6.2 获取**素材MediaID
1) 通过新增**素材接口(详情见wiki)新增素材时,保存MediaID
2) 通过获取**素材列表(下文介绍) 的方式获取素材信息,从而得到MediaID
6.3 获取素材列表
官方wiki链接:获取素材列表特别说明:此接口只是批量拉取素材信息,不是一次性拉去所有素材的信息,所以可以理解offset字段的含义了吧。
6.4 删除**素材
如果我想删除掉 20160102.jpg 这张图片,除了官网直接操作,也可以使用接口:
删除**素材
接口文档。
首先需要知道该图片的mediaID,方法上小节已讲述。代码可参考上小节:Material().delete() 接口
调用接口成功后,在公众平台官网素材管理的图片中,查询不到已删除的图片。
7 自定义菜单
自定义菜单意义作用请参考官方wiki 介绍。
目标:三个菜单栏,体验click、view、media_id 三种类型的菜单按钮,其他类型在本小节学习之后,自行请查询公众平台wiki说明领悟。
7.1 创建菜单界面
1)根据公众平台wiki 给的json 数据编写代码,其中涉及media_id部分请阅读"**素材"章节。
2)在腾讯云服务器上执行命令:python menu.py。
3)查看:
重新关注公众号后即可看到新创建菜单界面,题外话,如果不重新关注,公众号界面也会自动更改,但又时间延迟。
如下图所示,点击子菜单“更新公告“(view类型),弹出网页(pc版本)
7.2 完善菜单功能
显然,click类型的还需要开发者进一步完善后台代码逻辑,增加对自定义菜单事件推送的相应。
7.2.1 流程图
7.2.2码代码
编译好代码后,重新启动服务,(sudo python main.py 80),view类型、media_id类型的本身就很容易实现,现在重点看一下click类型的菜单按钮。
微信扫码成为公众号的粉丝,点击菜单按钮“开发指引”。
查看后台日志,发现接收到一条xml,如截图:
公众号的后台代码设置对该事件的处理是回复一条内容为“编写之中”的文本消息,因此公众号发送了一条文本消息给我,如图:
好啦,到此,目标已实现。对于自定义菜单其他类型,均同理可操作。
8 关于反馈问题
是程序肯定有bug,所以在使用开放平台过程中,肯定会遇见各种各样的问题,可能是自己的坑,也可能是微信团队的锅。当自己查自己代码千千遍,依旧没有发现问题时候,可以通过腾讯客服等等渠道,请求微信团队的帮助。如何高效快速的得到帮助呢?下面强调三个要点:
1)简明扼要的描述清楚场景以及遇见问题,描述过程中尽可能使用wiki上的名称,譬如自定义菜单,素材管理等专有名词,不然开发根本不知道你在说什么。
2)提供账号信息:AppID(登陆公众平台官网->基本配置),若牵扯粉丝提供粉丝的OpenID。
3)提供bug的发生时间,至少要以小时为单位(年-月-日-小时),当然越具体越容易查明问题。
版权声明:本稿件文字、图片内容为西安昆奇网络科技公司
声明:转载分享请注原创版权,转载将依法追究版权责任。
«高端建站·稳定优化排名☞竞价推广☞网络运营·诊断»
快速添加昆奇微信
更多昆奇网站推广运营内容请持续关注我们的微信【西安昆奇网络科技有限公司】
来源 | 由“昆奇网络”原创整理
声明:转载分享请注明出处