uni-app之APP和小程序微信受权

uni-app 介绍

uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架。
适用平台:Android、iOS、微信小程序。实现了一套代码,同时发布到Android、iOS、微信小程序。
参考官方:https://uniapp.dcloud.io/html

APP微信受权

检测服务商

检测手机上是否安装微信、QQ、新浪微博等。前端

uni.getProvider({
    service: 'oauth',
    success: function (res) {
        console.log(res.provider);
    }
});

在这里插入图片描述

受权登陆

获取openid,(unionid)等
uni.login({
   provider: 'weixin',
   success: function (loginRes) {
       console.log(JSON.stringify(loginRes));
   }
});

获取用户信息

uni.getUserInfo({
	provider: 'weixin',
	success: function(infoRes) {
		console.log('-------获取微信用户全部-----')
		console.log(JSON.stringify(infoRes.userInfo));
	}
});

示例代码

<!-- #ifdef APP-PLUS -->
<button class="" @click="appLogin">APP微信受权登陆</button>
<!-- #endif -->
		
appLogin: function() {
	uni.getProvider({
		service: 'oauth',
		success: function(res) {
			console.log(res.provider);
			//支持微信、qq和微博等
			if (~res.provider.indexOf('weixin')) {
				uni.login({
					provider: 'weixin',
					success: function(loginRes) {
						console.log('-------获取openid(unionid)-----');
						console.log(JSON.stringify(loginRes));
						// 获取用户信息
						uni.getUserInfo({
							provider: 'weixin',
							success: function(infoRes) {
								console.log('-------获取微信用户全部-----');
								console.log(JSON.stringify(infoRes.userInfo));
							}
						});
					}
				});
			}
		}
	});
},

小程序微信受权

获取用户基本信息

为优化用户体验,使用 wx.getUserInfo 接口直接弹出受权框的开发方式将逐步再也不支持。从2018年4月30日开始,小程序与小游戏的体验版、开发版调用 wx.getUserInfo 接口,将没法弹出受权询问框,默认调用失败。正式版暂不受影响。开发者可以使用如下方式获取或展现用户信息。
小程序使用 button 组件,并将 open-type 指定为 getUserInfo 类型,获取用户基本信息。
参考官方:https://developers.weixin.qq.com/miniprogram/dev/component/button.html
示例代码:web

<!-- #ifdef MP-WEIXIN -->
<button class="" open-type="getUserInfo" @getuserinfo="wxGetUserInfo" withCredentials="true">微信受权获取用户信息</button>
<!-- #endif -->

wxGetUserInfo:function(res){
	if (!res.detail.iv) {
		uni.showToast({
			title: "您取消了受权,登陆失败",
			icon: "none"
		});
		return false;
	}
	console.log('-------用户受权,并获取用户基本信息和加密数据------')
	console.log(res.detail);
},

微信登陆

参考官方:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
(1)页面uni.login获取code
(2)后端经过code获取sessionKey、openid(unionid)等,后端调用接口以下:
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
(3)示例代码小程序

<!-- #ifdef MP-WEIXIN -->
<button class="" @click="wxLogin">微信登陆</button>
<!-- #endif -->

wxLogin: function() {
	uni.login({
		provider: 'weixin',
		success: function(loginRes) {
			console.log('-------获取code-------')
			console.log(loginRes.code);
			wx.request({
				url: 'https://xxxxx'+loginRes.code,
				success: function(info) {
					console.log('-------获取sessionKey、openid(unionid)-------')
					console.log(info);
				},
				fail: function(e) {
					console.log(e)
				}
			})
		}
	});
}

微信登陆状态监测

<!-- #ifdef MP-WEIXIN -->
<button class="" @click="checkLogin">微信登陆检测</button>
<!-- #endif -->

checkLogin: function() {
	wx.checkSession({
		success() {
			console.log('ok');
			// session_key 未过时,而且在本生命周期一直有效
		},
		fail() {
			// session_key 已经失效,须要从新执行登陆流程
			//wx.login() // 从新登陆
			console.log('expire');
		}
	})
},