提交代码
parent
2c67e41fee
commit
ed1d3cfb75
|
@ -48,17 +48,18 @@ export default {
|
|||
methods: {
|
||||
wechatLogin() {
|
||||
// 处理微信授权登录
|
||||
let rd = this.getQueryString("rd") || "";
|
||||
let openId = this.getQueryString("openId") || "";
|
||||
//let rd = this.getQueryString("rd") || "";
|
||||
let code = this.getQueryString("code") || "";
|
||||
// token === '' && openId != '' 只要这种情况,未绑定账号
|
||||
if (openId != "" && rd != "") {
|
||||
if (code != "") {
|
||||
// 绑定账号
|
||||
console.log("接口返回===>", openId, this.uId, rd);
|
||||
this.saveBinding(uId, openId);
|
||||
console.log("接口返回===>", code, this.uId);
|
||||
this.saveBinding(uId, code);
|
||||
} else {
|
||||
const hrefUrl = window.location.href;
|
||||
// 如果绑定了,返回成功
|
||||
console.log("我要去登录了===>");
|
||||
window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxe6fd9ad863ac09bf&redirect_uri=https://szgc.jhncidg.com/jhapi/wxAuth/userInfo&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";
|
||||
window.location = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxe6fd9ad863ac09bf&response_type=code&scope=snsapi_base&redirect_uri="+encodeURIComponent(hrefUrl)+"&state=STATE#wechat_redirect";
|
||||
}
|
||||
},
|
||||
saveBinding(uId, openId) {
|
||||
|
@ -66,7 +67,7 @@ export default {
|
|||
* uId 小程序openId
|
||||
* openId 公众号openId
|
||||
*/
|
||||
wxBinding({ openId: uId, msgOpenId: openId }).then((response) => {
|
||||
wxBinding({ openId: uId, code: code }).then((response) => {
|
||||
if (response.code == 200) {
|
||||
this.successVisible = true;
|
||||
} else {
|
||||
|
|
|
@ -133,7 +133,7 @@ public class WechatUserLoginServiceImpl implements IWechatUserLoginService {
|
|||
map.put("openId",openId);
|
||||
//验证手机号码是否绑定
|
||||
List<Map<String,Object>> checkList = wechatUserLoginMapper.checkBindByOpenId(openId);
|
||||
if(StringUtils.isNotNull(checkList)){
|
||||
if(StringUtils.isNotEmpty(checkList)){
|
||||
//将公众号openid传入到个人信息中...
|
||||
userInfo.put("msgOpenId",checkList.get(0).get("msgOpenId"));
|
||||
wechatUserLoginMapper.updateUserOpenId(map);
|
||||
|
|
|
@ -52,19 +52,19 @@ public class WxAuthController extends BaseController {
|
|||
*/
|
||||
@Anonymous
|
||||
@GetMapping("/authorize")
|
||||
public void authorize(HttpServletResponse response) throws Exception {
|
||||
log.info("【微信网页授权】进来了,参数={}");
|
||||
public void authorize(@RequestParam(value = "returnUrl", defaultValue = "https://szgc.jhncidg.com") String returnUrl, HttpServletResponse response) throws Exception {
|
||||
log.info("【微信网页授权】进来了,参数={}", returnUrl);
|
||||
//1. 配置
|
||||
//2. 调用方法
|
||||
String url = RuoYiConfig.getProjectUrl() + "/jhapi/wxAuth/userInfo";
|
||||
String url = RuoYiConfig.getProjectUrl() + "wxAuth/userInfo";
|
||||
/*
|
||||
* 相当于这种形式
|
||||
* URLEncoder.decode(returnUrl,"UTF-8"
|
||||
* https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
|
||||
*/
|
||||
String redirectUrl = wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAUTH2_SCOPE_USER_INFO, "/");
|
||||
String redirectUrl = wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAUTH2_SCOPE_USER_INFO, returnUrl);
|
||||
log.info("【微信网页授权】获取code,result={}", redirectUrl);
|
||||
response.sendRedirect(URLEncoder.encode(redirectUrl, "UTF-8"));
|
||||
response.sendRedirect(redirectUrl);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -75,7 +75,8 @@ public class WxAuthController extends BaseController {
|
|||
*/
|
||||
@Anonymous
|
||||
@GetMapping("/userInfo")
|
||||
public void userInfo(@RequestParam("code") String code,@RequestParam("state") String state,HttpServletResponse response) throws Exception {
|
||||
public void userInfo(@RequestParam("code") String code,
|
||||
@RequestParam("state") String returnUrl,HttpServletResponse response) throws Exception {
|
||||
/*当用户同意授权后,会回调所设置的url并把authorization code传过来,
|
||||
然后用这个code获得access token,其中也包含用户的openid等信息*/
|
||||
WxMpOAuth2AccessToken wxMpOAuth2AccessToken = new WxMpOAuth2AccessToken();
|
||||
|
@ -89,16 +90,15 @@ public class WxAuthController extends BaseController {
|
|||
|
||||
// 拿到openid
|
||||
String openId = wxMpOAuth2AccessToken.getOpenId();
|
||||
String returnUrl = RuoYiConfig.getProjectUrl() + "/#/wxAuth?rd="+System.currentTimeMillis()+"&openid=" + openId;
|
||||
returnUrl = URLEncoder.encode(returnUrl, "UTF-8");
|
||||
log.info("【openid:】{}", openId);
|
||||
log.info("【我是前端要回调的地址:】{}", returnUrl);
|
||||
log.info("【我是前端要回调的地址:】{}", returnUrl + "&openid=" + openId);
|
||||
// 顺便获取一下用户信息
|
||||
WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, "zh_CN");
|
||||
log.info("【用户信息:】{}", wxMpUser.toString());
|
||||
|
||||
//注意拼接参数,第一个参数需要加问号,之后参数使用&拼接的问题
|
||||
//return "redirect:" + returnUrl + "/#/?openid=" + openId;
|
||||
response.sendRedirect(returnUrl);
|
||||
response.sendRedirect(returnUrl + "&rd="+System.currentTimeMillis()+"&openid=" + openId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -108,13 +108,31 @@ public class WxAuthController extends BaseController {
|
|||
* 获取用户信息类,最后重定向到指定url
|
||||
*/
|
||||
@Anonymous
|
||||
@ResponseBody
|
||||
@PostMapping("/binding")
|
||||
public AjaxResult binding(@Validated @RequestBody WxBindingVo vo) throws Exception {
|
||||
/*当用户同意授权后,将小程序openId和公众号OpenId进行绑定*/
|
||||
SysUserOpenid sysUserOpenid = sysUserOpenidService.selectSysUserOpenidByOpenId(vo.getOpenId());
|
||||
if(sysUserOpenid!=null){
|
||||
sysUserOpenid.setMsgOpenId(vo.getMsgOpenId());
|
||||
return toAjax(sysUserOpenidService.updateSysUserOpenid(sysUserOpenid));
|
||||
/*当用户同意授权后,会回调所设置的url并把authorization code传过来,
|
||||
然后用这个code获得access token,其中也包含用户的openid等信息*/
|
||||
WxMpOAuth2AccessToken wxMpOAuth2AccessToken = new WxMpOAuth2AccessToken();
|
||||
try {
|
||||
//获取access token
|
||||
wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(vo.getCode());
|
||||
//log.info("【AccessToken:】{}", wxMpOAuth2AccessToken.getAccessToken());
|
||||
// 拿到openid
|
||||
String openId = wxMpOAuth2AccessToken.getOpenId();
|
||||
log.info("【openid:】{}", openId);
|
||||
// 顺便获取一下用户信息
|
||||
//WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, "zh_CN");
|
||||
//log.info("【用户信息:】{}", wxMpUser.toString());
|
||||
/*当用户同意授权后,将小程序openId和公众号OpenId进行绑定*/
|
||||
SysUserOpenid sysUserOpenid = sysUserOpenidService.selectSysUserOpenidByOpenId(vo.getOpenId());
|
||||
if(sysUserOpenid!=null){
|
||||
sysUserOpenid.setMsgOpenId(openId);
|
||||
return toAjax(sysUserOpenidService.updateSysUserOpenid(sysUserOpenid));
|
||||
}
|
||||
} catch (WxErrorException e) {
|
||||
log.error("【微信网页授权】{}", e);
|
||||
return error();
|
||||
}
|
||||
return error();
|
||||
}
|
||||
|
|
|
@ -20,8 +20,11 @@ public class WxBindingVo {
|
|||
private String openId;
|
||||
|
||||
/** 公众号openId */
|
||||
@NotBlank(message = "公众号openId不能为空")
|
||||
@Size(max = 128, message = "小程序openId最大128位")
|
||||
private String msgOpenId;
|
||||
|
||||
/** 小程序openId */
|
||||
@NotBlank(message = "公众号授权不能为空")
|
||||
@Size(max = 128, message = "公众号授权最大128位")
|
||||
private String code;
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue