微信扫码登陆网站类似 58同城(基于微信开发生成带参数的二维码的讲解)

边说逻辑边贴出代码吧还是!


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就会跳转登陆



上一篇:linux 任务管理器(top ps)


下一篇:接口的幂等性设计和防重保证,详细分析幂等性的几种实现方法