最近项目要求接触微信公众号的开发,遇到很多问题。
我先从头开始讲吧,大家如果想要直接找问题的可以往下翻。
以下部分步骤是根据网上的帖子进行操作的,我自行补充了一些东西,以便理解。
帖子地址:https://www.cnblogs.com/JessicaIsEvolving/p/11141133.html
申请微信公众号开发者账号。
http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
1、填写接口配置信息
需要注意的是,这个URL很多人不知道怎么填,查看文档可能也不知道咋填。(比如我)
首先,你需要起一个项目,并且该项目是外网可访问的,最好是有域名指向的。
我这边是本机的端口映射到外网,做个指向。然后再域名指向外网的端口。
域名 ===> 外网ip端口 ===> 本地ip端口。
所以我这里端口号是自定义的,并没有按照必须80或443来填。
废话完毕,接下来是URL相关。
写一个接口,用于校验公众号返回来的Token验证,具体代码如下:
import me.chanjar.weixin.mp.api.WxMpService;
private final WxMpService wxService;
@RequestMapping("/wx/checkToken/{appid}")
public String checkToken(@PathVariable String appid,
@RequestParam(name = "signature", required = false) String signature,
@RequestParam(name = "timestamp", required = false) String timestamp,
@RequestParam(name = "nonce", required = false) String nonce,
@RequestParam(name = "echostr", required = false) String echostr) {
log.info("\n接收到来自微信服务器的认证消息:[{}, {}, {}, {}]", signature,
timestamp, nonce, echostr);
if (StringUtils.isAnyBlank(signature, timestamp, nonce, echostr)) {
throw new IllegalArgumentException("请求参数非法,请核实!");
}
if (!this.wxService.switchover(appid)) {
throw new IllegalArgumentException(String.format("未找到对应appid=[%s]的配置,请核实!", appid));
}
if (wxService.checkSignature(timestamp, nonce, signature)) {
return echostr;
}
return "非法请求";
}
请注意,这里必须是GET请求。
这是微信公众号的Maven导入:
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>3.8.0</version>
</dependency>
然后这个URL就填这个接口的地址就行啦!记住,一定要是外网可访问的,因为是提供给微信那边的Token验证回调。
接口地址例如:http://ck.xxx.com/wx/checkToken/wx123456789
接下来是Token,这个随意填写就好,自己记住就行。具体作用这里不做阐述。后面也是可以修改的,所以填啥都可以。
例如:cktestToken、甚至abcd等等都可以。。。
2、配置JS接口安全域名
注意:这里域名不需要以http或https开头,那只是协议。
例如:ck.xxx.com
3、配置网页账号。
这里藏的比较深,也比较容易被忽略。
在体验接口权限表里面找到网页服务===>网页账号===>修改
这里填写你的域名,例如:ck.xxx.com
填好之后就大功告成了,用微信扫描测试号二维码就可以关注自己的微信公众号了。
假如出现【“redirect_uri域名与后台配置不一致”,错误码10003】
请仔细检查第一步、第二步、第三步是否有配置正确?请仔细检查菜单链接的url是否配置正确?