微信授权登录后,把获取的信息存储到本地数据库中(超详细有用)!

微信授权登录后,把获取的信息存储到本地数据库中(超详细有用)!下面一起来看看吧!

<?php
namespace Home\Controller;
use Think\Controller;
class YiMuDiController extends Controller
{
    /**
     * 构造方法
     */
    public function __construct()

    {
        parent::__construct();
        $this->modelUserAccount = M('yimudi_account'); // 账户表
        $this->wxUserInfo = session('wxUserInfo');
        $this->uid = session('uid');
        $this->mobile = session('mobile');
        if (!$this->uid)
        {
            $this->uid = $this->getUserId()['user_id'];
            $this->mobile = $this->getUserId()['mobile'];
            session('uid', $this->uid);
            session('mobile', $this->mobile);
        }
    }

    /**
     * 获取微信用户信息
     * @return mixed
     */
    protected function getWxUserInfo()
    {
        $AppId = C('AppId'); //访问配置文件的appId
        $AppSecret = C('AppSecret'); //访问配置文件的appSecret

        // 获取微信 code
        $code = I('get.code');
        if (!$code)
        {
            $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
            $redirectUri = $protocol . $_SERVER['HTTP_HOST'] . __SELF__;
            $redirectUri = urlencode($redirectUri);
            $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$AppId&redirect_uri=$redirectUri&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect";
            redirect($url);
        }

        // 获取微信网页授权 access_token
        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$AppId&secret=$AppSecret&code=$code&grant_type=authorization_code";
        $userInfoJson = file_get_contents($url);
        $userInfo = json_decode($userInfoJson, true);

        // 获取微信用户信息
        $url = "https://api.weixin.qq.com/sns/userinfo?access_token={$userInfo['access_token']}&openid={$userInfo['openid']}&lang=zh_CN";
        $userDetailInfoJson = file_get_contents($url);
        $userDetailInfo = json_decode($userDetailInfoJson, true);
        return $userDetailInfo;
    }

    /**
     * 获取用户 ID
     * @return mixed
     */
    protected function getUserId()
    {
        if (!$this->wxUserInfo)
        {
            $this->wxUserInfo = $this->getWxUserInfo();
            session('wxUserInfo', $this->wxUserInfo);
        }
        $this->openid = $this->wxUserInfo['openid'];

        // 1. 通过 openid,查询账户表获取 user_id
        $where = array(
            'openid' => $this->openid,
            'disabled' => 0,
        );
        $info = $this->yimudiAccount->where($where)->getField('user_id,mobile');
        if ($info)
        {
            $datainfo=[];
            $datainfo['user_id'] = $info['user_id];
             $datainfo['mobile'] = $info['mobile'];
            return $datainfo;
        }


        
    }

    /**
     * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     * @name 获取微信js-sdk配置参数
     * @method 传参请求
     * @param	当前执行程序的完整的URL
     * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     */
    public function getWxjsSdkConfig(){
        $appId = C('AppId');//访问配置文件的appId
        $appSecret = C('AppSecret');//访问配置文件的appSecret
        $nonceStr = $this->getRandomString(16);//签名参数1:随机字符串
        $jsapiTicket = $this->getJsApiTicket($appId,$appSecret);
        $timestamp = time();
        $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
        $actionUrl = $protocol . $_SERVER['HTTP_HOST'] . __SELF__;
        $signString = stripcslashes('jsapi_ticket='.$jsapiTicket.'&noncestr='.$nonceStr.'&timestamp='.$timestamp.'&url='.$actionUrl);
        $signature = sha1($signString);
        $configData['AppId'] = $appId;
        $configData['AppSecret'] = $appSecret;
        $configData['timestamp'] = $timestamp;
        $configData['nonceStr'] = $nonceStr;
        $configData['signString'] = $signString;
        $configData['signature'] = $signature;
        return $configData;
    }

    
   


    /**
     * 模拟提交
     * @param string $url
     * @param array $data
     * @return bool|mixed
     */
    public function requestPost($url='', $data=array()) {
        if(empty($url) || empty($data)){
            return false;
        }
        $o="";
        foreach($data as $k=>$v){
            $o.="$k=".$v."&";
        }
        $param=substr($o,0,-1);
        $ch=curl_init();//初始化curl
        curl_setopt($ch,CURLOPT_URL,$url);//抓取指定网页
        curl_setopt($ch,CURLOPT_HEADER, 0);//设置header
        curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
        curl_setopt($ch,CURLOPT_POST, 1);//post提交方式
        curl_setopt($ch,CURLOPT_POSTFIELDS, $param);
        $return=curl_exec($ch);//运行curl
        curl_close($ch);
        return $return;
    }

    /**
     * 文件日志
     * @param string $type
     * @param string $data
     */
    public function makeLog($type='',$data=''){
        if(!empty($type)){
            @file_put_contents(C('DIR_LOG').$type."/".$type.'_'.date('YmdH').'.txt',$data."\n",FILE_APPEND);
        }
    }
}

希望对大家有所帮助!

猜你喜欢

转载自blog.csdn.net/Aaroun/article/details/81384345