uni-app 做微信一键授权登录

微信的授权规则总是在变,所以需要经常关注新消息!

之前的getUserInfo API和通过button的open-type获取都已经不支持了。

 所以就要用到另一个新的api来获取用户信息,getUserProfile。

 下面是我得示例:

 

var parames = {}
let types = 'weixin';
let that = this
uni.getUserProfile({     //获取用户信息
				desc:'登录',   //声明获取用户个人信息后的用途
				lang : 'zh_CN',    //指定返回用户信息的语言
				 success:(res)=>{
					var infos = res;
					if(!infos.userInfo.openId){   //判断参数中是否带有openid
						uni.login({            //没有就获取code
							provider: types,
							success: (loginRes) => {
								console.log("App获取用户信息成功",loginRes);
								wxLogin(loginRes.code).then(res=>{  //然后调取后台接口获取
									if(res.code==200){
										infos.userInfo.openId = res.data;
										parames = this.dealParams(types,infos);//生成参数调用接口注册用户
										that.loginWeixinData(parames);
									}else{
										setTimeout(()=>{
											uni.showToast({ title: res.desc?res.desc:'请求错误', icon: 'none' })
										},400)
									}
								})
							},
							fail:(err) => {
								uni.showToast({ title: '失败', icon:'none'})
							}
						})
					}else{   //有的话就直接生成参数调用接口注册用户
						parames = this.dealParams(types,infos)
						that.loginWeixinData(parames);
					}
				},
				fail:(err)=>{
					console.log(err);
				}
			})
//小程序一键登录
		loginWeixinData(data){
			loginByOpenId(data).then(res => {
				if(res.code==200){
					this.$util.setStorage('userinfo',JSON.stringify(res.data))
					if(res.data.token){
						this.$util.setStorage('token',res.data.token)
					}
					uni.navigateBack({ delta: 1 })
				}else{
					uni.showToast({ icon: 'none', title: res.desc?res.desc:'登录失败' })
				}
			})
		},
// 处理登录参数
		dealParams(type,data) {
			let params = {
				errMsg: '',
				code: 0,
				userInfo: {
					openId: '',
					nickName: '', // 昵称
					gender: '', // 性别
					city: '', // 城市
					province: '', // 省份
					country: '', // 国家
					avatarUrl: '', // 头像
					unionId: '', // 微信参数
					source: '', // 11 微信  12 微博  13 苹果登录
				}	
			}
			if(type=="apple"){
				params.userInfo.openId = data.user
				params.userInfo.nickName = data.email
				// params.userInfo.acessToken = data.identityToken
				params.userInfo.source = 13
			}else if(type=="weixin"){
				params.userInfo = data.userInfo
				params.userInfo.source = 11
			}
			console.log(params,'登录入参')
			return params
		}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值