微信与支付宝的扫码登录是有一些区别的,微信目前是一个持续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
版权声明:本文为博主原创文章,转载请附上博文链接!