广州传奇网络

地址:广州市天河区东圃大马路富华楼C座

电话:13808825895

邮箱:gz020wbs@163.com

QQ:1564443073

网址:http://www.020wbs.com/

首页 > 二次开发Ecshop二次开发 > ECSHOP实现第三方扫码授权微信登录

二次开发Ecshop二次开发

二次开发Ecshop二次开发

ECSHOP实现第三方扫码授权微信登录

 一、ECSHOP微信登录各种概念

 
1. 微信公众号开发平台,指的是mp.weixin.qq.com,也是公众号管理的平台,里面有一个开发者中心,开启后,才可以制作和自己网站有联系的功能,例如调用网站的用户信息等。
2. 微信公众号开发者appid,这个是在微信公众号里的开发者中心里提申请的,申请通过后会得到appid和appsecret。
PS:以上两个东西初看和微信第三方登录没有半毛关系,仔细看一下还是没有半毛关系,但是尼妹的最后运用的时候却和第三方授权登录有着紧密不可分的基友关系。
3. 微信开放平台,指的是open.weixin.qq.com,第三方授权登录就是在这里申请的,同样会给一个appid和appsecret。
4. 目前只有PC端上的扫码授权登录接口功能,以及APP类的授权登录,并没有WAP手机网站的微信授权登录。
5. 手机上只能做微信浏览器里的授权登录,即需要用到1,2里的appid。但是此时的openid和PC端扫码得到的openid完全不一样,需要用unionid机制进行绑定
6.unionid机制绑定是通过微信开放平台里绑定公众号来实现的,这时用户的openid虽然不一样,但是unionid会变成同一个,也就是同一个开放账号下的应用APPID+绑定的公众号开发者中心APPID虽然不一样,但是unionid是一致的。
 
二、ECSHOP微信登录核心代码
 
//by tiandi 处理微信登录
if(isset($_REQUEST['code'])&&isset($_REQUEST['state'])){
include_once(ROOT_PATH . 'includes/website/jntoo.php');
$c = &website('wechat');
if($c) {
if(!DO_CHECK($_REQUEST['state'])) {  //state判断方式,自己写方法
show_message('非法访问或请求超时!' , '首页',$ecs->url() , 'error');
}
$access = $c->Code2Token($_REQUEST['code']);
if(!$access)
show_message('非法访问或请求超时!' , '首页',$ecs->url() , 'error');
$access = $c->GetRefreshToken($access['refresh_token']);
if(!$access)
show_message('非法访问或请求超时!' , '首页',$ecs->url() , 'error');
$info = $c->Getinfo($access['access_token'],$access['openid']);
if(!$info)
show_message('非法访问或请求超时!' , '首页',$ecs->url() , 'error');
                //获取微信传递过来的微信用户信息
$nickname = $info['nickname'];
$sex = $info['sex'];
$openid = $info['openid'];
$headimgurl = $info['headimgurl'];
$unionid = $info['unionid'];

$info_user_id = 'wx_'.$info['unionid']; 
if(!$info['openid'])
show_message($c->get_error() , '首页' , $ecs->url() , 'error' , false);
$sql = 'SELECT user_name,password,aite_id FROM '.$ecs->table('users').' WHERE aite_id = "'.$info_user_id.'" or wxid = "'.$openid.'"';
$count = $db->getAll($sql);

if(!$count)   
{ //如果没有记录,则新建微信用户并提示绑定
$smarty->assign('wechatid', $info_user_id);
$smarty->assign('openid', $openid);
$smarty->assign('wx_name', $nickname);
$smarty->assign('headimg', $headimgurl);
$smarty->assign('action', 'wechat_ready');
$smarty->display('user_passport.dwt');
}
else
//如果没有信息
        for($i=0;$i<count($count);$i++) {
if($count[$i]['aite_id'] == $info_user_id) {
$user_name = $count[$i]['user_name'];
break;
}
else
{
$sql = 'UPDATE '.$ecs->table('users')." SET aite_id = '$info_user_id' WHERE user_id = '$count[$i][user_id]'";
$db->query($sql);
$user_name = $count[$i]['user_name'];
break;
}
}
}

$user->set_session($user_name);
$user->set_cookie($user_name);
update_user_info();
recalculate_price();
show_message($_LANG['login_success'] . $ucdata , array($_LANG['back_up_page'], $_LANG['profile_lnk']), array('index.php','user.php'), 'info');
}
else 
show_message('服务器尚未注册该插件!' , '首页',$ecs->url() , 'error');
}
/* by tiandi 微信绑定用户 */
elseif($action == 'wechatbd') {
if(isset($_REQUEST['wechatid']) && $_REQUEST['wechatid'] != '')
$wechatid = mysql_real_escape_string($_REQUEST['wechatid']);
if(isset($_REQUEST['openid']) && $_REQUEST['openid'] != '')
$wechatid = mysql_real_escape_string($_REQUEST['openid']);
if(isset($_REQUEST['username']) && $_REQUEST['username'] != '')
$username = mysql_real_escape_string($_REQUEST['username']);
if(isset($_REQUEST['password']) && $_REQUEST['password'] != '')
$password = mysql_real_escape_string($_REQUEST['password']);
if(isset($_REQUEST['wx_name']) && $_REQUEST['wx_name'] != '')
$wx_name = mysql_real_escape_string($_REQUEST['wx_name']);
if(isset($_REQUEST['headimg']) && $_REQUEST['headimg'] != '')
$headimg = mysql_real_escape_string($_REQUEST['headimg']);
//用户不绑定账号
if(!$wechatid || !$username || !$password) {
$username = GET_USERNAME; //用户名获取方式,自己写方法
$password = GET_PASSWORD; //密码获取方式,自己写方法
$sql = 'INSERT INTO '.$ecs->table('users').'(user_name , password, nickname,aite_id ,reg_time , user_rank , is_validated, wxid, headimg) VALUES '.
"('$username' , '$password' , '$wx_name' ,'$wechatid' , '".gmtime()."' , '99' , '0' , '$openid' , '$headimg')" ;
$db->query($sql);

$sql = "INSERT INTO `wxch_user` (`subscribe`, `wxid` , `dateline`) VALUES ('1','$openid','$time')";
$db->query($sql);

$user->set_session($username);
$user->set_cookie($username);
update_user_info();
recalculate_price();
show_message($_LANG['login_success'] . $ucdata , array($_LANG['back_up_page'], $_LANG['profile_lnk']), array($back_act,'user.php'), 'info');
}
//用户绑定账号
if ($user->login($username, $password,isset($_POST['remember'])))
{
//不考虑用户是否已经绑定过微信
$sql = "UPDATE ".$ecs->table('users')." SET aite_id = '$wechatid' ,headimg = '$headimg' ,wxid = '$openid', wxch_bd = 'ok' WHERE user_name = '$username'";
$db->query($sql);
show_message('已经成功的将您的微信号与'.$username.'绑定!' , array($_LANG['back_up_page'], $_LANG['profile_lnk']), array($back_act,'user.php'), 'info');
}
show_message('用户名和密码不正确,绑定失败!');

}