H5微信登录

本文主要介绍前端微信登录获取用户信息的业务逻辑

一、业务实现
1.1判断当前用户是否登录

如果有,证明当前用户已登录,返回主页面

1.2判断当前是否有code
1.2.1如果有,调用调用后端接口,返回用户基本信息,同1.1
1.2.2如果无,调用微信api获取code,获取到code在调用用后端接口,同1.2.1
二、代码如下(vue.js写法)

index.js

init:function() {
	if(vm.getRequest().code!=undefined){ // 判断是否是授权请求
		vm.getOpenid(vm.getRequest().code, app.codeUrl);
	} else {
		userInfo = JSON.parse(app.getItem(app.localKey.userInfo));  // 获取本地用户缓存(封装)
		if(!userInfo){  // 判断用户是否已登录
			vm.getCode();
			return;
		}
		app.go("loginMain");  // 跳转登录页(封装)
	}
},
getCode: function() { // 获取code
	param = JSON.parse(app.getItem(app.localKey.param));
	if (!param) {
		param = {}
	}
	param.loginBack = 'loginMain.html'; // 缓存登录页,获取code成功后返回用户登录页进行数据绑定
	app.setItem(app.localKey.param, JSON.stringify(param)); // 设置本地缓存
	vm.redirect_uri = window.location.origin + app.sld + "view/index.html"; // 微信api请求回调地址
	wxApi.getCode(vm.appid, vm.urlencode(vm.redirect_uri)); // 微信api获取code
},
getRequest:function () {  //获取url的参数
  var url = location.search; //获取url中"?"符后的字串  
   var theRequest = new Object();  
   if (url.indexOf("?") != -1) {  
      var str = url.substr(1);  
      strs = str.split("&");  
      for(var i = 0; i < strs.length; i ++) {  
         theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);  
      }  
   }  
   return theRequest;  
},
getOpenid: function(code, codeUrl) {  // 获取用户星星
	wxApi.getOpenid(code, codeUrl);  // 封装的wxApi的JS
},			
urlencode: function(str) { // urlencode转码 防止url乱码
	str = (str + '').toString();
	return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
	replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
},

wxapi.js

(function($, window) {
	window.wxApi = {
		getCode: function(appid, redirect_uri) {  // 获取code
			var url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + redirect_uri +
				"&response_type=code" + "&scope=snsapi_userinfo" + "&state=STATE#wechat_redirect";
			window.location.replace(url);
		},
		getOpenid: function(code, codeUrl) {  // 接口请求,获取用户信息
			var url = codeUrl + "weChat?code=" + code;
			$.ajax({
				type: 'GET',
				url: url,
				timeout: app.timeout,
				dataType: "json",
				success: function(r) {
					app.setItem(app.localKey.userInfo, JSON.stringify(r));
					param = JSON.parse(app.getItem(app.localKey.param));
					if (param.loginBack) {
						window.location.replace(param.loginBack);
					}
				},
				error: function(xhr, type, errorThrown) {
					$.toast(app.ajaxErrorTip);
				}
			});
		}

	}
})(mui, window);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值