勤奋鸟旗下 软件定制开发 安全交付平台!一次合作,终身售后!全程项目经理一对一跟进测试!公司以自研团队结合搭档圈,为用户提供安全快速稳定的软件源码开发服务!

微信H5授权登录,微信登录,公众号服务

2024-09-04 17:20:52
复制链接

7575

H5 微信登录 类似小程序登录流程

首先获取微信公众号的APPID和secret

点击先获取code,用code去拿access_token

然后在用access_token去获取用户信息

在存用户信息到数据库

这里拿需要检测一下用户是否关注公众号

PHP

public function index(){
//        $id = $this->request->param('id');
        $appid = 'wxc8cdb6991cff2fca';
        $secret = '3d0e67625628d5d75f9dfd3f7ffcad81';

        if(!session('?userinfo')){
            if (!isset($_GET['code'])){//没有code,去微信接口获取code码
                $request = request();
                $callback = $request->url(true);//微信服务器回调url,这里是本页url
//                $this->get_code($callback);
                $redirect_uri=urlencode($callback);
                $url='https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$redirect_uri.'&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect';
                header("location:$url");exit();


            } else {//获取code后跳转回来到这里了
                $code = $_GET['code'];
                $data = $this->get_access_token($code);//获取网页授权access_token和用户openid
                $data_all = $this->get_user_info($data['access_token'],$data['openid']);//获取微信用户信息
                session('userinfo',$data_all);
                $this->checkuser($data_all['openid'],$data_all);
//                return json($data_all);
                $user_id = Db::name('user')->where('openid',$data_all['openid'])->find();
                    if($user_id){
                        Session::set('user_id',$user_id['id']);
                        $this->redirect('index/index/user');
                    }else{
                        echo'.alert('授权登录失败!').'';
                    }

            }
        }else{
            $ret=session('userinfo');
//            var_dump($ret);die();
            return json($ret);             //返回的获取到的微信用户信息
        }
    }

    /**
     * 3、使用code换取access_token
     * @param string 用于换取access_token的code,微信提供
     * @return array access_token和用户openid数组
     */
    private function get_access_token($code){
//        $appid = config('appid');
//        $appsecret = config('secret');
//        $appid = 'wx65ac021e2de709df';
//        $appsecret = '806e5a9f22135c58d69975336e801a88';
        $appid = 'wxc8cdb6991cff2fca';
        $appsecret = '3d0e67625628d5d75f9dfd3f7ffcad81';

        $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $appsecret . '&code=' . $code . '&grant_type=authorization_code';
//        var_dump($url);die();
        $user = json_decode(file_get_contents($url));
        if (isset($user->errcode)) {
            echo 'error:' . $user->errcode.'
msg :'
. $user->errmsg;exit; } $data = json_decode(json_encode($user),true);//返回的json数组转换成array数组 return $data; } /** * 4、使用access_token获取用户信息 * @param string access_token * @param string 用户的openid * @return array 用户信息数组 */ private function get_user_info($access_token,$openid){ $url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token . '&openid=' . $openid . '&lang=zh_CN'; $user = json_decode(file_get_contents($url)); if (isset($user->errcode)) { echo 'error:' . $user->errcode.'
msg :'
. $user->errmsg;exit; } $data = json_decode(json_encode($user),true);//返回的json数组转换成array数组 return $data; } /** * 检查用户信息 * TODO 在这个地方如果在用户表加一个时间字段,就可以每隔多少次对数据库进行一次操作,而不是一直更新操作。 */ public function checkuser($openid,$data){ $check=Db::name('user')->where(array('openid'=>$openid))->find(); if($check){ /*更新用户信息*/ $updata=array(); $updata['image']=$data['headimgurl']; $updata['create_time']=time(); $updata['username']=$data['nickname']; Db::name('user')->where('openid',$openid)->update($updata); /*获取最新用户信息并存入缓存*/ $newinfo=Db::name('user')->where(array('id'=>$check['id']))->find(); session('userinfo',$newinfo); }else{ /*新增用户信息*/ $intdata=array(); $intdata = ['username' =>$data['nickname'], 'image' => $data['headimgurl'],'create_time'=>time(),'openid' => $data['openid'],'sex' => $data['sex'],'city' => $data['city'],'province' => $data['province'],'county' => $data['country']]; Db::name('user')->insert($intdata); $userId = Db::name('user')->getLastInsID(); /*获取最新用户信息并存入缓存*/ if(!session('?userinfo')){ $newinfo=Db::name('user')->where(array('id'=>$userId))->find(); // $newinfo=Db::name('wxuser')->where('id',$userId)->find();array('openid'=>$openid,'delstatus'=>1) session('userinfo',$newinfo); } } }

