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

微信现在开放了第三方授权登录的功能,所以折腾一下ecshop,除了新浪围脖和腾讯围脖外再加一个微信扫码登录功能。在这篇文章开始,tiandi先说明一些概念,否则将会因为开发文档描述的混乱,而将自己弄得很搞很搞,因为腾讯的个别客服实在是有点垃圾,见《尼妹的腾讯客服1007,你是脑残还是文盲》,单个的开发文档还OK,但是从整体来看,就拿酸橘子来说,已经有了认证的订阅号,服务号,这就两个appid了,为了这个扫码登录功能,还得到open.weixin.qq.com再申请一个appID,而且申请appid的账号还不能用申请过别的服务账号,另外到处都是API,到处都是token。

各种概念

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是一致的。

您可以登录www.suanjuzi.com查看实际效果。
微信第三方授权登录ecshop

核心代码实现

当然要改的代码不只user.php,还有很多,比如模板文件,第三方接口文件,这些都比较简单,tiandi就不说了,这里只说核心的部分。
在user.php下查找if ($action == ‘default’),将其改成elseif ($action == ‘default’),并在之上插入以下代码:

//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('用户名和密码不正确,绑定失败!');

}

转载于:http://www.tiandiyoyo.com/2014/12/how-to-login-wechat-id-on-ecshop/





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言 3 一、商圈和地区进行关联 4 二、其他页面显示购买记录的函数 5 三、多货币解决方案 6 四、仿淘宝商品详细页实现尺码颜色关联显示库存 12 五、仿淘宝商品详细页加入购物车效果 14 六、ecshop加入购物车效果(各个页面) 22 七、商品列表页面“喜欢“ 功能实现 29 八、商品列表也显示获赠消费积分 32 九、分析 ecshop 里的$GLOBALS 37 十、解决 选择属性 直接就是属性价格不需要在原价基础上加价 38 十一、商品详细页下载商品介绍相关图片 39 十二、实现后台二次开发后功能模块仍然可以分配权限 41 十三、ecshop调用bbs数据 42 十四、整理了一个 获取用户等级的函数 43 十五、商品页显示具体属性排序 44 十六、解决ecshop新建页面分页问题 49 十七、刚修改的伪静态分类URL 52 十八、ecshop批发销售 66 十九、网银支付直通插件 实现方法 69 二十、商品列表页多图切换的实现 75 二十一、完善论坛发布的qq登录插件 77 二十二、倒计时代码 78 二十三、关于ecshop回调函数应用 83 二十四、商品内容页加订单留言功能分析 84 二十五、有关商品详细页是常规显示还是显示宣传页的实现方法 85 二十六、后台添加搜索功能讲解 87 二十七、分享ec搜索出现相关商品的效果滑动效果(模仿百度) 88 二十八、修改注册发送邮件(更新) 94 二十九、新增加一调用编辑器函数 97 三十、简单实现 各个页面都可显示友情链接 97 三十一、Ecshop系统框架分析 99 三十二、二次开发技术共享 后台邮件群发共享 100 三十三、ecshop内页调用友情链接 100 三十四、项目要求在后台商品分类添加图片的功能。 102 三十五、分类按照拼音第一字母排序显示实现 102 三十六、获取分类的一级分类和二级分类 106 三十七、如何调用解决列表的购买数量 107 三十八、详情页调评论次数 108 三十九、关于购买数量 订单数量 109 四十、Ecshop ajax应用讨论 109 四十一、调用当前分类或当前分类的下级分类函数 115 四十二、在商品列表显示购买记录 118 四十三、ajax更新购物车数量 118 四十四、PHP导出excle数据 123 四十五、页面多倒计时显示最新修改 125 四十六、关于lbi文件控制原理分析 129 四十七、页面浏览历史图片调用分析 130
一、prometheus简介 Prometheus是一个开源的系统监控和告警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF维护管理的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,prometheus支持多种exporter采集数据,还支持通过pushgateway进行数据上报,Prometheus再性能上可支撑上万台规模的集群。 二、prometheus架构图 三、prometheus组件介绍 1.Prometheus Server: 用于收集和存储时间序列数据。 2.Client Library: 客户端库,检测应用程序代码,当Prometheus抓取实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的当前状态发送到prometheus server端。 3.Exporters: prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端 4.Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉, slack等。 5.Grafana:监控仪表盘 6.pushgateway: 各个目标主机可上报数据到pushgatewy,然后prometheus server统一从pushgateway拉取数据。 四、课程亮点 五、效果图展示 六、讲师简介 先超(lucky):高级运维工程师、资深DevOps工程师,在互联网上市公司拥有多年一线运维经验,主导过亿级pv项目的架构设计和运维工作 主要研究方向: 1.云计算方向:容器 (kubernetes、docker),虚拟化(kvm、Vmware vSphere),微服务(istio),PaaS(openshift),IaaS(openstack)等2.系统/运维方向:linux系统下的常用组件(nginx,tomcat,elasticsearch,zookeeper,kafka等),DevOps(Jenkins+gitlab+sonarqube+nexus+k8s),CI/CD,监控(zabbix、prometheus、falcon)等 七、课程大纲

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值