获取SDK:
https://github.com/Wechat-Group/WxJava
这里用的是公众号(包括订阅号和服务号):weixin-java-mp
来看wiki文档
当然是第一个
点击第五个,使用OAuth2
https://github.com/Wechat-Group/WxJava/wiki/MP_OAuth2%E7%BD%91%E9%A1%B5%E6%8E%88%E6%9D%83
开始搞起
@RequestMapping("/wechat")
@Controller
public class WechatController {
@Autowired
private WxMpService wxMpService;
@GetMapping("/authorize")
public String authorize(@RequestParam("returnUrl") String returnUrl){
// config success.................................
String url="https://van.mynatapp.cc/wechat/userInfo";
String redirectUrl= wxMpService.oauth2buildAuthorizationUrl(url,WxConsts.OAuth2Scope.SNSAPI_USERINFO,returnUrl);
return "redirect:"+redirectUrl;
}
@GetMapping("userInfo")
public String userInfo(@RequestParam("code") String code,
@RequestParam("state") String returnUrl) throws Exception{
WxMpOAuth2AccessToken wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);
String openId=wxMpOAuth2AccessToken.getOpenId();
return "redirect:"+returnUrl+"?openId="+openId;
}
}
controller如上所示
private WxMpService wxMpService 这个类如下配置:
@Component
public class WxMpConfig {
@Bean
public WxMpService wxMpService(){
WxMpService wxMpService=new WxMpServiceImpl();
WxMpConfigStorage mpConfigStorage=new WxMpDefaultConfigImpl();
((WxMpDefaultConfigImpl) mpConfigStorage).setAppId("wx2bab612e8aa186cc");
((WxMpDefaultConfigImpl) mpConfigStorage).setSecret("a29535300bbf29494acb9d6204009c78");
wxMpService.setWxMpConfigStorage(mpConfigStorage);
return wxMpService;
}
}
测试:https://van.mynatapp.cc/wechat/authorize?returnUrl=https://www.baidu.com
ok
总结:
大流程
先访问我controller中的/wechat/authorize方法,在方法内构造一个url,重定向这个url(相当于wx官方文档里的构造一个url让用户点击),于是到我@GetMapping(“userInfo”)方法里来了,并携带了code参数,在这个方法里用code参数获得用户的openId,最后在重定向到一开始携带的参数:returnUrl,也就是baidu.com
小流程
1.在@GetMapping("/authorize")方法内先对WxMpService这个类进行配置(填入测试号的appID和securityID)
2.调用String oauth2buildAuthorizationUrl(String redirectURI, String scope, String state);方法。 state是携带一个参数,scope是用户授权类型,一个是info,可获取用户更多的信息,但需要用户确定,一个是base,可获取用户少量信息,但不需要用户确定(神不知鬼不觉)。具体看微信开发文档,有这几个参数的详情:
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
3.在步骤2内我填入的是在这里插入代码片String url="https://van.mynatapp.cc/wechat/userInfo";
于是跳转到我controller内设置的第二个方法,在这个方法内
@RequestParam("code") String code,
@RequestParam("state") String returnUrl
我要获取2个参数,一个是code(用code获取用户的openId),第二个是state就是baidu.com,最后返回baidu.com和openId。
对了对手机端抓包可以用fiddler工具(windows)