微信企业号:OAuth2.0微信授权验证
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信企业号: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=‘https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx74e955420d317a6e&redirect_uri=‘.urlencode(‘http://1.xxxxweixin.applinzi.com/test/login.php‘).‘&response_type=code&scope=snsapi_base&state=1#wechat_redirect‘;
echo $url
结果如下:
3、绑定菜单
先选择对应的【应用】,然后启用【回调模式】,选择自定义菜单的【设置】,然后设置菜单,事件类型选择【跳转到网页】,输入上面的网站。具体见下面的图片。
4、获取code
员工点击该网页后,页面将跳转至 redirect_uri?code=CODE&state=STATE,如下:
http://1.xxxxweixin.applinzi.com/test/login.php?code=155dee2d7912739ed9ad43619138dfcf&state=1
该网页可以以GET方式读取code的内容。State的内容用户自行处理。
5、通过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 |
DeviceId | 手机设备号(由微信在安装时随机生成,删除重装会改变,升级不受影响,同一设备上不同的登录账号生成的deviceid也不同) |
b)非企业成员授权时返回示例如下:
{
"OpenId":"OPENID",
"DeviceId":"DEVICEID"
}
参数 | 说明 |
OpenId | 非企业成员的标识,对当前企业号唯一 |
DeviceId | 手机设备号(由微信在安装时随机生成,删除重装会改变,升级不受影响) |
c)出错时返回示例如下:
{
"errcode": "40029",
"errmsg": "invalid code"
}
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": "[email protected]",
"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表示女性 |
邮箱 | |
weixinid | 微信号 |
avatar | 头像url。注:如果要获取小图将url最后的"/0"改成"/64"即可 |
status | 关注状态: 1=已关注,2=已禁用,4=未关注 |
extattr | 扩展属性 |
7、示例代码PHP
<?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="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;
}
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
?>
其他文章请见西祠胡同讨论版:http://www.xici.net/b1261440/
本文出自 “11460531” 博客,请务必保留此出处http://11470531.blog.51cto.com/11460531/1911977
以上是关于微信企业号:OAuth2.0微信授权验证的主要内容,如果未能解决你的问题,请参考以下文章