检测是否关注公众号

/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
    /*检测是否关注公众号*/
    /*subscribe    用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。*/
    /*https://www.cnblogs.com/mracale/p/9318349.html*/
    public function checkisgz(){
        $request = request();
        $callback = $request->url(true);//微信服务器回调url,这里是本页url

//        $appid = 'wxd25f887839ae5f30';
//        $secret = '71961adca3a8013a2791dc044fbf9439';
        $appid = 'wxc8cdb6991cff2fca';
        $secret = '3d0e67625628d5d75f9dfd3f7ffcad81';

        //微信网页授权获取openid
        $web_url=$callback;

        if (!isset($_GET['code'])) {
            $redirect_uri=urlencode($web_url);
            $url='https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$redirect_uri.'&response_type=code&scope=snsapi_base&state=1#wechat_redirect';
            header("location:$url");exit();
        }
        $code=trim($_GET['code']);
        $url='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code';
        $access=file_get_contents($url);
        $data=json_decode($access,true);
        $access_token=$data['access_token'];
        $url='https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid=OPENID&lang=zh_CN';
        $user=file_get_contents($url);
        $arr=json_decode($user,true);
        //获取用户的openid
        $openid=$arr['openid'];

        $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;
        $access=file_get_contents($url);
        $access_arr=json_decode($access,true);
        //非网页的access_token
        $access_token=$access_arr['access_token'];

        $url="https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
        $res=file_get_contents($url);
//                var_dump($res);die();
        return $res['subscribe'];
    }

HTML

点击去指向index方法获取code

script>
    layui.use(['layer','upload', 'element'],function() {
        var form = layui.form;
        var layer = layui.layer;

        $('#SubmitAdd').click(function(){
            var index=layer.load();
            // var phone = $('#phone').val();
            // var password = $('#password').val();
            var id= 1;
            $.ajax({
                url:"{:url('index/Wxgetuserinfo/index')}",
                type:'get',
                data:{id:id},
                dataType:'json',
                success:function(res) {
                    layer.close(index);
                    console.log(res);
                    if ( res.code == 1 ) {
                        layer.msg(''+res.msg+'');
                        setTimeout(function(){
                            location.href=res.url;
                        },2000)
                    }else{
                        layer.msg(''+res.msg+'');
                    }
                }
            });
            return false;
        });


    })

script>

中间参数正确,待用户同意授权的,存用户信息,存Session

进行其他操作

17330196230 13230981129

多线程同步开发
项目经理1v1跟进
源码定制交付
一次合作/终身售后

微信扫码登录/注册

提示

您的诉求已经提交请等待工作人员联系,快速通过请联系管理员!

微信扫一扫快速联系

用户协议

