1.扫码登录流程图
2..成为企业微信管理员
3. 登录企业管理端后台->进入需要开启的自建应用->配置可性域名和授权回调域,获取agentid,appid,进入如下页面
注:配置授权回调域,必须与访问链接的域名一致。比如:redirect_uri ="http://test.vx.com:8081/cgi-bin/login",那授权回调域为:test.vx.com:8081
3.1 获取agentid,appid
4. 构造独立窗口登录二维码链接
开发者需要构造如下的链接来获取code参数:
https://open.work.weixin.qq.com/wwopen/sso/qrConnect?appid=CORPID&agentid=AGENTID&redirect_uri=REDIRECT_URI&state=STATE
1.3.1 参数说明
参数说明
参数 | 必须 | 说明 |
---|---|---|
appid appid | 是 | 企业微信的CorpID,在企业微信管理端查看 |
agentid | 是 | 授权方的网页应用ID,在具体的网页应用中查看 |
redirect_uri | 是 | 重定向地址,需要进行UrlEncode |
state | 否 | 用于保持请求和回调的状态,授权请求后原样带回给企业。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议企业带上该参数,可设置为简单的随机数加session进行校验 |
lang | 否 | 自定义语言,支持zh、en;lang为空则从Headers读取Accept-Language |
若提示“该链接无法访问”,请检查参数是否填写错误,如redirect_uri的域名与网页应用的可信域名不一致。
若用户不在agentid所指应用的可见范围,扫码时会提示无权限。
返回说明
用户允许授权后,将会重定向到redirect_uri的网址上,并且带上code和state参数
redirect_uri?code=CODE&state=STATE
若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数
redirect_uri?state=STATE
1.3.2 示例
假定当前 企业CorpID:wxtest003
开启授权登录的应用ID:123456
登录跳转链接:http://api.test.com/login
state设置为:weblogin@test
配置的授权回调域为:api.test.com
根据URL规范,将上述参数分别进行UrlEncode,得到拼接的OAuth2链接为: https://open.work.weixin.qq.com/wwopen/sso/qrConnect?appid=wxtest003&agentid=123456&redirect_uri=http://api.test.com/login&state=weblogin@test
5. 前端渲染生成二维码
步骤一:引入JS文件
在需要展示企业微信网页登录二维码的网站引入如下JS文件(支持https):
新版(20220415更新):https://wwcdn.weixin.qq.com/node/wework/wwopen/js/wwLogin-1.2.7.js
步骤二:在需要使用微信登录的地方实例JS对象
注意:从wwLogin-1.2.5.js开始需要使用new WwLogin进行实例化
var wwLogin = new WwLogin({ "id": "wx_reg", "appid": "", "agentid": "", "redirect_uri": "", "state": "", "href": "", "lang": "zh", });
参数说明
参数 必须 说明 id 是 企业页面显示二维码的DOM id appid 是 企业微信的CorpID,在企业微信管理端查看 agentid 是 授权方的网页应用ID,在具体的网页应用中查看 redirect_uri 是 重定向地址,需要进行UrlEncode state 否 用于保持请求和回调的状态,授权请求后原样带回给企业。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议企业带上该参数,可设置为简单的随机数加session进行校验 href 否 自定义样式链接,企业可根据实际需求覆盖默认样式。详见文档底部FAQ lang 否 自定义语言,支持zh、en;lang为空则从Headers读取Accept-Language self_redirect 否 true:手机点击确认登录后可以在 iframe 内跳转到 redirect_uri,false:手机点击确认登录后可以在 top window 跳转到 redirect_uri。默认为 false。 方法说明
方法 说明 destroyed 无需登录时,可手动销毁实例 wwLogin.destroyed() // 注意wwLogin为实例对象
1.网站内嵌二维码企业微信登录JS代码中href字段作用?
答:如果企业觉得企业微信团队提供的默认样式与自己的页面样式不匹配,可以自己提供样式文件来覆盖默认样式。举个例子,如企业觉得默认二维码过大,可以提供相关css样式文件,并把链接地址填入href字段(只支持https协议的资源地址):.impowerBox .qrcode {width: 200px;} .impowerBox .title {display: none;} .impowerBox .info {width: 200px;} .status_icon {display: none !important} .impowerBox .status {text-align: center;}
6. 企微回调后端接口,后端消费code,获取企微的唯一userid,处理登录逻辑
假如redirect_uri=http://api.test.com/login,当扫码登录后,企业微信会回调http://api.test.com/login后端接口,并让前端传回code和state
7. 获取access_token(HttpClients请求)
请求方式: GET(HTTPS)
请求地址: https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET参数说明:
参数 必须 说明 corpid 是 企业ID,获取方式参考:术语说明-corpid corpsecret 是 应用的凭证密钥,注意应用需要是启用状态,获取方式参考:术语说明-secret 权限说明:
每个应用有独立的secret,获取到的access_token只能本应用使用,所以每个应用的access_token应该分开来获取返回结果:
{ "errcode": 0, "errmsg": "ok", "access_token": "accesstoken000001", "expires_in": 7200 }
参数说明:
参数 说明 errcode 出错返回码,为0表示成功,非0表示调用失败 errmsg 返回码提示语 access_token 获取到的凭证,最长为512字节 expires_in 凭证的有效时间(秒) 注意事项:
开发者需要缓存access_token,用于后续接口的调用(注意:不能频繁调用gettoken接口,否则会受到频率拦截)。当access_token失效或过期时,需要重新获取。access_token的有效期通过返回的expires_in来传达,正常情况下为7200秒(2小时)。
8. 获取访问用户身份userid(HttpClients请求),进行相应逻辑(如登录)
请求方式:GET(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
参数说明:
参数 必须 说明 access_token 是 调用接口凭证 code 是 通过成员授权获取到的code,最大为512字节。每次成员授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。 权限说明:
跳转的域名须完全匹配access_token对应应用的可信域名,否则会返回50001错误。返回结果:
a) 当用户为企业成员时(无论是否在应用可见范围之内)返回示例如下:{ "errcode": 0, "errmsg": "ok", "userid":"USERID", "user_ticket": "USER_TICKET" }
参数 说明 errcode 返回码 errmsg 对返回码的文本描述内容 userid 成员UserID。若需要获得用户详情信息,可调用通讯录接口:读取成员。如果是互联企业/企业互联/上下游,则返回的UserId格式如:CorpId/userid user_ticket 成员票据,最大为512字节,有效期为1800s。
scope为snsapi_privateinfo,且用户在应用可见范围之内时返回此参数。
后续利用该参数可以获取用户信息或敏感信息,参见"获取访问用户敏感信息"。暂时不支持上下游或/企业互联场景