微信小程序获取用户头像与昵称

微信小程序获取用户头像与昵称

现在已经无法直接获取了,需要通过用户填写方式,参考代码如下:

<script setup>
import { ref, onMounted } from 'vue'
import EmptyHeader from '@/components/empty-header/empty-header.vue'
import { onUploadImage, onUpdateUserInfo } from '@/services/api'

const userInfoRef = ref({
  headImg: '',
  userName: ''
})

// 初始化用户信息
function initUserInfo() {
  const userInfo = uni.getStorageSync('userinfo') || {}
  if (userInfo.headImg && userInfo.userName) {
    userInfoRef.value = {
      headImg: userInfo.headImg,
      userName: userInfo.userName
    }
  } else {
    userInfoRef.value = {
      headImg: '/static/icons/mine.png',
      userName: ''
    }
  }
}

// 页面加载时初始化
onMounted(() => {
  initUserInfo()
})

// TODO 下面单个函数接口还没好
async function onChooseAvatar(e) {
  const tempFilePath = e.detail.avatarUrl
  // 上传头像获取真实链接
  const headImg = await onUploadImage({ tempFilePath })
  userInfoRef.value.headImg = headImg

  // TODO: 检查其他信息是否完备,都完备则更新用户信息
  if (userInfoRef.value.userName && userInfoRef.value.phone) {
    await onUpdateUserInfo({
      phone: userInfoRef.value.phone,
      nickName: userInfoRef.value.userName,
      headImg: userInfoRef.value.headImg
    })
    uni.showToast({
      title: '用户信息已更新',
      icon: 'success'
    })
  }
}

async function onBlurNickname(e) {
  userInfoRef.value.userName = e.detail.value

  // TODO: 检查其他信息是否完备,都完备则更新用户信息
  if (userInfoRef.value.headImg && userInfoRef.value.phone) {
    await onUpdateUserInfo({
      phone: userInfoRef.value.phone,
      nickName: userInfoRef.value.userName,
      headImg: userInfoRef.value.headImg
    })
    uni.showToast({
      title: '用户信息已更新',
      icon: 'success'
    })
  }
}

async function onBlurPhone(e) {
  userInfoRef.value.phone = e.detail.value

  // TODO: 检查其他信息是否完备,都完备则更新用户信息
  if (userInfoRef.value.headImg && userInfoRef.value.userName) {
    await onUpdateUserInfo({
      phone: userInfoRef.value.phone,
      nickName: userInfoRef.value.userName,
      headImg: userInfoRef.value.headImg
    })
    uni.showToast({
      title: '用户信息已更新',
      icon: 'success'
    })
  }
}
</script>

<template>
  <view class="page">
    <empty-header />
    <!-- 用户信息卡片 -->
    <view class="user-card">
      <view class="user-info">
        <button
          open-type="chooseAvatar"
          @chooseavatar="onChooseAvatar">
          <image
            class="avatar"
            :src="userInfoRef.headImg"
            mode="aspectFill" />
        </button>
        <view class="user-detail">
          <text
            v-if="userInfoRef.userName"
            class="nickname">
            {{ userInfoRef.userName }}
          </text>
          <input
            v-else
            type="nickname"
            placeholder="请输入昵称"
            @blur="onBlurNickname" />
          <text
            v-if="userInfoRef.phone"
            class="phone">
            {{ userInfoRef.phone }}
          </text>
          <input
            v-else
            placeholder="请输入手机号"
            @blur="onBlurPhone" />
        </view>
      </view>
    </view>
  </view>
</template>

<style scoped>
.page {
  min-height: 100vh;
  background-color: var(--page-bg-color);
  padding: 20rpx;
  padding-bottom: env(safe-area-inset-bottom);
}

.user-card {
  background: var(--card-bg-color);
  border-radius: 16rpx;
  padding: 60rpx 40rpx;
  margin-bottom: 20rpx;
  box-shadow: var(--box-shadow);
}

.user-info {
  display: flex;
  align-items: center;
}

.avatar {
  width: 140rpx;
  height: 140rpx;
  border-radius: 70rpx;
  margin-right: 30rpx;
  border: 6rpx solid var(--primary-light-color);
}

.user-detail {
  flex: 1;
}

.nickname {
  font-size: 40rpx;
  font-weight: bold;
  color: var(--text-color-primary);
  display: block;
}
</style>

### ThinkPHP5 中微信小程序获取用户头像昵称的实现 在ThinkPHP5框架下,为了使微信小程序能够成功获取用户头像昵称信息,需遵循特定流程来处理登录逻辑以及解码来自微信服务器返回的数据。 当接收到前端发送的小程序登录凭证code时,在后端通过`httpCurl()`函数向微信接口发起请求换取session_keyopenid[^1]。此过程对于后续操作至关重要,因为这些参数用于验证并获取用户详情。 一旦获得了合法的session_key,就可以利用它去解析由客户端传来的加密数据(encryptedData),其中包含了用户公开的信息如头像URL及昵称等字段。具体来说,这涉及到调用微信提供的解密算法完成对敏感资料的安全读取。 下面是一个简化版的代码片段展示如何接收并处理从前端传递过来的相关参数: ```php public function getUserInfo() { // 假设已经完成了code到session_key的转换,并保存于变量$sessionKey中 $iv = input('post.iv'); // 初始化向量IV $data = input('post.encryptedData'); // 加密后的用户数据 try { // 使用官方提供的工具类进行AES-CBC解密 $pc = new \WXBizDataCrypt($appid, $sessionKey); $errCode = $pc->decryptData($data , $iv, $result ); if ($errCode == 0) { // 解析JSON字符串为关联数组 $userInfo = json_decode($result,true); echo "Avatar URL:".$userInfo['avatarUrl']."\n"; echo "Nickname:".$userInfo['nickName']; } else { throw new Exception("Decryption failed"); } } catch (Exception $e){ return show(0,'Error:'.$e->getMessage()); } } ``` 上述示例假设开发者已经在项目里引入了必要的依赖项并且配置好了相应的环境设置。实际应用时还需要考虑异常情况下的错误提示优化等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值