中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信掃碼登陸/微信公交號 登錄PHP 自適應 UnionID統一用戶

發布時間:2020-10-24 14:16:02 來源:網絡 閱讀:3208 作者:wx58021137dc03e 欄目:web開發
<?php

namespace Topxia\Component\OAuthClient;
/**
 * 微信掃碼登陸
 * Enter description here ...
 * @author Administrator
 *
 */
class WeixinOAuthClient extends AbstractOAuthClient
{

    public $tokenURL;
    public $authorizeURL;
    public $userURL;

    public $scope = '';
    public $app_key;
    public $app_secret;
    public $display = '';
    public $graphURL = '';


    public $token = array();
    public $meth = array();

    public $post_login = array();
    public $post_token = array();
    public $post_msg = array();

    public function getAuthorizeUrl($callbackUrl)
    {
        $state = md5(time()+rand(0,9999));
        $_SESSION['weixin_state'] = $state;

        $url="";
        if(strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false)
        {
            /**
             * 公眾號登錄
             * Enter description here ...
             * @var unknown_type
             */
                
            $this->config['key']="wx";//用戶 微信公交號登錄的 APPID
            
            $url = "https://open.weixin.qq.com/connect/oauth3/authorize";
            $url .="?appid=".$this->config['key']."&redirect_uri=".urlencode($callbackUrl)."&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect";

        }
        else
        {
            /**
             * 微信網頁授權登錄
             * Enter description here ...
             * @var unknown_type
             */
            $this->authorizeURL = 'https://open.weixin.qq.com/connect/qrconnect';
            $this->app_key = $this->config['key'];
            $this->app_secret = $this->config['secret'];
            $this->parameter = array(
                'response_type' => 'code',
                'scope' => 'snsapi_login',
                'state' => $state,
            );

            $url = $this->authorizeURL.'?';
            $url .= 'appid='.$this->app_key;
            if(!empty($callbackUrl))
            {
                $this->parameter['redirect_uri'] = $callbackUrl;
            }
            $url .= '&'.http_build_query($this->parameter);
        }
        return $url;
    }



    public function getAccessToken($code, $callbackUrl)
    {


        if(strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false)
        {
            /**
             * 公眾號登錄
             * Enter description here ...
             * @var unknown_type
             */
                
            $APPID="wx";//用戶 微信公交號登錄的 APPID
            $SCRETID="200049";//用戶 微信公交號登錄的 SCRETID
            
            
            
            $url = "https://api.weixin.qq.com/sns/oauth3/access_token?appid=".$APPID."&secret=".$SCRETID."&code=".$code."&grant_type=authorization_code";

            $re = $this->curl_get_contents1($url);
            $rearr = json_decode($re,true);
            $openid = $rearr['openid'];

            $url3 = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$APPID."&secret=".$SCRETID;
            $re3 = $this->curl_get_contents1($url3);
            $re3arr = json_decode($re3,true);
            //print_r($re3arr);exit;
            
            $token1['openid1']=$openid;
            $token1['token']=$re3arr['access_token'];
            
            $unionid=$this->getunionid($token1);
            
            //$_SESSION['openid'] = $openid;
            $token = array(
               'userId' => $unionid,
            'token' => $re3arr['access_token'],
            'openid' => $unionid,
            'openid1' => $openid,
            // 'refresh_token' => $rawToken['refresh_token'],
            );
            return $token;

        }
        else
        {

            $url = sprintf('https://api.weixin.qq.com/sns/oauth3/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code',$this->config['key'],$this->config['secret'],$code);
            $re = $this->curl_get_contents1($url);
            $rawToken = json_decode($re,true);
            if($rawToken['errcode']){
                echo "錯誤提示:".$data;
                exit;
            }
            //$_SESSION['openid'] = $rawToken['openid'];
            
            $token1['openid1']=$rawToken['openid'];
            $token1['token']=$rawToken['access_token'];
            
            $unionid=$this->getunionid($token1);
            $token = array(
        'userId' => $unionid,
            'token' => $rawToken['access_token'],
            'openid' => $unionid,
            'openid1' => $rawToken['openid'],
            'refresh_token' => $rawToken['refresh_token'],
            );
            return $token;
        }

    }

