0%

微信公众号开发

简单记录一下微信公众号开发流程,很多年前就开发过,然后过了一段时间,又完全忘了。还得一点一点看文档。所以这次先做一个记录。开发的功能就是,当用户发送消息以后,回复一条消息给用户。

申请微信开发测试号

先申请一个测试号,不需要注册什么,有微信,扫码一下就注册了。

https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

进去后,我们可以获取到 appID, appsecret。Token是自己设置的,随便设置一个就行。aesKey在正式生产环境里面才需要。

内网穿透

微信开发后台需要连接到我们开发的电脑,一般情况下这台电脑是没有公网IP的,而且都是在局域网内,所以要把这台机器的端口映射出去。

ngrok.com 去注册一个账号就可以了。

然后按使用说明运行命令,把token存入本地。然后启动 ngrok,我是把本地 8080 映射要外网。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ ./ngrok authtoken [token]
$ ./ngrok http 8080
ngrok by @inconshreveable (Ctrl+C to quit)

Session Status online
Account S (Plan: Free)
Version 2.3.35
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://020170f28e33.ngrok.io -> http://localhost:8080
Forwarding https://020170f28e33.ngrok.io -> http://localhost:8080

Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00

配置微信平台接口信息

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
2
3
4
5
WxMpMaterial wxMpMaterial = new WxMpMaterial();
wxMpMaterial.setFile(new File("/Users/simon/Desktop/logo.png"));
wxMpMaterial.setName("logo");
WxMpMaterialUploadResult res = wxMpService.getMaterialService().materialFileUpload("png", wxMpMaterial);
System.out.println(JsonUtils.toJson(res));

这时,我们就可以获得这个图片的 mediaId 了,然后修改 MsgHandler 的逻辑,返回一个 ImageBuilder 就可以了。

redirect_uri 参数错误

调试微信前公众号的时候,往往会遇到这个错误,这时,需要在 OAuth2.0 网页授权页面配置好授权回调页面域名。沙盒号回调地址支持域名和ip,正式公众号回调地址只支持域名。所以这里不能使用
localhost,但写成本地的ip地址是可以的。还需要特别注意的是,这里只能写ip和端口号,不能把协议http加入,不然还是会出现这个错误。

调试平台

我们可以通过调试平台来创建菜单,获取token等。获取token时,可能会遇到invalid ip, not in whitelist错误。

这时,需要把获取access_token的机器的ip添加到白名单中。位置在 基础配置 -> IP白名单