博客列表 >微信,支付宝扫码登录原理

微信,支付宝扫码登录原理

盼盼love的博客
盼盼love的博客原创
2019年01月24日 18:29:201431浏览

微信与支付宝的扫码登录是有一些区别的,微信目前是一个持续27s的长连接请求;而支付宝是持续循环的短连接请求。其实原理是一样的。




首先,前端调用二维码接口,获取图片二维码以及用户唯一表示uid,然后与服务器建立长连接请求,询问是否有用户扫码登录。


用户用APP扫码之后,会请求服务器接口,将用户信息与二维码的uid绑定,前端的长连接就可以请求到当前uid对应的用户,从而进行登录操作。




前端的长连接请求类似以下代码:


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<script src="http://code.jquery.com/jquery-latest.js"></script>

<body>

    <div id="divCon">

        <img src="" id="QrCodeImg" />

    </div>

</body>

<script type="text/javascript">

    $(document).ready(function() {

        var uuid = 131422035;

        function validateLogin(){

            $.get("/walletadminV2/api/testServlet/testLogin?uuid=" + uuid , function(data, status) {

                if(data == ""){

                    validateLogin();

                }else{

                    var obj = eval("(" + data + ")");

                    alert("登录成功了:" + obj.uname);

                }

            });

        }

        

        validateLogin();

    });

</script>

</html>


微信后台代码类似:


public class TestLogin extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doPost(request, response);

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String uid = request.getParameter("uid");

        String jsonStr = "";

        System.out.println("in");

        System.out.println("uid:" + uid);

        long inTime = new Date().getTime();

        Boolean bool = true;

        while (bool) {

            try {

                Thread.sleep(1000);

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

            //检测登录

            可以用Redis来实现登录检测

            if(userVo != null){

                bool = false;

               ...

            }else{

                if(new Date().getTime() - inTime > 5000){

                    bool = false;

                }

            }

        }

        System.out.println("login ok : " + jsonStr);

        PrintWriter out = response.getWriter();

        out.print(jsonStr);

        out.flush();

        out.close();

    }

}



获取登录二维码以及uid的接口,已经APP端确认登录的接口比较简单,就不提供了。大致思路就是以上这样。





PHP 支付宝PC扫码支付开发流程

1405


对于支付宝支付的开发,尽管官网文档描述的已经比较清楚了,但还是有像我这样的ruoji仍然还是不会。。。。今天好好的摸索了一天,在这里分享记录了一下。小白一个,写的不对的地方请指出批评,反之我也不会改~... 来自: asdlow

 


手机扫一扫登录原理


原文:https://blog.csdn.net/nbskycity/article/details/53064432 

版权声明:本文为博主原创文章,转载请附上博文链接!


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议