微信企业号:OAuth2.0微信授权验证
企业应用中的 URL 链接(包括自定义菜单或者消息中的链接),可以通过 OAuth2.0 验证接口来获取成员的身份信息。使用步骤和方法如下:
1、先开发要使用微信授权认证的网页应用,这个网址必须在互联网上。
2、生成回调网址
企业如果需要员工在跳转到企业网页时带上员工的身份信息,需构造如下的链接:
参数说明参数必须说明
appid是企业的 CorpID
redirect_uri是授权后重定向的回调链接地址,请使用 urlencode 对链接进行处理
response_type是返回类型,此时固定为:code
scope是应用授权作用域,此时固定为:snsapi_base
state否重定向后会带上 state 参数,企业可以填写 a-zA-Z0-9 的参数值,长度不可超过 128 个字节
#wechat_redirect是微信终端使用此参数判断是否需要带上身份信息
举例:因为要调用 urlencode 函数,所以先在 PHP 生成这个回调网址。
$url=''.urlencode('';
echo $url
结果如下:
3、绑定菜单
先选择对应的【应用】,然后启用【回调模式】,选择自定义菜单的【设置】,然后设置菜单,事件类型选择【跳转到网页】,输入上面的网站。具体见下面的图片。
4、获取 code
员工点击该网页后,页面将跳转至 redirect_uri?code=CODE&state=STATE,如下:
该网页可以以 GET 方式读取 code 的内容。State 的内容用户自行处理。
5、通过 code 获取员工信息请求说明 :Https 请求方式:GET参数说明参数必须说明
access_token是调用接口凭证
code是通过成员授权获取到的 code,每次成员授权带上的 code 将不一样,code 只能使用一次,10 分钟未被使用自动过期返回结果
a) 企业成员授权时返回示例如下:
{
"UserId":"USERID",
"DeviceId":"DEVICEID"
}参数说明
UserId成员 UserID
DeviceId手机设备号 (由微信在安装时随机生成,删除重装会改变,升级不受影响,同一设备上不同的登录账号生成的 deviceid 也不同)
b) 非企业成员授权时返回示例如下:
{
"OpenId":"OPENID",
"DeviceId":"DEVICEID"
}参数说明
OpenId非企业成员的标识,对当前企业号唯一
DeviceId手机设备号 (由微信在安装时随机生成,删除重装会改变,升级不受影响)
c) 出错时返回示例如下:
{
"errcode": "40029",
"errmsg": "invalid code"
}
6、通过 userid 获取员工信息请求说明 :Https 请求方式: GET参数说明参数必须说明
access_token是调用接口凭证
userid是成员 UserID。对应管理端的帐号返回结果{"errcode":0,"errmsg":"ok","userid":"zhangsan","name":"李四","department":[1,2],"position":"后台工程师","mobile":"15913215421","gender":"1","email":"","weixinid":"lisifordev","avatar":"http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0";;;,"status":1,"extattr":{
"attrs":[{
"name":"爱好",
"value":"旅游"
},
{
"name":"卡号",
"value":"1234567234"
}]
}}参数说明
errcode返回码
errmsg对返回码的文本描述内容
userid成员 UserID。对应管理端的帐号
name成员名称
department成员所属部门 id 列表
position职位信息
mobile手机号码
gender性别。0 表示未定义,1 表示男性,2 表示女性
email邮箱
weixinid微信号
avatar头像 url。注:如果要获取小图将 url 最后的 "/0" 改成 "/64" 即可
status关注状态: 1 = 已关注,2 = 已禁用,4 = 未关注
extattr扩展属性
7、示例代码 PHP
$corpid="";
$corpsecret="";
$code = $_GET['code'];
$accesstoken=get_access_token($corpid,$corpsecret);
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"];
}
}
function getUserInfoByAuth($accesstoken,$code)
{
$url="";
$content=curl_get($url);
$ret= json_decode($content,true);
return $ret;
}
function getUserInfo($accesstoken,$userid)
{
$url="";
$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="";
$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
>
其他文章请见西祠胡同讨论版:
来源: http://www.bubuko.com/infodetail-2003038.html