uniapp小程序-微信登录流程

310 阅读1分钟
微信授权:这一步获取到code的
获取用户信息:获取微信用户的信息userinfo(头像,昵称等)
发送请求:将第一步获取到的code和第二步的用户信息发送请求
//在wxLogin.js文件写三个微信授权 获取用户信息 发送请求三个函数//1.微信授权[uni.login()]

function wxMiniLogin(onSuccess, onFail, onComplete) {
	uni.login({
		provider: 'weixin',
		scopes: '', //支付宝需要
		timeout: 5000,
		success: (res) => {
			if (onSuccess) {
				onSuccess(res)
			}
		},
		fail: () => {
			if (onFail) {
				onFail()
			}
		},
		complete: () => {
			if (onComplete) {
				onComplete()
			}
		}
	})
}

//2.获取用户信息[uni.getUserInfo()]

function getUserInfo(onSuccess, onFail, onComplete) {
	uni.getUserInfo({
		provider: true,
		withCredentials: true,
		lang: 'zh_CN',
		timeout: 5000,
		success: (res) => {
			if (onSuccess) {
				onSuccess(res)
			}
		},
		fail: () => {
			if (onFail) {
				onFail()
			}
		},
		complete: () => {
			if (onComplete) {
				onComplete()
			}
		}
	})
}

//3 将获取用户信息到的数据传给后端
function pveLogin(obj,onSuccess) {
	let url = $memberAPI.WX_LOGIN;
	HTTP.request(url, HTTP.Method.POST, obj, (res) => { //成功
		STORE.setUserInfo(res.data) //存储用户信息
		if(onSuccess){
			onSuccess(res)
		}	
	}, () => { //失败

	}, () => { //完成
	})
}

在vue页面中
WxLogin.wxMiniLogin((res) => { //调用微信授权方法
	this.loginCode = res.code //获取到code
	WxLogin.getUserInfo((info) => { //调用获取用户信息方法
		this.pveLogin(info) //j将用户信息传给pveLogin()方法
	}, () => {
		uni.hideLoading()
	})
	}, () => {
		uni.hideLoading()
		uni.showToast({
			title: '微信登录失败',
			icon: 'none'
		})
})

在this.pveLogin(info) 方法中
		pveLogin(info) {
		    if (info.encryptedData) { //这一步是否同意获取用户的信息
		          let obj = {}
			  obj.code = this.loginCode //微信授权的code
			  obj.encryptedData = info.encryptedData
			  obj.iv = info.iv
			  obj.rawData = info.rawData
			  obj.signature = info.signature
			  WxLogin.pveLogin(obj, (res) => { //传递参数过去,发起请求
				uni.showToast({
					title: '微信登录成功',
					icon: 'none'
				})
					this.checkPass()
					uni.hideLoading();
				}, () => { //失败
					console.log("拒绝授权")
					uni.hideLoading();

				}, () => {
					uni.hideLoading()
					})
				} else {
					uni.hideLoading()
					uni.showToast({
						title: '微信登录失败',
						icon: 'none'
					})
				}
			}