最新uniapp 微信小程序获取头像操作指南

自2022年10月25日后,小程序的wx.getUserProfile和插件的wx.getUserInfo接口将无法获取用户真实头像和昵称,转而返回默认灰色头像和“微信用户”昵称。为获取用户头像昵称,开发者需使用‘头像昵称填写能力’,并确保基础库版本和微信客户端版本的支持。同时,提供了uniApp的示例代码展示如何处理头像选择和昵称输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小程序用户头像昵称获取规则调整公告

调整说明

自 2022 年 10 月 25 日 24 时后(以下统称 “生效期” ),用户头像昵称获取规则将进行如下调整:

  1. 自生效期起,小程序 wx.getUserProfile 接口将被收回:生效期后发布的小程序新版本,通过 wx.getUserProfile 接口获取用户头像将统一返回默认灰色头像,昵称将统一返回 “微信用户”。生效期前发布的小程序版本不受影响,但如果要进行版本更新则需要进行适配。
  2. 自生效期起,插件通过 wx.getUserInfo 接口获取用户昵称头像将被收回:生效期后发布的插件新版本,通过 wx.getUserInfo 接口获取用户头像将统一返回默认灰色头像,昵称将统一返回 “微信用户”。生效期前发布的插件版本不受影响,但如果要进行版本更新则需要进行适配。通过 wx.login 与 wx.getUserInfo 接口获取 openId、unionId 能力不受影响。
  3. 「头像昵称填写能力」支持获取用户头像昵称:如业务需获取用户头像昵称,可以使用「头像昵称填写能力」(基础库 2.21.2 版本开始支持,覆盖iOS与安卓微信 8.0.16 以上版本),具体实践可见下方《最佳实践》。
  4. 小程序 wx.getUserProfile 与插件 wx.getUserInfo 接口兼容基础库 2.27.1 以下版本的头像昵称获取需求:对于来自低版本的基础库与微信客户端的访问,小程序通过 wx.getUserProfile 接口将正常返回用户头像昵称,插件通过 wx.getUserInfo 接口将正常返回用户头像昵称,开发者可继续使用以上能力做向下兼容。

对于上述 3,wx.getUserProfile 接口、wx.getUserInfo 接口、头像昵称填写能力的基础库版本支持能力详细对比见下表:

*针对低版本基础库,兼容处理可参考 兼容文档

文档地址:头像昵称填写 | 微信开放文档 

项目实战以uniApp为例

<template>
	<view class="containar">
		<view class="avatarUrl">
			<button type="balanced" open-type="chooseAvatar" @chooseavatar="onChooseavatar">
				<image :src="avatarUrl" class="refreshIcon"></image>
			</button>
		</view>
		<view class="nickname">
			<text>昵称:</text>
			<input type="nickname" class="weui-input" :value="nickName" @blur="bindblur" placeholder="请输入昵称"
				@input="bindinput" />
		</view>

		<view class="btn">
			<view class="btn-sub" @click="onSubmit">保存</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				avatarUrl: 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0',
				nickName: ''
			};
		},
		onLoad(option) {},
		methods: {
			bindblur(e) {
				// 获取微信昵称
				console.log('nickName', e)
				this.nickName = e.detail.value;
			},
			bindinput(e) {
				console.log('nickName', e)
				//这里要注意如果只用blur方法的话用户在输入玩昵称后直接点击保存按钮,会出现修改不成功的情况。
				this.nickName = e.detail.value;
			},
			onChooseavatar(e) {
				this.avatarUrl = e.detail.avatarUrl;
			},
			onSubmit() {
				if (this.nickName === '') {
					uni.showToast({
						icon: 'none',
						title: '请输入昵称'
					})
					return false;
				}
				uni.showLoading({
					title: '头像上传中...'
				});
				this.$uploadFile({
					url: '', // 自己请求后台地址
					filePath: this.avatarUrl
				}).then((res)=>{
					console.log(res)
					uni.showToast({
						title: '上传成功',
						icon: 'success'
					})
					setTimeout(() => {
						uni.navigateBack({
							delta: 1,
						})
					}, 1000)
					
				})
				
			}
		}
	};
