简单记录一下微信公众号开发流程,很多年前就开发过,然后过了一段时间,又完全忘了。还得一点一点看文档。所以这次先做一个记录。开发的功能就是,当用户发送消息以后,回复一条消息给用户。
申请微信开发测试号
先申请一个测试号,不需要注册什么,有微信,扫码一下就注册了。
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
进去后,我们可以获取到 appID, appsecret。Token是自己设置的,随便设置一个就行。aesKey在正式生产环境里面才需要。
内网穿透
微信开发后台需要连接到我们开发的电脑,一般情况下这台电脑是没有公网IP的,而且都是在局域网内,所以要把这台机器的端口映射出去。
在 ngrok.com
去注册一个账号就可以了。
然后按使用说明运行命令,把token存入本地。然后启动 ngrok,我是把本地 8080 映射要外网。
1 | ./ngrok authtoken [token] |
配置微信平台接口信息
按 weixin-java-mp-demo-springboot
项目要求,配置微信公众号中的接口地址:http://公网可访问域名/wx/portal/xxxxx (注意,xxxxx为对应公众号的appid值)
几年前,一般还要点两下才会成功,现在一下就成功了。
自动回复消息
我打算以回复一张图片。首先需要先上传一张图片,并得到其mediaId。
我们先看看这个项目的开发文档。
https://github.com/Wechat-Group/WxJava/wiki
找到微信公众号开发文档,永久素材管理页面,https://github.com/Wechat-Group/WxJava/wiki/MP_永久素材管理
然后写一段上传永久素材图片的代码。
1 | WxMpMaterial wxMpMaterial = new WxMpMaterial(); |
这时,我们就可以获得这个图片的 mediaId 了,然后修改 MsgHandler 的逻辑,返回一个 ImageBuilder 就可以了。
redirect_uri 参数错误
调试微信前公众号的时候,往往会遇到这个错误,这时,需要在 OAuth2.0 网页授权页面配置好授权回调页面域名。沙盒号回调地址支持域名和ip,正式公众号回调地址只支持域名。所以这里不能使用
localhost,但写成本地的ip地址是可以的。还需要特别注意的是,这里只能写ip和端口号,不能把协议http
加入,不然还是会出现这个错误。
调试平台
我们可以通过调试平台来创建菜单,获取token等。获取token时,可能会遇到invalid ip, not in whitelist
错误。
这时,需要把获取access_token的机器的ip添加到白名单中。位置在 基础配置
-> IP白名单
。