PHP-企业微信OAuth2.0微信授权验证获取用户信息

本文介绍了如何使用企业微信OAuth2.0进行静默授权,获取用户信息的步骤。包括配置可信域名、生成回调网址、通过code获取员工信息以及详细解释了每个步骤的关键点和代码示例。

各位朋友们分享一下企业微信静默授权获取用户信息的心得,有不对的地方还请大家指出。
步骤如下:
1.网页授权及JS-SDK可信域名配置;需要将“WW_verify_BJaQgWHfUyKpEU5L.txt”文件放入可信域名更目录下进行验证;验证成功后可继续下一步步骤。
在这里插入图片描述在这里插入图片描述
2.生成回调网址;
若想要获取企业员工的身份信息,需构造如下的链接:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
参数说明:

参数必填说明
appid企业的CorpID
redirect_uri授权后重定向的回调链接地址,请使用urlencode对链接进行处理 ,注意域名需要设置为第三方应用的可信域名
response_type返回类型,此时固定为:code
scope应用授权作用域。snsapi_base:静默授权,可获取成员的基础信息(UserId与DeviceId);snsapi_userinfo:静默授权,可获取成员的详细信息,但不包含手机、邮箱等敏感信息;snsapi_privateinfo:手动授权,可获取成员的详细信息,包含手机、邮箱等敏感信息(貌似已废弃总之不推荐)。
state重定向url后会带上state参数,随便怎么写什么,不想写就不写(可以填写a-zA-Z0-9的参数值,长度不可超过128个字节)
#wechat_redirect固定内容(微信终端使用此参数判断是否需要带上身份信息)

例如我的url是https://www.baidu.com;注意:需要用urlencode进行转换转换后得:“https%3a%2f%2fwww.baidu.com”

我这边要填写的就是:https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxx&redirect_uri=https%3a%2f%2fwww.baidu.com&response_type=code&scope=snsapi_base&state=1#wechat_redirect;即可。

企业员工点击后,页面将跳转至 redirect_uri?code=CODE&state=STATE该链接最重要的是他返回了code值,这个code值时获取用户身份信息的关键。且这个code是以GET的方式进行获取的。

3.通过code获取员工信息(Https请求方式:GET)
https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE

参数必填说明
access_token调用接口凭证
code通过成员授权获取到的code,每次成员授权带上的code将不一样,code只能使用一次,10分钟未被使用自动过期

返回结果显示:
a)企业成员授权时返回示例如下:

{

   "UserId":"USERID",

   "DeviceId":"DEVICEID"

}

得到UserId后即可利用UserId去进行通讯录访问;

6、通过userid获取员工信息

请求说明 :Https请求方式: GET

https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&userid=USERID

参数必填说明
access_token调用接口凭证
userid成员UserID。对应管理端的帐号

返回结果:

返回结果

{
   "errcode": 0,
   "errmsg": "ok",
   "userid": "zhangsan",
   "name": "李四",
   "department": [1, 2],
   "position": "后台工程师",
   "mobile": "15913215421",
   "gender": "1",
   "email": "zhangsan@gzdev.com",
   "weixinid": "lisifordev",
   "avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0";;;;;;,
   "status": 1,
   "extattr": {"attrs":[{"name":"爱好","value":"旅游"},{"name":"卡号","value":"1234567234"}]}
}

参数说明:跳过…可见文档:https://work.weixin.qq.com/api/doc/90001/90143/90332

这边有个小细节需要注意:如果您的企业微信没有设置“通讯录同步”,是无法获取第“6”步的成员具体信息的。通讯录同步配置值如下:登录企业微信进入首页面->管理工具->通讯录同步
在这里插入图片描述

下面附上最关键的~示例代码:

<?php
$corpid="企业id";
$corpsecret="应用secret";
//通过第“2”步骤获取code直接用$_GET['code'];方式取
$code = $_GET['code'];
//获取access_token
$accesstoken=get_access_token($corpid,$corpsecret);
//测试code是否存在
if (!empty($code))
{
$user=getUserInfoByAuth($accesstoken,$code);
$userid=$user["UserId"];
$openid=$user["OpenId"];
$deviceid=$user["DeviceId"];
//测试企业用户是否存在
if (!empty($userid))
{
 $userinfo=getUserInfo($accesstoken,$userid);
 $username= $userinfo["name"];
 var_dump($userinfo);
}else{	
	echo '该用户尚未关注企业微信';
}
}

function getUserInfoByAuth($accesstoken,$code)
{
//利用access_token、code读取userid
	$url="https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=$accesstoken&code=$code";
	$content=curl_get($url);
	$ret= json_decode($content,true);
	return $ret;
}
//利用access_token、userid读取用户身份详细信息
function getUserInfo($accesstoken,$userid)
{

 $url="https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=$accesstoken&userid=$userid";
 $content=curl_get($url);
 $ret= json_decode($content,true);
 return $ret;
}
function curl_get($url)
{
 $ch = curl_init();
 curl_setopt($ch,CURLOPT_URL,$url);
 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
 curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);

 if(!curl_exec($ch))
 {
 error_log(curl_error($ch));
 $data="";
 }
 else
 {
 $data=curl_multi_getcontent($ch);
 }

 curl_close($ch);
 return $data;
}

//获取access_token
function get_access_token($corpid,$corpsecret)
{
 $url="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$corpid&corpsecret=$corpsecret";
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

 $output=curl_exec($ch);

curl_close($ch);
$jsoninfo = json_decode($output,true);

 return $jsoninfo["access_token"];
} //end get_access_token

?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值