企业微信获取openid

 项目介绍

  1. 本项目获取个人在企业微信中对应的openid, 可用于后续的支付等
  2. 使用PHP语言
  3. 官方地址是:https://work.weixin.qq.com/api/doc#90000/90135/91022

 

 大体逻辑

  1. 通过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
  2. 通过https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET 获取acces_token
  3. 通过https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE获取用户的userid
  4. 通过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;
    }


}

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值