文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:
好好学java
,获取优质学习资源。
商家信息管理系统登录时可以用微信扫码登录。 参考文档是,**着重需要关注文档(开发前一定看懂流程)**的部分。
注意这里是微信开放平台,不同于微信公众平台,还需要另外注册账号。我们在微信开放平台注册账号后,需要填写我们网站的域名,这样我们才能有权使用微信的接口。同样个人没有资质,要向师兄借用账号。
在进行讲解之前,我们需要明白用户登录一个网站的实质,也就是每一个用户对这个网站唯一的身份标识。而且我们每个微信用户对于一个微信开放平台账户有唯一的openid,这样我们就可以用用户的openid作为网站对这个用户的唯一标识。但不是每个网站都有权限获取用户的openid等信息的,这就需要拥有这个网站的公司到微信开放平台注册一个账号,然后在账号里填入自己网站的域名。然后网站就可以设置一个微信扫码登录按钮,让访问网站的用户点击,点击这个按钮就会访问微信官方给的微信扫码登陆接口,用户扫码同意后,就会回调一个我们在微信扫码登陆接口里设置的return_url,并带上code参数,我们就可以通过code参数,换取openid了。
过程和微信网页授权过程非常相似。
第一步访问微信给定的接口(加上自己的appID,appSecret,redirect_url,state参数),会获取CODE,并以CODE和state为参数,回调redirect_url。
然后以code、appid、appsecret为参数访问微信给的另一个接口,就可以获取openid等信息。
以上是根据微信官方文档手工方式获取openid的方法,我们也可以使用SDK的方式获取,还是这个SDK。 分以下两步:
第一步 先声明好bean。
@Bean
public WxMpService wxOpenService(){
WxMpService wxOpenService=new WxMpServiceImpl();
wxOpenService.setWxMpConfigStorage(wxOpenConfigStorage());
return wxOpenService;
}
@Bean
public WxMpConfigStorage wxOpenConfigStorage(){
WxMpInMemoryConfigStorage wxMpInMemoryConfigStorage=new WxMpInMemoryConfigStorage();
wxMpInMemoryConfigStorage.setAppId(accountConfig.getOpenAppId());
wxMpInMemoryConfigStorage.setSecret(accountConfig.getOpenAppSecret());
return wxMpInMemoryConfigStorage;
}
第二步 构造自己的url,访问
@GetMapping("/qrAuthorize")
public String qrAuthorize(@RequestParam("returnUrl") String returnUrl){
String url=projectUrlConfig.getWechatOpenAuthorize()+"/sell/wechat/userInfo";
String redirectUrl=wxOpenService.buildQrConnectUrl(url,WxConsts.QRCONNECT_SCOPE_SNSAPI_LOGIN,URLEncoder.encode(returnUrl));
return "redirect:"+redirectUrl;
}
@GetMapping("qrUserInfo")
public String qrUserInfo(@RequestParam("code") String code,
@RequestParam("state") String returnUrl){
WxMpOAuth2AccessToken wxMpOAuth2AccessToken=new WxMpOAuth2AccessToken();
try{
wxMpOAuth2AccessToken=wxOpenService.oauth2getAccessToken(code);
}catch (WxErrorException e){
log.error("【微信网页】{}",e);
throw new SellException(ResultEnum.WECHAT_MP_ERROR.getCode(),e.getError().getErrorMsg());
}
log.info("wxMpOAuth2AccessToken={}",wxMpOAuth2AccessToken);
String openId=wxMpOAuth2AccessToken.getOpenId();
return "redirect:"+returnUrl+"?openid="+openId;
}
出处: