提交代码

dev_xds
姜玉琦 2024-04-09 23:12:55 +08:00
parent 2c67e41fee
commit ed1d3cfb75
4 changed files with 47 additions and 25 deletions

View File

@ -48,17 +48,18 @@ export default {
methods: { methods: {
wechatLogin() { wechatLogin() {
// //
let rd = this.getQueryString("rd") || ""; //let rd = this.getQueryString("rd") || "";
let openId = this.getQueryString("openId") || ""; let code = this.getQueryString("code") || "";
// token === '' && openId != '' // token === '' && openId != ''
if (openId != "" && rd != "") { if (code != "") {
// //
console.log("接口返回===>", openId, this.uId, rd); console.log("接口返回===>", code, this.uId);
this.saveBinding(uId, openId); this.saveBinding(uId, code);
} else { } else {
const hrefUrl = window.location.href;
// //
console.log("我要去登录了===>"); 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) { saveBinding(uId, openId) {
@ -66,7 +67,7 @@ export default {
* uId 小程序openId * uId 小程序openId
* openId 公众号openId * openId 公众号openId
*/ */
wxBinding({ openId: uId, msgOpenId: openId }).then((response) => { wxBinding({ openId: uId, code: code }).then((response) => {
if (response.code == 200) { if (response.code == 200) {
this.successVisible = true; this.successVisible = true;
} else { } else {

View File

@ -133,7 +133,7 @@ public class WechatUserLoginServiceImpl implements IWechatUserLoginService {
map.put("openId",openId); map.put("openId",openId);
//验证手机号码是否绑定 //验证手机号码是否绑定
List<Map<String,Object>> checkList = wechatUserLoginMapper.checkBindByOpenId(openId); List<Map<String,Object>> checkList = wechatUserLoginMapper.checkBindByOpenId(openId);
if(StringUtils.isNotNull(checkList)){ if(StringUtils.isNotEmpty(checkList)){
//将公众号openid传入到个人信息中... //将公众号openid传入到个人信息中...
userInfo.put("msgOpenId",checkList.get(0).get("msgOpenId")); userInfo.put("msgOpenId",checkList.get(0).get("msgOpenId"));
wechatUserLoginMapper.updateUserOpenId(map); wechatUserLoginMapper.updateUserOpenId(map);

View File

@ -52,19 +52,19 @@ public class WxAuthController extends BaseController {
*/ */
@Anonymous @Anonymous
@GetMapping("/authorize") @GetMapping("/authorize")
public void authorize(HttpServletResponse response) throws Exception { public void authorize(@RequestParam(value = "returnUrl", defaultValue = "https://szgc.jhncidg.com") String returnUrl, HttpServletResponse response) throws Exception {
log.info("【微信网页授权】进来了,参数={}"); log.info("【微信网页授权】进来了,参数={}", returnUrl);
//1. 配置 //1. 配置
//2. 调用方法 //2. 调用方法
String url = RuoYiConfig.getProjectUrl() + "/jhapi/wxAuth/userInfo"; String url = RuoYiConfig.getProjectUrl() + "wxAuth/userInfo";
/* /*
* *
* URLEncoder.decode(returnUrl,"UTF-8" * 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 * 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); 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 @Anonymous
@GetMapping("/userInfo") @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 {
/*urlauthorization code /*urlauthorization code
codeaccess tokenopenid*/ codeaccess tokenopenid*/
WxMpOAuth2AccessToken wxMpOAuth2AccessToken = new WxMpOAuth2AccessToken(); WxMpOAuth2AccessToken wxMpOAuth2AccessToken = new WxMpOAuth2AccessToken();
@ -89,16 +90,15 @@ public class WxAuthController extends BaseController {
// 拿到openid // 拿到openid
String openId = wxMpOAuth2AccessToken.getOpenId(); 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("【openid】{}", openId);
log.info("【我是前端要回调的地址:】{}", returnUrl); log.info("【我是前端要回调的地址:】{}", returnUrl + "&openid=" + openId);
// 顺便获取一下用户信息 // 顺便获取一下用户信息
WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, "zh_CN"); WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, "zh_CN");
log.info("【用户信息:】{}", wxMpUser.toString()); log.info("【用户信息:】{}", wxMpUser.toString());
//注意拼接参数,第一个参数需要加问号,之后参数使用&拼接的问题 //注意拼接参数,第一个参数需要加问号,之后参数使用&拼接的问题
//return "redirect:" + returnUrl + "/#/?openid=" + openId; //return "redirect:" + returnUrl + "/#/?openid=" + openId;
response.sendRedirect(returnUrl); response.sendRedirect(returnUrl + "&rd="+System.currentTimeMillis()+"&openid=" + openId);
} }
/** /**
@ -108,14 +108,32 @@ public class WxAuthController extends BaseController {
* url * url
*/ */
@Anonymous @Anonymous
@ResponseBody
@PostMapping("/binding") @PostMapping("/binding")
public AjaxResult binding(@Validated @RequestBody WxBindingVo vo) throws Exception { public AjaxResult binding(@Validated @RequestBody WxBindingVo vo) throws Exception {
/*urlauthorization code
codeaccess tokenopenid*/
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进行绑定*/ /*当用户同意授权后将小程序openId和公众号OpenId进行绑定*/
SysUserOpenid sysUserOpenid = sysUserOpenidService.selectSysUserOpenidByOpenId(vo.getOpenId()); SysUserOpenid sysUserOpenid = sysUserOpenidService.selectSysUserOpenidByOpenId(vo.getOpenId());
if(sysUserOpenid!=null){ if(sysUserOpenid!=null){
sysUserOpenid.setMsgOpenId(vo.getMsgOpenId()); sysUserOpenid.setMsgOpenId(openId);
return toAjax(sysUserOpenidService.updateSysUserOpenid(sysUserOpenid)); return toAjax(sysUserOpenidService.updateSysUserOpenid(sysUserOpenid));
} }
} catch (WxErrorException e) {
log.error("【微信网页授权】{}", e);
return error();
}
return error(); return error();
} }

View File

@ -20,8 +20,11 @@ public class WxBindingVo {
private String openId; private String openId;
/** 公众号openId */ /** 公众号openId */
@NotBlank(message = "公众号openId不能为空")
@Size(max = 128, message = "小程序openId最大128位")
private String msgOpenId; private String msgOpenId;
/** 小程序openId */
@NotBlank(message = "公众号授权不能为空")
@Size(max = 128, message = "公众号授权最大128位")
private String code;
} }