api.WechatAuth.php 1.73 KB
<?php
    /**
     * 登录逻辑,获取用户openid,用于锁定唯一的用户身份
     */
    include "Common/JsonResponse.php";
    include "Common/mysqlHelper.php";
    include "Common/WechatHelper.php";
    include "Common/Encrypter.php";

    $wechar = new WechatHelper();
    // 查看是否有cookie
    if (isset($_COOKIE['openid'])) {
        $enctypt = new Encrypter();
        $openid = $enctypt->decrypt($_COOKIE['openid']);
        $mysql = new mysqlHelper();
        $data = $mysql->fetch('select * from user where openid=?',[$openid]);
        if ($data) {
            header('location:' . $wechar->IndexPageURL());
        }
    } else {
        // 本地没有记录,去微信获取openid
        if (!isset($_GET['code'])) {
            // 获取openid先获取code
            $appid = WechatHelper::APPID;
            $redirect_uri=urlencode($wechar->curPageURL());
            $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);
        } else {
            // 获取openid
            $openid = $wechar->getOpenid($_GET['code']);
            // openid写入数据库
            $mysql = new mysqlHelper();
            $data = $mysql->fetch('select * from user where openid=?',[$openid]);
            if (!$data) {
                $mysql->insert('user', ['openid' => $openid, 'created' => time() ]);
            }
            
            // openid加密写入cookie
            $enctypt = new Encrypter();
            setcookie("openid",$enctypt->encrypt($openid),time()+3600*24, '/', $_SERVER["SERVER_NAME"]);
            header('location:' . $wechar->IndexPageURL());
        }
    }