uni-app开发微信小程序常见问题:uni.getUserProfile要怎么写?uni.login和uni.getUserProfile的顺序?

相信很多小伙伴之前用的接口是uni.getUserInfo来获取微信用户信息,但自4月13日起这个接口的返回参数不变,但开发者获取的userInfo为匿名信息

(详情:小程序接口调整说明)
uni-app开发微信小程序常见问题:uni.getUserProfile要怎么写?uni.login和uni.getUserProfile的顺序?_第1张图片

本人觉得这个更改虽然让接口的功能更加专注,但官方没有实现向下兼容,导致很多开发者需要费点心重新修改。

新版接口自那时起就新增uni.getUserProfile来获取用户信息,这让用户多了一个手动授权的步骤。

uni-app开发微信小程序常见问题:uni.getUserProfile要怎么写?uni.login和uni.getUserProfile的顺序?_第2张图片

弹窗授权截图↓
uni-app开发微信小程序常见问题:uni.getUserProfile要怎么写?uni.login和uni.getUserProfile的顺序?_第3张图片

目录

    • 一、uni.getUserProfile的必要参数
    • 二、uni.login和uni.getUserProfile的调用顺序

一、uni.getUserProfile的必要参数

使用前我们先来看看这个接口需要哪些参数

uni-app开发微信小程序常见问题:uni.getUserProfile要怎么写?uni.login和uni.getUserProfile的顺序?_第4张图片
重点留意的就是 descsuccess 这两个重要参数,千万不要忘了加 desc!!!

success回调函数中就可以写我们的ajax请求向后端传送加密信息和code和用户信息等内容

示例代码如↓

uni.getUserProfile({
     
	desc:'获取微信用户的昵称与头像',
	success:function(resp){
     
		let nickName = resp.userInfo.nickName;
		let avatarUrl = resp.userInfo.avatarUrl;
		//console.log(nickName);
		//console.log(avatarUrl);
		let data={
     
			nickname:nickName,
			photo:avatarUrl
		}
		uni.request({
     
			"url": url, 
			"method": "POST", 
			"header": {
      
				token: uni.getStorageSync('token') 
			},
			"data": data, 
			success: function(resp) {
     
				
			}
		});
	}								
})

二、uni.login和uni.getUserProfile的调用顺序

在实际开发的过程中,很多同学会选择在uni.login中包裹uni.getUserProfile,来保证获取code和获取的encryptedData顺序,从而避免解密失败

但实际上在调用uni.login获取code后,再调用uni.getUserProfile,可能会失败,触发fail函数,error msg: ''getUserProfile:fail can only be invoked by user TAP gesture"。所以正确的调用顺序是先调用uni.getUserProfile在其中包裹uni.login

示例代码如↓

uni.getUserProfile({
     
	desc:'获取微信用户的昵称与头像',
	success:function(resp){
     
		uni.login({
     
			success:function(res){
     
				let code = res.code;
				//console.log(res.code);
				let nickName = resp.userInfo.nickName;
				let avatarUrl = resp.userInfo.avatarUrl;
				//console.log(nickName);
				//console.log(avatarUrl);
				let data={
     
					code:code,
					nickname:nickName,
					photo:avatarUrl,
					registerCode:that.registerCode
				}						
				uni.request({
     
					"url": url, 
					"method": "POST", 
					"header": {
      
					token: uni.getStorageSync('token') 
				},
				"data": data, 
				success: function(resp) {
     
				
				}
		});
			},
			fail:function(){
     
				console.log("fail use getUserProfile");
			}
		})						
	}
})

本次分享到此结束,有问题的欢迎评论区留言!

你可能感兴趣的:(开发笔记,微信小程序实战,小程序,vue.js,ajax,前端)