Java实现微信授权 获取用户OpenID(简单易实现)

迈不过友情╰ 2023-09-27 08:40 200阅读 0赞

接上篇,我们从微信开发文档获取openid后,感觉这种方式有点麻烦,今天给大家推荐更好的一种方法,GitHub - Wechat-Group/WxJava: 微信开发 Java SDK ,支持包括微信支付,开放平台,小程序,企业微信,公众号等的后端开发

一、首先加入依赖,我们这里添加公众号的依赖

4f76db92c0394d0a9df1d0bae9903992.png

二、打开说明文档,MP_OAuth2网页授权 · Wechat-Group/WxJava Wiki · GitHub

下面这四个步骤和我们之前在微信开发文档中的步骤基本上差不多,话不多说,开始实操吧!

d9ad438eabff47d691b9d20079f34423.png

三、首先构造网页授权url,然后构成超链接让用户点击

  1. @Data
  2. @Component
  3. @ConfigurationProperties(prefix = "wechat")
  4. public class WechatAccountConfig {
  5. private String mpAppId;
  6. private String mpAppSecret;
  7. }
  8. @Configuration
  9. public class WeChatMpConfig {
  10. @Autowired
  11. private WechatAccountConfig accountConfig;
  12. @Bean
  13. public WxMpService wxMpService() {
  14. WxMpService wxMpService = new WxMpServiceImpl();
  15. wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
  16. return wxMpService;
  17. }
  18. @Bean
  19. public WxMpConfigStorage wxMpConfigStorage() {
  20. WxMpInMemoryConfigStorage wxMpConfigStorage = new WxMpInMemoryConfigStorage();
  21. wxMpConfigStorage.setAppId(accountConfig.getMpAppId());
  22. wxMpConfigStorage.setSecret(accountConfig.getMpAppSecret());
  23. return wxMpConfigStorage;
  24. }
  25. }

编写我们的控制类,用来获取openId的类

  1. @Controller
  2. @RequestMapping("/wechat")
  3. @Slf4j
  4. public class WeChatController {
  5. @Autowired
  6. private WxMpService wxMpService;
  7. @GetMapping("/authorize")
  8. public String authorize(@RequestParam("returnUrl") String returnUrl){
  9. String url="http://xiaoheihai.natapp1.cc/sell/wechat/userInfo";
  10. // 配置
  11. // 调用方法
  12. String result=wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAUTH2_SCOPE_USER_INFO, URLEncoder.encode(returnUrl));
  13. log.info("微信网页授权,获取code,result={}",result);
  14. return "redirect:"+result;
  15. }
  16. @GetMapping("/userInfo")
  17. public String userInfo(@RequestParam("code") String code,
  18. @RequestParam("state") String url) {
  19. WxMpOAuth2AccessToken wxMpOAuth2AccessToken=new WxMpOAuth2AccessToken();
  20. try {
  21. wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);
  22. } catch (WxErrorException e) {
  23. log.error("微信网页授权,{}",e);
  24. throw new SellException(ResultEnum.WX_MP_ERROR.getCode(),e.getError().getErrorMsg());
  25. }
  26. String openId = wxMpOAuth2AccessToken.getOpenId();
  27. log.info("openId={}",openId);
  28. return "redirect:"+url+"?openid="+openId;
  29. }
  30. }

上面代码的url地址可以换成自己的域名,接下来开始测试吧,我们随便访问一个地址,例如: xiaoheihai.natapp1.cc/sell/wechat/authorize?returnUrl=http://www.baidu.com,后面的http://www.baidu.com可以自定义,测试要在微信测试哦

f255600e9a7c443ab65197772ad96ce8.png

点击后会跳转到百度首页,此时看idea控制台输出以下内容

8054ec42472247c09e9335da44882ff1.png

此时我们就拿到了OpenId,为了验证我们还可以复制此时的百度首页链接

  1. https://www.baidu.com/?openid=oLiOO54bZfDYSSC87zwn7oml9h88

会看到链接地址中也包含了OpenId

发表评论

表情:
评论列表 (有 0 条评论,200人围观)

还没有评论,来说两句吧...

相关阅读