java 微信公众号之授权登录
1.来吧,先来在微信公众号中做一些基本的信息配置
打开此链接:https://mp.weixin.qq.com
在公众号设置-->功能设置,设置网络授权域名
这里一定注意:地址不可以以http://开头,必须包含回调地址,如果回调地址是:https://www.song.com,设置的地址应该是:www.song.com 或www.song.com/wechat/
2.设置IP白名单
在开发-->基本配置->ip白名单:设置为部署的服务器的IP
3.代码实现:我用的是最简洁易懂的方法实现的,没有像其他的博客主实现的那么复杂,会了这个简单的之后,复杂的也就轻而易举的会了
引入的pom依赖
配置文件
@Component public class WechatMpConfig { @Bean public WxMpService wxMpService(){ WxMpService wxMpService = new WxMpServiceImpl(); wxMpService.setWxMpConfigStorage(wxMpConfigStorage()); return wxMpService; } @Bean public WxMpConfigStorage wxMpConfigStorage(){ WxMpInMemoryConfigStorage wxMpConfigStorage = new WxMpInMemoryConfigStorage(); wxMpConfigStorage.setAppId("字符串形式的APPID".trim()); wxMpConfigStorage.setSecret("字符创形式的APPsecret".trim()); return wxMpConfigStorage; } }
接口的代码实现
@RestController @RequestMapping("/wechat") @Api(description = "学生微信登录模块") @Slf4j public class WeChatController { @Autowired WxMpService wxMpService; @GetMapping("/authorize") @ApiOperation(value = "微信授权接口",notes = "微信授权接口") public void authorize(HttpServletResponse response) throws IOException { //www.xyz-xxxx.com 是在公众号里设置的网页授权域名 // https://www.xyz-xxxx.com/wechat/userInfo指的是下面那个接口的路径 String returnUrl = URLEncoder.encode("https://www.xyz-xxxx.com/wechat/userInfo","UTF-8"); // 按照文档要求拼接访问地址 String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + 公众号的appid + "&redirect_uri=" + returnUrl + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"; log.info("redirectUrl={}",url); response.sendRedirect(url);// 跳转到要访问的地址; } @GetMapping("/userInfo") @ApiOperation(value = "获取微信openId接口",notes = "获取微信openId接口") public ResponseModel userInfo(@RequestParam("code") String code,@RequestParam("returnUrl") String returnUrl) { log.info("获取微信openId接口 code={},returnUrl={}",code,returnUrl); WxMpOAuth2AccessToken wxMpOAuth2AccessToken = new WxMpOAuth2AccessToken(); try { wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code); } catch (Exception e) { log.error("【微信网页授权】{}", e); } String openId = wxMpOAuth2AccessToken.getOpenId(); String accessToken = wxMpOAuth2AccessToken.getAccessToken(); log.info("accessToken ={} " ,accessToken); log.info("openId ={} " ,openId); log.info("returnUrl ={} " ,returnUrl); String s="redirect:" + returnUrl + "?openid=" + openId; return ResponseModels.ok(s); } }
注意,如果拼接的回调url无法访问的时候,看看有没有配置nginx反向代理,关于nginx反向代理的解决方法,我也写了相应的解决办法,有问题请留言,从今之后我会经常上博客,访问此链接查看:https://blog.csdn.net/weixin_41117376/article/details/88188039