微信扫码登录和登录以后的处理

2019-03-07  本文已影响0人  Sune小叶子

微信登陆时前端展示二维码的方式(两种)

1.前端采用js实例化一个二维码嵌入我们的HTML元素中(可以自定义样式)
2.向后台发请求返回一个链接,这个链接指向二维码的扫描页面(不好修改样式)

前端采用js实例化一个二维码
//在<head>标签内添加如下js文件
 <script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
//id为login_container的DOM元素,用来包含二维码
<div id="login_container"></div>
//最后在$(document).ready()内进行实例化
$(document).ready(function()
{
    var obj = new WxLogin
    ({
        id : "login_container", //div的id
        appid :  "你的appid",
        scope :  "snsapi_login", //写死的字符串
        redirect_uri : encodeURI("你的处理扫码事件的方法") ,
        state :  "",
        style :  "black", //二维码黑白风格        
        href :  "https: //某个域名下的css文件,来定义样式"
    });
});

注意:redirect_uri的值如果你们后台已经给你转过码就不需要使用encodeURI方法来转码了,直接写你们后台返给你的值就好,当然如果encodeURI()方法不管用你可以试试encodeURIComponent()方法来进行转码

这种方式生成的二维码,扫描以后,后台会配置一个重定向的地址,这些你可以和你们后台人员协商看怎么处理

向后台发请求返回一个链接

这种方式就是我们可以在点击事件的时候触发请求,然后得到后台返回的链接地址,但是想要展示二维码,我们可以使用window.open来打开这个链接指向的二维码地址,并且在新开的窗口监听self.close()事件,然后使用一个setInterval在父级页面监听新开的窗口的关闭事件来进行对应操作

  //在项目里面的点击事件,里面
  myClick(){
       //定义一个windowObj 对象
      let windowObj = null;

      ajax({
            ....
            success(res , data){
                  //采用window.open新打开一个窗口,data就是你们后台返回给你的链接
                  windowObj = window.open(data, "_blank", "height=560,width=550, top=50,left=200");
            }
      })

      //采用延时器做轮询,监听新开页面的self.close()事件
      let loop = setInterval(function() {     
            if(windowObj  != null && windowObj.closed) {    
                clearInterval(loop);    
                //do something 在这里执行回调,做你自己想要做的操作,比如重新发ajax请求其他参数等等
                
        }, 800); 
  }

新开的子页面,这个子页面就是一个二维码,当扫码成功以后,子页面会跳转到你们后台重定向的你的前端写好的html页面(一般用来提示用户扫描登录成功),你就需要在这个页面里面写上你的self.close();方法,这样子父页面的轮询才会监听到,当然你不写这个方法,你直接点关闭窗口轮询也会检测到子窗口关闭了,只不过这种自动关闭省得用户自己动手操作啦

        <div id="time" class="close_bind_success_tips"></div>
<script>           
            let closeWin = setInterval("clock()",1000);
            var num = 2;
            function clock(){
                document.getElementById("time").innerHTML = num + " 秒以后将关闭本窗口 !!!";
                if (num > 0) {
                    num--
                } else {
                    //重点是这个方法,在父页面里面会监听到这个方法
                    self.close();
                    clearInterval(closeWin);
                }
            }
        // })
    </script>
上一篇下一篇

猜你喜欢

热点阅读