zoukankan      html  css  js  c++  java
  • 微信公众号打开h5 注册界面点击微信登录,获取微信信息绑定本地用户,一键登录

    注册界面判断是否是微信浏览器打开的,如果是,跳转下面的getcode接口,获取到微信code跟回调信息,通过callback获取到微信用户信息后跳转到

    /bindphone.html页面,带着微信用户信息去实现表单提交注册绑定功能

    <script>
    if(isWeixin()) {
    // alert('是微信浏览器');
    window.location.href = "{:url(\"/bindphone/getcode\")}";
    }

    function isWeixin () {
            var ua = window.navigator.userAgent.toLowerCase();
            if(ua.match(/MicroMessenger/i) == 'micromessenger' || ua.match(/_SQ_/i) == '_sq_'){
                return true;
            } else{
                return false;
            }
        }
    

      

    <?php
    
    namespace app\home\controller;
    
    use think\facade\Cache;
    use think\facade\Db;
    use think\facade\Session;
    
    /*use aliyun\api_demo\SmsDemo;*/
    
    class BindPhone extends Base
    {
        public $nid = "sign";// 模型标识
        public $channeltype;// 模型ID
        private $appid = "wx1ec***********";
        private $AppSecret = '24ca****************';
    
        public function _initialize()
        {
            parent::_initialize();
        }
    
        /*
         * 微信登录绑定手机号
         */
        public function index()
        {
            $param = request()->param();
            $this->assign('openarr', $param);
            return $this->fetch(":bindphone");
        }
    
        public function http_curl($url)
        {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
            curl_setopt($ch, CURLOPT_URL, $url);
            $json = curl_exec($ch);
            curl_close($ch);
            return json_decode($json, 1);
    
        }
    
        public function getcode()
        {
    
            $state = md5(uniqid(rand(), TRUE));
            $hdurl = urlencode("http://www.*****.cn/bindphone/callback");//微信公众号需要绑定该地址
            $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $this->appid . "&redirect_uri=" . $hdurl . "&response_type=code&scope=snsapi_userinfo&state=" . $state . "#wechat_redirect";
            $this->redirect($url);
        }
    
        public function callback()
        {
            $param = request()->param();
            $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $this->appid . '&secret=' . $this->AppSecret . '&code=' . $param['code'] . '&grant_type=authorization_code';
            $arr = $this->http_curl($url);
            $openids = $arr['openid'];
            Cache::set($openids, $openids, 86400);
            //得到openid  uniid  后查询数据库看看是否有该纪录,如果有--<手机验证通过后>,直接登录,存好uid到session,如果没有,走绑定手机号步骤,进行完善或者注册
            $useinfo = Db::name('nqi_sys_user')->where('openid', $openids)->find();
            if (!empty($useinfo)) {
                //手机号验证登录操作
                $this->redirect("/loginphone.html?oid=".$openids);
                /*$this->sees($useinfo['sys_user_id'],$useinfo['user_name']);
                $this->redirect("/news.html?searchmodels=能源&filter=filter-ny&pageindex=2&pagesize=12");die;*/
            }
            //得到 access_token 与 openid
            $urls = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $arr['access_token'] . '&openid=' .$openids . '&lang=zh_CN';
            $wechatInfos = $this->http_curl($urls);
            //得到 用户资料,将openid  unionid传给页面,跳转去走注册或者绑定流程页面
            $this->redirect("/bindphone.html?openid=".$wechatInfos['openid']."&nickname=".$wechatInfos['nickname']);
        }
    
        /**
         * 更新或者添加用户
         */
        public function addUser()
        {
            $param = request()->param();
            $mobile = $param['mobile_phone'];
            $openid = $param['openid'];
            $jianjie = Db::name('nqi_sys_user')->where('mobile_phone', $param['mobile_phone'])->find();
            $data = [];
            if (!empty($jianjie)) {
                $uid = $jianjie['sys_user_id'];
                if(!empty($jianjie['openid'])){
                    return ['status' => 400, 'msg' => '该手机号已有微信绑定','data' =>'','token'=>''];die;
                }
                Db::name('nqi_sys_user')->where('sys_user_id', $uid)->update(['openid' => $openid]);
                return $this->sees($jianjie['sys_user_id'],$jianjie['user_name']);
    
            } else {
                $time = time();
                $data['sys_user_id'] = uuid();
                $data['password'] = func_encrypt('123456');
                $data['sys_role_id'] = 'CompanyUser';
                $data['user_type'] = 1;
                $data['openid'] = $openid;
                $data['user_status'] = 1;
                $data['user_name'] = "youke".$time;
                $data['real_name'] = $param['real_name'];
                $data['mobile_phone'] = $param['mobile_phone'];
                $res = Db::name('nqi_sys_user')->insert($data);
                return $this->sees($data['sys_user_id'],$data['user_name']);
            }
        }
    
        public function sees($sys_user_id,$user_name){
            $token = md5($sys_user_id . '369369369');
            Session::set('userName', $user_name);
            Session::set('token', $token);
            Session::set('sys_user_id', $sys_user_id);
            return ['status' => 200, 'msg' => '成功','data' => $sys_user_id,'token'=>$token];
        }
    
    
    }
  • 相关阅读:
    <排序算法> 计数排序CountSort
    <排序算法> 直接插入排序InsertSort
    <排序算法> 快速排序QuickSort
    C# 获取文件的后缀,文件名和路径
    C# 移除HTML标签
    无限层级数
    iOS通用链接配置
    iOS 最新证书制作流程、制作通用证书
    C# FormData 文件太大报错404 Form表单上传大文件,无法进入后台Action,页面提示404.
    IS加载JSON 和 MP4文件 错误 404 提示 需要添加mime映射(默认IIS Express里没有映射)
  • 原文地址:https://www.cnblogs.com/yszr/p/15654321.html
Copyright © 2011-2022 走看看