    /**
     * 獲取unionid 統一微信登錄用戶
     * Enter description here ...
     * @param unknown_type $token
     */
    public function getunionid($token)
    {
        $userInfo=array();
        if(strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false)
        {
            /**
             * 公眾號登錄
             * Enter description here ...
             * @var unknown_type
             */
            header("Content-type: text/html; charset=utf-8");   
            $url2 = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$token['token']."&openid=".$token['openid1']."&lang=zh_CN";
            $re2 = $this->curl_get_contents1($url2);
            $userInfo = json_decode($re2,true);
        }
        else
        {
            $params = array();
            $params['access_token'] = $token['token'];
            $params['openid'] = $token['openid1'];
            $url='https://api.weixin.qq.com/sns/userinfo';
            $url .="?access_token=".$params['access_token']."&openid=".$params['openid']."&lang=zh_CN";
            $re = $this->curl_get_contents1($url);
            $userInfo = json_decode($re,true);
        }
        
        return $userInfo['unionid'];
    }
    
    
    
    public function getUserInfo($token)
    {

        $userInfo=array();
        if(strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false)
        {
            
            /**
             * 公眾號登錄
             * Enter description here ...
             * @var unknown_type
             */
            header("Content-type: text/html; charset=utf-8");   
            $url2 = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$token['token']."&openid=".$token['openid1']."&lang=zh_CN";
            $re2 = $this->curl_get_contents1($url2);
            $userInfo = json_decode($re2,true);
        }
        else
        {
            $params = array();
            $params['access_token'] = $token['token'];
            $params['openid'] = $token['openid1'];
            $url='https://api.weixin.qq.com/sns/userinfo';
            $url .="?access_token=".$params['access_token']."&openid=".$params['openid']."&lang=zh_CN";
            $re = $this->curl_get_contents1($url);
            $userInfo = json_decode($re,true);
            //$this->checkError($userInfo);
        }
        //print_r($userInfo);exit;
        return $this->convertUserInfo($userInfo);
    }

    protected function convertUserInfo($rawUserInfo)
    {
        $info = array();
        //print_r($rawUserInfo);
        $info['name'] = $rawUserInfo['nickname'];
        $info['sex'] = $rawUserInfo['sex'];
        $info['id'] = $rawUserInfo['unionid'];
        $info['smallAvatar'] = $rawUserInfo['headimgurl'];
        return $info;
    }


    //var_dump($openid);
    function curl_get_contents1($url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_TIMEOUT, 2);
        curl_setopt($ch, CURLOPT_USERAGENT, "IE 6.0");
        curl_setopt($ch, CURLOPT_REFERER, "");
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        $r = curl_exec($ch);
        curl_close($ch);
        return $r;
    }

    private function checkError($userInfo)
    {
        if (!array_key_exists('error_code', $userInfo)) {
            return ;
        }
        if ($userInfo['error_code'] == '21321') {
            throw new \Exception('unaudited');
        }
        throw new \Exception($userInfo['error']);
    }
}

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

锡林浩特市| 宜昌市| 汝南县| 兴安盟| 修水县| 巴彦县| 出国| 柏乡县| 青神县| 亚东县| 临桂县| 商丘市| 芜湖县| 平罗县| 余江县| 来宾市| 平阳县| 海南省| 南开区| 沾化县| 南投县| 平顺县| 涡阳县| 米易县| 杂多县| 探索| 松原市| 镇平县| 浦江县| 大连市| 仙居县| 沁水县| 邯郸市| 乌苏市| 天柱县| 孝感市| 永泰县| 河池市| 南开区| 大田县| 碌曲县|