微信内页面调用微信登录

版权声明:欢迎指正文章中的错误!有疑问者请直接评论,不要私信~ https://blog.csdn.net/sdjianfei/article/details/78952433

学了PHP 之后头一次做微信登录,步骤记下来谨防忘记,大家尽管参考,有问题评论 。
在微信内第三方页面进行登录,在公众平台内称为:网页授权,文档位于https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

前提:服务号已认证,开通了网页授权接口的权限 (插眼https://mp.weixin.qq.com/advanced/advanced?action=table&token=829646975&lang=zh_CN);

操作:
1、服务号后台设置回调地址(传送门 https://mp.weixin.qq.com/cgi-bin/settingpage?t=setting/function&action=function&token=829646975&lang=zh_CN),将 “网页授权域名
”的值改为已经备案的该服务号的域名主机即可;
2、项目中代码:(原作者不详 ,我是拷贝的同事的代码)
//获取微信授权网址
redirect_uri 是成功登陆后您要返回的具体页面 主机必须是第一步里填写的主机
$state 参数

public function get_authorize_url()
{
    $authorize_url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $this->appId . '&redirect_uri=' . $this->redirect_uri . '&response_type=code&scope=snsapi_userinfo&state=' . time() . '#wechat_redirect';
    $this->redirect($authorize_url);
    //return $authorize_url;
}

/**
 * 根据code获取授权toke
 *
 * @param  $parameters
 */
public function get_access_token($code)
{
    $token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $this->appId . '&secret=' . $this->appSecret . '&code=' . $code . '&grant_type=authorization_code';
    $res = $this->https_request($token_url);
    $res = json_decode($res, true);
    //返回一个对象
    session('z_openid', $res['openid']);

    $result = $this->get_userinfo($res['access_token'], $res['openid']);
    //获取用户id

    $user_id = $this->check_user($result);
    session('z_user_id', $user_id);
    $this->redirect(url('Index/User'));
    //var_dump($user_id);

    // return json_decode($res);
}


public function check_user($result)
{
    //用户是否存在
    $exist_user = db('*****')->where('****', '=', $result->unionid)->find();
    if (!empty($exist_user)) {
        $user_id = $exist_user['****'];
    } else {
        if ($result->sex == 1) {
            $sex = '男';
        } else if ($result->sex == 2) {
            $sex = '女';
        } else {
            $sex = '0';
        }

        $data = [

// ‘invite_code’ => $invite_code,
**’ => $result->nickname,
**’ => $sex,
**’ => $result->headimgurl,
**’ => $result->unionid,
**’ => time()
];
db(‘u****o’)->insert(data);one_info = db('u****')->where('u****d', '=', result>unionid)>find();user_id = one_info[‘i****’];  
        }  
        return
user_id;
}

public function get_userinfo($access_token, $oppenid)
{
    $info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token . '&openid=' . $oppenid;
    $res = $this->https_request($info_url);
    //var_dump($res);
    return json_decode($res);
}

/**
 * https请求
 * @param  $url  请求网址
 */
public function https_request($url, $data = null)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($data)) {
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}

在模板里 微信登录按钮只需要调用 get_authorize_url 函数 即可搞定,然后那些详细的业务,就自行添加吧,

展开阅读全文

没有更多推荐了,返回首页