微信小程序登陆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 @   穷帅哥依然纵横一方  阅读(733)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示