项目介绍
- 本项目获取个人在企业微信中对应的openid, 可用于后续的支付等
- 使用PHP语言
- 官方地址是:https://work.weixin.qq.com/api/doc#90000/90135/91022
大体逻辑
- 通过https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect 获取到授权code
- 通过https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET 获取acces_token
- 通过https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE获取用户的userid
- 通过https://qyapi.weixin.qq.com/cgi-bin/user/convert_to_openid?access_token=ACCESS_TOKEN userid转openid
代码片段
<?php
/**
* 企业微信获取openid
*/
$corp_id = '######';
$corp_secret = '######';
$code = $_GET['code'];//由https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect返回的授权code
$qywx = new qywx($corp_id,$corp_secret,$code);
$openid = $qywx->execute();
var_dump($openid);
class qywx
{
/**
* 企业微信应用id
* @var string
*/
private $_corpid = '';
/**
* 企业微信应用秘钥
* @var string
*/
private $_corpsecret = '';
/**
* 授权code
* @var string
*/
private $_code = '';
/**
* 凭证
* @var string
*/
private $_access_token = '';
/**
* userid
* @var string
*/
private $_userid = '';
/**
* openid
* @var string
*/
private $_openid = '';
/**
* qywx constructor.
* @param $code
*/
public function __construct($corp_id,$corp_secret,$code)
{
$this->_corpid = $corp_id;
$this->_corpsecret = $corp_secret;
$this->_code = $code;
}
/**
* HTTP请求(支持HTTP/HTTPS,支持GET/POST)
* @param $url
* @param null $data
* @return mixed
*/
private function _httpRequest($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, TRUE);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
/**
* 获取access_token
*/
private function _setAccessToken()
{
$url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid='.$this->_corpid.'&corpsecret='.$this->_corpsecret;
$ret = $this->_httpRequest($url);
$ret = json_decode($ret,true);
if($ret['errcode'] !== 0 or $ret['errmsg'] != 'ok'){
echo $this->error('access_token',$ret);
return false;
}
$this->_access_token = $ret['access_token'];
}
/**
* 获取用户信息:userid
*/
private function _setUserId()
{
$url = 'https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token='.$this->_access_token.'&code='.$this->_code;
$ret = $this->_httpRequest($url);
$ret = json_decode($ret,true);
if($ret['errcode'] !== 0 or $ret['errmsg'] != 'ok'){
echo $this->error('userid',$ret);
return false;
}
$this->_userid = $ret['UserId'];
}
/**
* 转换userid为openid
*/
private function _useridToOpenid()
{
$url = 'https://qyapi.weixin.qq.com/cgi-bin/user/convert_to_openid?access_token='.$this->_access_token;
$data = json_encode(['userid'=>$this->_userid]);
$ret = $this->_httpRequest($url,$data);
$ret = json_decode($ret,true);
if($ret['errcode'] !== 0 or $ret['errmsg'] != 'ok'){
echo $this->error('openid',$ret);
return false;
}
$this->_openid = $ret['openid'];
}
/**
* 获取企业微信openid
* 1.获取凭证access_token
* 2.获取userid
* 3.转换userid为openid
*
* @return string
*/
public function execute()
{
$this->_setAccessToken();
$this->_setUserId();
$this->_useridToOpenid();
return $this->_openid;
}
/**
* 输出错误
* @param $tag
* @param $response
* @return string
*/
private function error($tag,$response)
{
$ret = '获取'.$tag.'失败;'.PHP_EOL;
$ret .= '错误代码:'.$response['errcode'].PHP_EOL;
$ret .= '错误信息:'.$response['errmsg'].PHP_EOL;
$ret .= '若是多次重试失败, 请联系管理员';
return $ret;
}
}