</script>
<style lang="scss">
	.containar {
		.avatarUrl {
			padding: 80rpx 0 40rpx;
			background: #fff;

			button {
				background: #fff;
				line-height: 80rpx;
				height: auto;
				width: auto;
				padding: 20rpx 30rpx;
				margin: 0;
				display: flex;
				justify-content: center;
				align-items: center;


				.refreshIcon {
					width: 160rpx;
					height: 160rpx;
					border-radius: 50%;
				}

				.jt {
					width: 14rpx;
					height: 28rpx;
				}
			}
		}

		// botton 去除边框
		button::after {
			border: none;
		}

		.nickname {
			background: #fff;
			padding: 20rpx 30rpx 80rpx;
			display: flex;
			align-items: center;
			justify-content: center;

			.weui-input {
				padding-left: 60rpx;
			}
		}

		.btn {
			width: 100%;

			.btn-sub {
				width: 670rpx;
				margin: 80rpx auto 0;
				height: 90rpx;
				background: #DF8585;
				border-radius: 45rpx;
				line-height: 90rpx;
				text-align: center;
				font-size: 36rpx;
				color: #fff;
			}
		}
	}
</style>

说明:$uploadFile 方法是自己封装的,也可以参考uniapp中的。

                 uni.uploadFile({
				    url: '后台uploadFile接口',
					filePath: avatarUrl,
					name: 'file',
					header: {
						token: '自己的token',
					},
					success: (res) => {
                        // 赋值操作
					},
					fail: (error) => {
						uni.showToast({
							title: error,
							duration: 2000
						});
					},
					complete: () => {
						uni.hideLoading();
					}
				});

基于uniapp 封装的upload方法:

然后将方法挂载vue 原型上 就可以直接用this调用。

在main方法进行挂载。

分享到此结束,需要做小程序或者管理系统的可以私信我。 

 

### 实现 UniApp 中微信授权并获取用户头像的功能 在 UniApp 开发环境中,可以通过调用微信开放平台的相关接口来完成微信授权以及获取用户头像等功能。以下是详细的说明示例代码。 #### 调用流程概述 1. 用户点击授权按钮后触发 `wx.login` 方法获取临时登录凭证 code。 2. 使用该 code 请求服务器端通过 `GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code` 接口换取 session_key openid[^2]。 3. 前端通过 `getUserProfile` 或者旧版的 `getSetting` 配合 `authorize` 来请求用户信息权限。 4. 如果用户同意,则可以获取到加密数据并通过解密算法得到用户的真实头像 URL 等信息。 #### 示例代码展示 以下是一个完整的实现案例: ```javascript // 在页面 methods 定义方法 methods: { getUserInfo() { uni.getUserProfile({ desc: '用于完善会员资料', // 这里填写申请用户信息的理由 success(res) { console.log('用户信息:', res.userInfo); const avatarUrl = res.userInfo.avatarUrl; // 获取头像链接 // 将头像地址存储至全局变量或其他地方供后续使用 uni.setStorageSync('avatarUrl', avatarUrl); alert(`已成功获取您的头像:\n${avatarUrl}`); }, fail(err) { console.error('获取用户信息失败:', err); alert('您拒绝了授权,请重新尝试!'); } }); } } ``` 上述代码片段展示了如何利用 `uni.getUserProfile()` API 向用户请求个人信息授权,并从中提取头像 URL 的过程[^1]。 #### 注意事项 - **隐私政策声明**:务必在应用内提供清晰可见的隐私条款描述为何需要这些个人数据及其用途。 - **错误处理机制**:考虑到网络状况或者用户操作可能引发异常情况,建议加入全面的 try-catch 结构捕获潜在问题。 - **安全性考量**:敏感数据传输过程中应采用 HTTPS 协议保障通信安全;另外,在服务端验证前端传来的参数真实性也很重要。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值