tp5实现微信登录

首先写一个链接 并判断当前页面是否登录过(目前是商品控制器)

$redirect_url = urlencode('http://'.$_SERVER['HTTP_HOST'].'/wap/login/wx_login');
$member_id = Cookie::get('member_id');//获取登录ID
$setting = Db::table('setting')->where('id = 1')->find(); //获得微信的信息  如appid appsercret

//传输到页面中
$this->assign('appid', $setting['appid']);
$this->assign('redirect_url', $redirect_url);
$this->assign('member_id', $member_id);

然后在html中(js)判断有没有用户登录  如果没登录则调用登录的接口:

$(function () {
        var member_id = "{$member_id}";
        var redirect_url = "{$redirect_url}";
        var appid = "{$appid}";
        if (member_id == '') {
            location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+ appid +"&redirect_uri="+redirect_url+"&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
        } else {
            console.log("1111");
        }
    });

在tp5的公共目录下  oauth2.php中添加:

<?php
/*$appid = "wx00c377108b19ac45";
$appsecret = "35b539eeec128dcb6a1011783386b47e";*/

use think\Db;

$setting = Db::table('setting')->find(1);

$appid = $setting['appid'];
$appsecret = $setting['appsecret'];
if (isset($_GET['code'])){
    $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecret."&code=".$_GET['code']."&grant_type=authorization_code";
    $str = file_get_contents($url);
    $arr = json_decode($str,true);
    $unionid = $arr['unionid'];
    $openid = $arr['openid'];
    if (!empty($_GET['reurl'])) {
        @header('location: /wap/Login/wx_login?openid=' . $openid . '&reurl=' . $_GET['reurl']);
    } else {
        @header('location: /wap/Login/wx_login?openid=' . $openid);
    }
}

然后在login控制器中:

 public function wx_login()
    {
        $setting = Db::table('setting')->find(1);
        $appid = $setting['appid'];
        $appsecret = $setting['appsecret'];
        $url_goods = Cookie::get('url');
        $redirect_url = urlencode('http://hz.huituhb.com/wap/login/wx_login');
        if (isset($_GET['code'])) {
            $code = $_GET['code'];
            $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $appsecret . "&code=" . $code . "&grant_type=authorization_code";
            $str = file_get_contents($url);
            $arr1 = json_decode($str, true);
            if(empty($arr1['openid'])){
                header("Location: https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=".$redirect_url."&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect");
                exit;
            }
            $openid = $arr1['openid'];
            $access_token = $arr1['access_token'];
        }

        $url_user = "https://api.weixin.qq.com/sns/userinfo?access_token=" . $access_token . "&openid=" . $openid . "&lang=zh_CN";
        $data = file_get_contents($url_user);
        $data = json_decode($data, true);
        $result = $this->checklogin($openid);

        if ($result) {
            echo "<script>window.location.href='$url_goods'</script>";
        } else {
            $arr = array();
            $arr["openid"] = $openid;
            $arr["nickname"] = $data['nickname'];
            $arr["sex"] = $data['sex'];
            $arr["add_time"] = time();
            //添加用户信息
            $member_id = Db::table("member")->insertGetId($arr);
           
            if ($member_id) {
                //头像处理
                $target = $_SERVER['DOCUMENT_ROOT'] . "/uploads/wap/avatar/avatar_$member_id.jpg";
                $url = $data['headimgurl'];
                $ch = curl_init();
                $httpheader = array(
                    'Host' => 'wx.qlogo.cn',
                    'Connection' => 'keep-alive',
                    'Pragma' => 'no-cache',
                    'Cache-Control' => 'no-cache',
                    'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8',
                    'User-Agent' => 'Mozilla/5.0 (windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36',
                    'Accept-Encoding' => 'gzip, deflate, sdch',
                    'Accept-Language' => 'zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4'
                );
                $options = array(
                    CURLOPT_HTTPHEADER => $httpheader,
                    CURLOPT_URL => $url,
                    CURLOPT_TIMEOUT => 5,
                    CURLOPT_FOLLOWLOCATION => 1,
                    CURLOPT_RETURNTRANSFER => true
                );
                curl_setopt_array($ch, $options);
                $result1 = curl_exec($ch);
                curl_close($ch);
                file_put_contents($target, $result1);

                if (is_writable($target)) {
                    $avatar = 1;
                } else {
                    $avatar = 0;
                }

                if ($avatar) {
                    $head_portrait = "avatar_$member_id.jpg";
                    Db::table('member')->where("member_id='$member_id'")->update(["member_img" => $head_portrait]);
                }
            }
            cookie('member_id', $member_id, 24 * 3600);
            echo "<script>window.location.href='$url_goods'</script>";
        }
    }

    /* 判断openID是否存在 */
    private function checklogin($openid)
    {
        $member = Db::table('member')->where("openid='$openid'")->find();
        if (empty($member)) {
            return false;
        } else {
            Cookie::set('member_id', $member['member_id']);
            return true;
        }
    }

完成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值