91名师指路-头部
91名师指路

java 企业微信网页授权登陆

由于某些原因,现在不支持支付宝支付,如需要购买源码请加博主微信进行购买,微信号:13248254750

需求:h5的链接在企业微信中打开,免登陆获取用户信息。


一:登陆企业微信:https://work.weixin.qq.com/


二:点击创建应用


三:创建应用


四:创建成功后的页面

4.1)创建成功后的页面


4.2)鼠标把滚动条往下拉,设置网页授权及JS SDK


5)设置可信域名,并进行验证


注意:需要将微信给你的 WW_verify_9dnU7IhmiJOM7KhF.txt 文件放到根域名下,并且验证通过后才能保存成功。


六:获取access_token

6.1)请求地址

请求方式:get

请求地址:https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=xx&corpsecret=xx

参数   必须   说明 
  corpid 是  企业ID
  corpsecret 是  应用的凭证密钥,注意应用需要是启用状态

注意:每个应用有独立的secret,获取到的access_token只能本应用使用,所以每个应用的access_token应该分开来获取

企业ID的获取方式见第十一章节


6.2)完整的请求地址:

https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=xx&corpsecret=xx

6.3)请求截图如下:


6.4)响应结果:

{
"errcode": 0,
"errmsg": "ok",
"access_token": "yGKmQq102I0_kJ1HD7Q4CXGFFH1eZLGHc7S8l8cZ2mzCOpBQ5DGAjm0r5frXObJZpPzw",
"expires_in": 7200
}


6.5)响应结果参数说明:

参数   说明   
  errcode  出错返回码,为0表示成功,非0表示调用失败
  errmsg  返回码提示语
  access_token  获取到的凭证,最长为512字节
  expires_in  凭证的有效时间(秒)


6.6)注意事项:
开发者需要缓存access_token,用于后续接口的调用(注意:不能频繁调用gettoken接口,否则会受到频率拦截)。当access_token失效或过期时,需要重新获取。

access_token的有效期通过返回的expires_in来传达,正常情况下为7200秒(2小时),有效期内重复获取返回相同结果,过期后获取会返回新的access_token。
由于企业微信每个应用的access_token是彼此独立的,所以进行缓存时需要区分应用来进行存储。
access_token至少保留512字节的存储空间。
企业微信可能会出于运营需要,提前使access_token失效,开发者应实现access_token失效时重新获取的逻辑。


七:构造网页授权链接,获取授权码

7.1)静默授权的方式获取授权码

https://open.weixin.qq.com/connect/oauth2/authorize?appid=xx&redirect_uri=https%3A%2F%2Fwww.91mszl.com%2Fcompany%2Fwx%2Flogin&response_type=code&scope=snsapi_base&state=123456&agentid=xx#wechat_redirect


7.2)手动授权的方式获取授权码

https://open.weixin.qq.com/connect/oauth2/authorize?appid=xx&redirect_uri=https%3A%2F%2Fwww.91mszl.com%2Fcompany%2Fwx%2Flogin&response_type=code&scope=snsapi_privateinfo&state=&agentid=xx#wechat_redirect


7.3)静默授权和手动授权的区别:

1)静默授权只能获取到用户的UserId和DeviceId,无需用户手动点击按钮进行授权。

2)手动授权,需要用户手动点击授权按钮来进行授权,能获取到用户的详细信息,包含头像、二维码等敏感信息。需要注意的是手动授权的方式,用户授权后30天内无须再次授权。



7.4)参数说明:

参数必须说明
appid企业的CorpID
redirect_uri授权后重定向的回调链接地址,请使用urlencode对链接进行处理
response_type返回类型,此时固定为:code
scope应用授权作用域。
snsapi_base:静默授权,可获取成员的基础信息(UserId与DeviceId);
snsapi_privateinfo:手动授权,可获取成员的详细信息,包含头像、二维码等敏感信息。
state重定向后会带上state参数,企业可以填写a-zA-Z0-9的参数值,长度不可超过128个字节
agentid应用agentid,建议填上该参数(对于第三方应用和代开发自建应用,在填写该参数的情况下或者在工作台、聊天工具栏、应用会话内发起oauth2请求的场景中,会触发接口许可的自动激活)。snsapi_privateinfo时必填否则报错;
#wechat_redirect终端使用此参数判断是否需要带上身份信息


7.5)在后端代码中编写获取授权码的接口(即上面的回调接口地址:redirect_uri),代码如下

/**
* 功能:企业微信回调接口,获取授权码
* @Author: zxb
* @Date: 2023-07-13 08:52:40
*/
@GetMapping("/login")
public ReturnMsgUtils getAuthorizeCode(CompanyWxLoginVO cv){
log.info("企业微信回调接口,获取授权码: {}", cv);
// 处理自己的业务逻辑
ReturnMsgUtils result=new ReturnMsgUtils(BusinessUtils.BUSINESS_CODE_200, BusinessUtils.BUSINESS_CODE_200_MSG);
return result;
}


通过调用7.1或7.2链接后再后端打印的结果:

企业微信回调接口,获取授权码: CompanyWxLoginVO(code=Jo4ESZF2E-YYh78e1sgTwEzut_SvM_AE4fmiW4L-K1k, state=123456)


八:获取用户信息(静默授权方式)

8.1)静默授权的方式获取用户信息

请求方式:get

请求地址:https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=ACCESS_TOKEN&code=CODE


8.2)参数说明:

参数必须说明
access_token调用接口凭证
code通过成员授权获取到的code,最大为512字节。每次成员授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。


8.3)静默授权调用截图:


8.4)响应结果:

{
"userid": "ZhangXiaoBo",
"errcode": 0,
"errmsg": "ok"
}


九:获取用户信息(手动授权方式)

9.1)手动授权的方式获取用户信息

请求方式:get

请求地址:https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=ACCESS_TOKEN&code=CODE


9.2)参数说明:

参数必须说明
access_token调用接口凭证
code通过成员授权获取到的code,最大为512字节。每次成员授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。


9.3)手动授权调用截图:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=xx&redirect_uri=https%3A%2F%2Fwww.91mszl.com%2Fcompany%2Fwx%2Flogin&response_type=code&scope=snsapi_privateinfo&state=&agentid=xx#wechat_redirect


9.4)响应结果:

{
"userid": "ZhangXiaoBo",
"errcode": 0,
"errmsg": "ok",
"user_ticket": "xeO5YvNWViVVlN17rs4jmjKduGutvhhIb8f31NXXZbLa4yYJLA-8C8RfjIbLx-iu2SGKAawPC6G4MtsIPAk",
"expires_in": 1800
}


注意:静默授权和手动授权的响应结果是不一样的,手动授权这里多了一个user_ticket等会获取用户敏感信息的时候需要用到此参数。


9.5)手动授权第一次访问链接的效果图(第二次点击时30天内不会再次出现如下图所示的授权弹框)



十:手动授权的方式获取用户的敏感信息

10.1)请求信息

请求方式:post

请求地址:https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail?access_token=ACCESS_TOKEN

请求体:

{
"user_ticket": "xx"
}


10.2)参数说明:

参数必须说明
access_token调用接口凭证
user_ticket成员票据


10.3)请求截图:


10.4)响应结果:

{
"errcode": 0,
"errmsg": "ok",
"userid": "ZhangXiaoBo",
"gender": "1",
"avatar": "https://rescdn.qqmail.com/node/wwmng/wwmng/style/images/independent/DefaultAvatar$73ba92b5.png",
"qr_code": "https://open.work.weixin.qq.com/wwopen/userQRCode?vcode=vcc01569bb2f2afa6f",
"biz_mail": "zhangxiaobo@jsxbzkjyxgs1.wecom.work",
"address": ""
}


十一:其他事项

11.1)corpid(企业id)查看页面


11.2)corpsecret(应用的凭证密钥)和 AgentId 查看页面


11.3)点击对应的应用名称进去



参考资料:

企业微信官方文档地址:https://developer.work.weixin.qq.com/document/path/91335

将域名进行urlencode的地址:https://www.sojson.com/encodeurl.html




2023-07-12 14:15:59     阅读(758)

名师出品,必属精品    https://www.91mszl.com

联系博主    
用户登录遮罩层
x

账号登录

91名师指路-底部