java 微信公众号之授权登录

时间:2024-03-19 14:33:06

1.来吧,先来在微信公众号中做一些基本的信息配置

打开此链接:https://mp.weixin.qq.com

在公众号设置-->功能设置,设置网络授权域名

java 微信公众号之授权登录

java 微信公众号之授权登录

这里一定注意:地址不可以以http://开头,必须包含回调地址,如果回调地址是:https://www.song.com,设置的地址应该是:www.song.com 或www.song.com/wechat/

2.设置IP白名单

在开发-->基本配置->ip白名单:设置为部署的服务器的IP

java 微信公众号之授权登录

3.代码实现:我用的是最简洁易懂的方法实现的,没有像其他的博客主实现的那么复杂,会了这个简单的之后,复杂的也就轻而易举的会了

引入的pom依赖

java 微信公众号之授权登录

配置文件

@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