php企业微信获取userid,thinkphp开发根据企业号开发者文档获取企业微信用户信息...

###我们要获取企业微信里用户信息,首先我们来看开发者文档。

c7c3b755ded44e9e4bca1bd2accd12c2.png ###正如我们所看到的,我们需要access_token和userid两个参数,接下来我们就要找到如何去获取这两个参数。

4905a5d259c4ab1b12b1c1bf5b841147.png ###下面我们可以根据微信企业号已知的两个参数corpid(一个企业微信号只有一个,不可变)和corpsecret(每个应用有一个自己的,可变)获取到access_token。 #获取AccessToken

private $appId="wxcf....."; //微信企业号的appid

public function getAccessToken() { //获取AccessToken的方法

$data = json_decode(file_get_contents("AccessToken.json"));//获取存在AccessToken.json

//$access_token=$data->access_token;

if ($data->expire_time < time()) { //如果AccessToken过期则重新获取AccessToken

// $config = C('WX_CONFIG');

$url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wxcf.....&corpsecret=2ASy1p9hBT_AGhaSeJEHMbXiXY........";//获取AccessToken的url及参数。

$res =$this->https_request($url);//调用https请求方法

$res = json_decode($res); //把$res设置为对象

$access_token = $res->access_token; //获取结果集中的access_token

if ($access_token) {

$data->expire_time = time() + 7000; //上一次获取access_token的时间加上两小时,access_token的有效时间为两小时,超过两小时则重新获取。也可以每次使用时都重新获取,但是有获取次数限制。

$data->access_token = $access_token;

$fp = fopen("AccessToken.json", "w"); //打开AccessToken.json文件,“W”表示写入(Write)

fwrite($fp, json_encode($data));//获取到的结果写入

fclose($fp);//关闭文件

}

} else {

$access_token = $data->access_token; //未过期情况下直接读取文件里的access_token

}

return $access_token;

}

###access_token的有效时间是7200s,这里我们做一个存储,避免每次使用都去获取。 ###我们已经得到了access_token,现在就要得到userid。

e76741d4c70d2b4da36ae280be8b95da.png

ce56e7da6835f8dc4d976923f31cba91.png ###在获取userid之前我们还要获取到code,才能把得到userid。在获取code时候我们要注意的两个参数就是CORPID(这个是我们在上面提到的一个微信号只有唯一的一个标识)和REDIRECT_URI(回调地址,就是当我们获取到code时所跳转的地址)。 #获取userid

//网页授权获取用户userid

public function authUser() {

if(session('UserId')){

return session('UserId');//判断缓存里是否有UserId,如果有直接返回,没有则获取

}else{

$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";

$redirecturl = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";//回调地址

$redirecturl=urlencode($redirecturl);对地址进行编码;

if($_GET['code']){ //判断code是否获取到,如果以获取则获取userid,否则获取code。

$accesstoken=$this->getAccessToken(); //调用上面获取access-token的方法

$code=$_GET['code'];

$getuser="https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=".$accesstoken."&code=".$code;//获取userid的url。

$data=$this->https_request($getuser); 调用https_request方法请求得到userid。

$data=json_decode($data,true); //将获取到的json格式的数据进行转化。(json_decode()方法不写后面参数true得到的是对象,写了参数true值得到的是数组)

if($data['UserId']){

session('UserId',$data['UserId']);

return $data['UserId'];

}else{

trigger_error("网页授权失败");

}

}else{ //获取code值

$appid=$this->appId;

$url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=".$redirecturl."&response_type=code&scope=snsapi_base&state=12#wechat_redirect";

header('Location:'.$url);

}

}

}

###上面getAccessToken()和 authUser()方法都调用了一个方法那就是https_request();

/https请求(支持GET和POST)

public function https_request($url, $data = null){

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

if (!empty($data)){

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

}

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($curl);

curl_close($curl);

return $output;

}

###现在我已经得到access_token和userid,这时我们就可以根据第一个图中的url获取用户信息啦。

public function getinfo(){

//获取用户信息

$userid=$this->authUser();

$access_token=$this->getAccessToken();

$url="https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=$access_token&userid=$userid";

$info=$this->https_request($url);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值