边说逻辑边贴出代码吧还是!
1.数据库设计:
id nickname state ticket openid 主要看下后三个字段
1 wlphp 0 *** djsfj
2.客户端每隔1秒发送post请求一旦返回1页面跳转登陆成功:
获取ticket代码请看上篇文章:基于微信开发生成带参数的二维码的讲解
<script src="http://libs.baidu.com/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
<script>
var ticket="<?php echo $ticket?>";
setInterval("wlphp()",1000); //每隔一秒去post给服务端
function wlphp(){
$.post("wlphp.php",{ticket:ticket},function (data){
if(data==1){
window.location.href="https://www.wlphp.com";
}
});
}
</script>
3.用户用微信扫描二维码的时候我们会收到
<ToUserName>gh_eb6940eed***</ToUserName> <FromUserName>ofRsxuGNUpSuCBQVEF6YmbQ2y7dg</FromUserName> <CreateTime>1445757243</CreateTime> <MsgType>event</MsgType> <Event>SCAN</Event> <EventKey>123</EventKey> <Ticket>gQH57zoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL3JrT0FPeG5tNjdhU3c5ZWpzRzI1AAIEAH8sVgMEgDoJAA==</Ticket>
这样子一个xml 我们需要做两件事情:
第一步操作数据库:把该xml解析成数组 FromUserName 判断数据库openid 有没有这个,若果没有insert语句:
insert into user (nickname,state,openid,ticket) values ('自己获取','0','从xml中获取','从xml中获取'),如果存在该openid了,说明该会员已经在系统中存在了对吧?更新下 update user set ticket='从xml中获取' where openid='从xml中获取'; ok
第二步给扫码用户推送消息: <a href='https://www.wlphp.com?openid=从xml获取的&ticket=从xml获取的'>您确定使用该微信账号登陆菜鸟博客吗?wlphp.com</a>
如果用户点击推送的a标签内容,执行操作 updtae user set state=1 where openid='' and ticket='' ;如果用户不点击则不执行任何操作
4.wlphp.php的代码:
$sql="select * from user where ticket='{$_POST['ticket']}' and state=1";
一旦该sql可以取出数据:
就 创建session['nickname']等 然后update这条数据ticket为空 state为0
返回1 然后前台轮询js就会跳转登陆