注意版本号 ~
我这里的pom文件 可以参考~ 只要对应好版本号即可
<dependencies>
<!-- spring boot web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
<!--微信公众号-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>wx-java-mp-spring-boot-starter</artifactId>
<version>3.6.0</version>
</dependency>
</dependencies>
application.yml配置
server:
#运行端口
port: 8080
# 这里对应的公众号的配置 我这里使用微信测试号
wx:
mp:
app-id: appid
secret: appsecret
token: token
aes-key: 这里无需配置
还是不懂是吗? 我自己配置的你们可以参考下~
wx:
mp:
app-id: wxed7bfxxxxxb4b86
secret: c38406xxxxxx72966d287ccf46f050
token: 9iIqaxxxxxxdpwMDqFLg4
aes-key:
这里自己百度: 微信公众号测试平台 然后用自己微信扫码登录进去就可以了
还是放个链接吧: https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login (免得出门被人用麻袋套住)
我这里使用的是内网穿透工具 把本地的8080端口开放出去,让微信服务器那边能请求的到我这
接口配置信息
这个一直通过不了怎么办?????
这里通过不了的原因是微信服务器那边给您配置的URL发信息,您这边没有回应或者回应错误就不成功了
解决方法:
/**
* @author Lucky winner
* 微信服务器token验证
*/
@RestController
@RequestMapping("/wechat")
public class WechatCertificationTokenController {
@Autowired
private WxMpService wxMpService;
/**
* 接口配置信息
* @param signature
* @param timestamp
* @param nonce
* @param echostr
* @return
*/
@GetMapping("/login")
public String login(String signature, String timestamp, String nonce, String echostr) {
/*
* 注意这里的参数配置顺序
* timestamp, nonce, signature
* 检查签名
* */
if (!wxMpService.checkSignature(timestamp, nonce, signature)) {
return null;
}
return echostr;
}
}
接口配置信息的URL填写 http://您的域名/wechat/login
示范:http://uzawyvu.nat.xxxx.com/wechat/login
接口信息配置到这里也就结束了
内心对白: 就这就这就这?? 这就完了? 我要获取用户登录的信息?我要跟xx公司一样把用户的信息玩弄于手掌中。
现实:想多了,微信就返回一段json数据给你,里面包含了用户的一般信息,比如昵称。头像。openid之类的
那来开搞,以上的配置都用好之后,其他的就好办了
第一步:
在微信公众号测试平台中找到这个网页账号,点击修改
无需加http:// 或 https:// (我也被坑过)
配置完成,开始掉头发 哦不 是写代码
@Controller
@RequestMapping("/wechat")
@Slf4j
public class WeChatGetUserInfoController {
@Autowired
private WxMpService wxMpService;
@GetMapping("/getUserInfo")
public void getUserInfo(HttpServletResponse response) throws IOException {
//构造网页授权url
String redirect_uri= "http://您的域名/wechat/getRedirectUserInfo";//回调的url
String url = wxMpService.oauth2buildAuthorizationUrl(redirect_uri, WxConsts.OAuth2Scope.SNSAPI_USERINFO, null);
System.out.println("URL:" + url);
response.sendRedirect(url);
// return url;
}
/**
* 网页授权
* 1 第一步:用户同意授权,获取code
* <p>
* 2 第二步:通过code换取网页授权access_token
* <p>
* 3 第三步:刷新access_token(如果需要)
* <p>
* 4 第四步:拉取用户信息(需scope为 snsapi_userinfo)
*
* @param code
* @return
*/
@GetMapping("/getRedirectUserInfo")
@ResponseBody
public String getRedirectUserInfo(String code) throws WxErrorException, IOException {
//1 第一步:用户同意授权,获取code
log.info("返回code: {}", code);
//2 第二步:通过code换取网页授权access_token
WxMpOAuth2AccessToken wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);
//4 第四步:拉取用户信息(需scope为 snsapi_userinfo)
WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken,null);
log.info("获取到的用户信息: {}", wxMpUser.toString());
}
return wxMpUser.toString();
}
}
可以了 ,有问题可以评论出来,只要看到而且我懂的就会回答