企业微信-构造网页授权链接实现登录

文档地址:构造网页授权链接 - 接口文档 - 企业微信开发者中心

注意:

        1.redirect_uri:回调链接地址,需要使用urlencode对链接进行处理

        2.scope:如果需要获取成员的头像、手机号等信息需要设为snsapi_privateinfo

例如前端地址为:https://test.com

构造成的链接为:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=https%3A%2F%2Ftest.com&response_type=code&scope=snsapi_privateinfo&state=STATE&agentid=AGENTID#wechat_redirect

已管理员身份登录企业微信后台-应用管理-创建应用:

 

设置可信域名以及可信IP:

 

 添加之后可以在企业微信-工作台中找到相关的应用,点击后会跳转到https://test.com?code=CODE,可以通过code请求后端获取到用户的相关信息

接口文档:获取访问用户身份 - 接口文档 - 企业微信开发者中心

以下为JAVA使用 weixin-java-cp的实现代码

<dependency>
    <groupId>com.github.binarywang</groupId>
    <artifactId>weixin-java-cp</artifactId>
    <version>4.0.0</version>
</dependency>
QYWeixinProperties qyWeixinProperties = SpringUtil.getBean(QYWeixinProperties.class);

// 企业微信相关配置
WxCpDefaultConfigImpl config = new WxCpDefaultConfigImpl();
config.setCorpId(qyWeixinProperties.getCorpId());
config.setCorpSecret(qyWeixinProperties.getCorpSecret());
config.setAgentId(qyWeixinProperties.getAgentId());

WxCpServiceImpl wxCpService = new WxCpServiceImpl();
wxCpService.setWxCpConfigStorage(config);

String mobile;

try {
    WxCpOauth2UserInfo userInfo = wxCpService.getOauth2Service().getUserInfo(code);

	if (Func.notNull(userInfo)) {
		String userId = userInfo.getUserId();
		// 用户userId
		if (Func.isBlank(userId)) {
			return;
		}
		// 根据userId查询微信中用户详情,注意需要构造链接中scope=snsapi_privateinfo且用户授权才能获取到
		WxCpUserDetail userDetail = wxCpService.getOauth2Service().getUserDetail(userInfo.getUserTicket());

		mobile = userDetail.getMobile();
		if (Func.isBlank(mobile)) {
		    return;
		}

    // 接下来是通过手机号获取用户信息的逻辑,按照自己系统的逻辑来写

	} else {
		return;
    }
} catch (WxErrorException e) {
    return;
}

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,在获取微信公众号网页授权和用户信息之前,我们需要先了解微信公众号的几个概念: 1. AppID和AppSecret:AppID是每个公众号独有的身份标识,在开发者中心中可查看;而AppSecret则是用于获取access_token的密钥。 2. 授权作用域:微信网页授权分为静默授权和弹出授权,前者只能获取用户基本信息,后者可以获取用户详细信息。 3. 网页授权流程:用户同意授权后,微信后台会将授权code返回给开发者,开发者可以使用该code获取access_token,并通过access_token获取用户信息。 接下来,我们就可以开始使用JSP获取微信公众号网页授权和用户信息了。 1. 获取授权链接 首先,我们需要构造授权链接,以便用户点击授权。 String redirect_uri = URLEncoder.encode("http://your.domain.com/callback.jsp", "UTF-8"); String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appId + "&redirect_uri=" + redirect_uri + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"; 其中,redirect_uri是授权后重定向的回调链接地址,需要进行URLEncode编码;scope=snsapi_userinfo表示需要用户授权获取详细信息。 2. 获取授权code 当用户点击授权后,需要在回调页面(上面代码中的callback.jsp)中获取授权code。 String code = request.getParameter("code"); 3. 获取access_token 利用上一步获取的授权code,构造出获取access_token的链接,并向该链接发送HTTP GET请求,获取access_token。 String tokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appId + "&secret=" + appSecret + "&code=" + code + "&grant_type=authorization_code"; URL url = new URL(tokenUrl); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.connect(); InputStream inputStream = urlConnection.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String line; StringBuffer stringBuffer = new StringBuffer(); while ((line = bufferedReader.readLine()) != null) { stringBuffer.append(line); } JSONObject json = new JSONObject(stringBuffer.toString()); String accessToken = json.getString("access_token"); String openid = json.getString("openid"); 4. 获取用户信息 利用获取到的access_token和openid,可以构造出获取用户信息的链接。 String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openid + "&lang=zh_CN"; URL url = new URL(userInfoUrl); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.connect(); InputStream inputStream = urlConnection.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String line; StringBuffer stringBuffer = new StringBuffer(); while ((line = bufferedReader.readLine()) != null) { stringBuffer.append(line); } JSONObject json = new JSONObject(stringBuffer.toString()); String nickname = json.getString("nickname"); String headimgurl = json.getString("headimgurl"); 以上就是使用JSP获取微信公众号网页授权和用户信息的流程。需要注意的是,获取用户信息需要用户同意授权获取详细信息,并且在构造链接时需要进行URL编码。另外,在实际开发过程中,建议将获取access_token和获取用户信息的代码封装为工具类,以便重复使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值