欢迎访问我们的网站!我们非常重视用户的隐私权和信息安全,因此制定了以下用户协议,以明确我们与您之间的关系以及您在使用本网站时应遵守的条款。请您仔细阅读并同意本协议的所有条款,以便您能够合法、安全地使用本网站。如果您不同意本协议的任何内容,请立即停止使用本网站。

  1. 服务说明:本网站是一个提供定制软件开发服务和在线找技术搭档的互联网平台。我们保留随时更改、更新或暂停本网站的权利。我们会尽力确保网站的正常运行,但对于因技术问题、系统维护或其他原因导致的网站暂时不可用,我们不承担任何责任。

  2. 用户注册:用户需要通过提供手机号、微信扫码和其他必要信息来注册一个账户。您有责任保护您的用户名和密码,不得将其透露给任何第三方。对于因您的用户名和密码被泄露而导致的任何损失或损害,我们将不承担责任。

  3. 用户行为规范:用户应遵守中华人民共和国相关法律法规,不得发布或传播违法信息、侵犯他人权益的内容。用户应对其发布的内容负责,并承担因发布不当内容而引起的任何法律责任。

  4. 版权声明:本网站所包含的所有文字、图片、音频、视频等素材的著作权均归本网站所有(会员用户上传的默认承诺为不侵权的合法自有技术成果,本网站审核信息后可展示,所有权不归本网站)。未经本网站书面许可,任何单位或个人不得以任何形式复制、转载、修改或传播本网站的任何内容。对于侵犯本网站知识产权的行为,将依法追究其法律责任。

  5. 免责声明:本网站不对因使用本网站而引起的任何直接、间接、偶然、特殊或后果性的损害承担责任。包括但不限于利润损失、数据丢失、业务中断等。

  6. 适用法律和争议解决:本协议的签订、履行、解释及争议解决均适用中华人民共和国法律。如发生争议,双方应首先协商解决;协商不成的,任何一方均有权向有管辖权的人民法院提起诉讼。

  7. 本协议的解释权归本网站所有。如有未尽事宜,本网站保留最终解释权。

  8. 本协议自用户点击“同意”或“接受”按钮时生效。

同意

隐私政策

欢迎访问我们的网站!我们致力于为您提供一个安全、可靠的在线环境。本隐私政策旨在说明我们在您使用我们的网站时如何收集、使用和保护您的个人信息。请仔细阅读以下内容,以了解我们的隐私政策。

  1. 信息收集

在使用我们的网站时,我们可能会收集以下类型的信息:

a) 个人识别信息:如姓名、电子邮件地址、电话号码等。 b) 非个人识别信息:如浏览器类型、操作系统、设备类型、IP地址等。 c) 用户行为信息:如访问页面、点击链接、搜索查询等。

  1. 信息使用

我们收集的信息将用于以下目的:

a) 提供、改进和个性化我们的服务。 b) 与您联系,回应您的询问和请求。 c) 发送您请求的或我们认为对您有帮助的信息。 d) 进行市场调研和分析,以改进我们的产品和服务。 e) 防止欺诈和其他非法活动。

  1. 信息共享

我们不会出售、出租或以其他方式与第三方共享您的个人信息,除非:

a) 获得您的明确同意。 b) 与可信赖的合作伙伴共享,以提供您请求的服务。 c) 根据法律要求或政府机关的要求。 d) 为保护我们的权利、财产或安全。

  1. 信息安全

我们采取合理的安全措施,以保护您的个人信息不受未经授权的访问、披露、更改或破坏。然而,请注意,没有任何一种电子存储方法是100%安全的。

  1. Cookie和跟踪技术

我们的网站使用Cookie和类似的跟踪技术来收集有关您使用我们网站的信息。这些信息有助于我们分析和改进我们的网站,以及提供个性化的内容和广告。您可以通过浏览器设置拒绝接受Cookie,但这可能会影响您使用我们网站的能力。

  1. 第三方链接

我们的网站可能包含指向其他网站的链接。请注意,我们对其他网站的隐私政策和实践不承担任何责任。我们建议您在访问这些网站时查看其隐私政策。

  1. 隐私政策的变更

我们可能会不时更新本隐私政策。请定期查看此页面,以确保您了解我们对个人信息的最新政策。

  1. 联系我们

如果您对我们的隐私政策有任何疑问或建议,请通过以下联系方式与我们联系:

电子邮件:[wangye-101@163.com]

电话:+86-173-3019-6230

地址:中国石家庄市长安区吾悦广场2010室

感谢您的信任和支持!我们将竭诚为您提供更优质的服务。

同意