首先写一个链接 并判断当前页面是否登录过(目前是商品控制器)
$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;
}
}
完成!