微信公眾號打開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];
    }


}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM