微信小程序登陆demo

  //封装调用方法  也可以 file_get_contents($url); 
  public function getJson($url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        curl_close($ch);
        return json_decode($output, true);
    }

进入正题  微信小程序是怎么登陆的呢?
   1。前端获取微信的code码

   2。后台通过Appid AppSecret  先获取token 

   3。通过code Appid AppSecret 获取openid

   4。用过token openid  获取用户信息

  //这个只是验证登陆
public function getParint() {

        $code = $_POST['code'];//接受code、用户信息
        if(!$code){
            msg(['code' => 20,'message' => "参数为空" ]);
        }

        $appid = C('APPID');
        $AppSecret = C('AppSecret');

        /*取得openid*/
        $oauth2Url = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$AppSecret&js_code=$code&grant_type=authorization_code";
        $oauth2 = $this->getJson($oauth2Url);
        $openid = $oauth2['openid'];//openID
        $user = M('users');
        $lists = [];
        $lists['openid'] = $openid;
        $lists['time'] = date('Y-m-d H:i:s');//登陆时间

        $parteny = $user -> where(['openid'=>$openid]) -> find();
        //如果是第一次进,添加
        if(empty($parteny)){
            $start = 1;
            $acces = $user->data($lists)->add();//记录
            if(!$acces){
                $this->ajaxReturn(['code' => 0,'message' => "获取信息失败",'openid'=>$openid ]);
            }
            $this->ajaxReturn(['code'=>1,'data'=>$openid,'state' => $start]);
        }else{
            $start = 2;
        }
        $this->ajaxReturn(['code'=>1,'data'=>$parteny['openid'],'state' => $start]);

    }
 /**
*
* 微信授权
*/
public static function wechat_login($appid, $appsecret, $code)
{
    $token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $appsecret . '&code=' . $code . '&grant_type=authorization_code';

    $token = json_decode(file_get_contents($token_url      ));

    if (isset($token->errcode)) {
        return false;
    }
    $access_token_url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=' . $appid . '&grant_type=refresh_token&refresh_token=' . $token->refresh_token;
    //转成对象
    $access_token = json_decode(file_get_contents($access_token_url));
    if (isset($access_token->errcode)) {
        return false;
    }
    $user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token->access_token . '&openid=' . $access_token->openid . '&lang=zh_CN';
    //转成对象
    $user_info = json_decode(file_get_contents($user_info_url));
    if (isset($user_info->errcode)) {
         return false;      
    }

    $result = json_decode(json_encode($user_info), true);//返回的json数组转换成array数组
  
    return $result;
}

其他网站的:

//返回内容:     
[subscribe] => 1
[openid] => oZE7SjqjC_A88aGfaj_X8tJDC
[nickname] => 大仙
[sex] => 1
[language] => zh_CN
[city] => 大兴
[province] => 北京
[country] => 中国 [headimgurl]
function getUserInfoAll($code) { $appid = WX_APP_ID; $secret = WX_SECRET; //第一步:取全局access_token $token = $global_token; //第二步:取得openid $oauth2Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code"; $oauth2 = getJson($oauth2Url); //第三步:根据全局access_token和openid查询用户信息 $access_token = $token; $openid = $oauth2['openid']; $get_user_info_url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=$access_token&openid=$openid&lang=zh_CN";//有subscribe $userinfo = getJson($get_user_info_url); session_start(); // session_id($userinfo['openid']); if($userinfo['subscribe']==1){ $_SESSION['userinfo']=$userinfo; } return $userinfo; } //返回无subscribe function getUserInfo($code) { $appid = WX_APP_ID; $appsecret = WX_SECRET; $access_token = ""; //根据code获得Access Token $access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code"; $access_token_json = https_request($access_token_url); $access_token_array = json_decode($access_token_json, true); $access_token = $access_token_array['access_token']; $openid = $access_token_array['openid']; //根据Access Token和OpenID获得用户信息 $userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid ";//无subscribe $userinfo = https_request($userinfo_url); $userinfo = json_decode($userinfo, true); return $userinfo; }

 

posted @ 2020-08-27 13:51  穷帅哥依然纵横一方  阅读(683)  评论(0编辑  收藏  举报