公众号code是微信公众号开发时需要获取的一个参数,获取后可以进行用户信息的获取和授权。在Java中,获取公众号code可以通过以下几个方面:
一、使用微信网页授权获取用户信息
1、首先需要构造授权页面的URL,如下:
String appId = "wxAppId"; String redirectUri = "https://yourCallBackUrl.com"; String scope = "snsapi_userinfo"; String state = "YourCustomState"; String url = "https://open.weixin.qq.com/connect/oauth2/authorize?" + "appid=" + appId + "&redirect_uri=" + URLEncoder.encode(redirectUri, "UTF-8") + "&response_type=code" + "&scope=" + scope + "&state=" + state + "#wechat_redirect";
其中,appId为公众号的唯一标识,redirectUri为用户授权后的回调页面,可以设置为自定义的URL。scope是授权的方式,分为snsapi_base和snsapi_userinfo,前者仅获取用户的基本信息,后者可以获取用户的详细信息。state是自定义的参数,可以用于防止CSRF攻击。
2、将构造好的URL返回给前端,用户点击授权后会被跳转到微信授权页面,根据scope的不同,用户的授权方式也不同。
3、用户授权完成后,微信会将一个code参数返回给回调页面,这个code就是获取用户信息所必须的参数。可以通过以下方式获取code:
String code = request.getParameter("code");
其中,request是授权回调页面的HttpServletRequest对象。
二、使用微信公众平台SDK获取code
1、首先需要引入微信公众平台SDK,可以通过以下方式引入:
<dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-mp</artifactId> <version>3.8.0</version> </dependency>
2、在代码中构建授权页面的URL,并将其重定向到微信授权页面:
WxMpService wxService = new WxMpServiceImpl(); wxService.setWxMpConfigStorage(configStorage); String redirectUrl = wxService.oauth2buildAuthorizationUrl("https://yourCallBackUrl.com", "snsapi_userinfo", "YourCustomState"); response.sendRedirect(redirectUrl);
其中,configStorage为WxMpConfigStorage对象,可以通过配置公众号的appId和appSecret来进行初始化。
3、用户授权完成后,微信会将一个code参数返回给回调页面,通过以下方式获取code:
WxMpOAuth2AccessToken accessToken = wxService.oauth2getAccessToken(code); String openId = accessToken.getOpenId();
其中,openId可以用于获取用户的详细信息。
三、使用Spring Boot集成微信公众平台SDK获取code
1、首先需要在pom.xml文件中引入spring-boot-starter-web和weixin-java-mp包:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.5.2</version> </dependency> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-mp</artifactId> <version>3.8.0</version> </dependency>
2、在application.properties或application.yml文件中配置公众号的appId和appSecret:
wx.mp.appId=yourAppId wx.mp.secret=yourSecret
3、创建一个Controller,并定义授权的URL,将其返回给前端进行跳转:
@RestController public class WxMpController { @Autowired private WxMpService wxMpService; @GetMapping("/wx/authorize") public void authorize(@RequestParam("state") String state, HttpServletResponse response) throws IOException { String redirectUrl = wxMpService.oauth2buildAuthorizationUrl("https://yourCallBackUrl.com", "snsapi_userinfo", state); response.sendRedirect(redirectUrl); } }
4、定义授权回调页面的URL,并处理回调过来的参数:
@RestController public class WxMpController { @Autowired private WxMpService wxMpService; @GetMapping("/wx/callback") public void callback(@RequestParam("code") String code, @RequestParam("state") String state, HttpServletResponse response) throws IOException { WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code); String openId = accessToken.getOpenId(); // TODO: 获取用户信息 response.sendRedirect("https://yourSuccessUrl.com"); } }
通过以上三个步骤,可以快速地获取公众号code,并借此获取用户的详细信息。