uniapp 微信小程序获取用户信息、手机号

这段代码展示了在微信小程序中实现用户授权设置、获取用户信息、授权获取用户信息及获取手机号登录的流程。主要涉及openSetting、getUserProfile、getPhoneNumber等API的使用,以及对用户授权状态的判断和处理。

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

<template>
    <!-- #ifdef MP-WEIXIN -->
    <view>
        <view>
            <button  type="primary" class='btn' open-type="openSetting"
                @opensetting="openSetting">授权设置页</button>
            
            <!-- 没有授权窗口,获取到的信息匿名 ------废弃 -->
            <button  type="primary" class='btn' open-type="getUserInfo"
                @getuserinfo="getUserInfo">获取用户信息</button>
            
            <!-- 有授权窗口 -->    
            <button  type="primary" class='btn' @click="getUserProfile">授权获取用户信息</button>
            <!-- 获取手机号使用手机号登录 -->
            <button  type="primary" class='btn' open-type="getPhoneNumber"
                @getphonenumber="getPhoneNumber">使用手机号登录</button>
        </view>
    </view>
    <!-- #endif -->
</template>
<script>
    export default {
        data() {
            return {
            loginFlag: false,
            }
        },
        onLoad() {
            if (uni.getStorageSync('token')) {
                console.log('获取到token,前往验证')
                // token验证函数
            } else {
                console.log('未获取到token')
            }
        },
        methods: {
            // 授权设置页
            /*
             一些通知管理、位置信息设置
            */
            openSetting(e){
                console.log("授权设置页",e)
            },
            // 获取用户信息
            /*
                2021年4月30号之后上传小程序获取数据为加密,并且没有授权窗口
            */
            getUserInfo(e){
                console.log("获取到的用户信息",e)
            },
            // 授权获取用户信息
            /*
                2021年4月30号之后更换为getUserProfile,有授权框
                lang:指定返回用户信息的语言,默认为 en。
                desc:声明获取用户个人信息后的用途,不超过30个字符
            */
            getUserProfile(){
                uni.getUserProfile({
                  lang: 'zh_CN',
                  desc: '用户登录',
                  success: (res) => {
                    console.log('获取到的用户信息', res)
                  },
                  // 失败回调
                  fail: (err) => {
                    console.log('选择了拒绝')
                  },
                })
            },
            
            // 刷新微信登录态
            wxlogin(){
                uni.login({
                    success:(res)=>{
                      this.loginFlag = true;
                      console.log('获取得到的loginres', res)
                    },
                    fail:(err)=>{
                      reject(err)
                    },
                })
            },
            // 获取手机信息
            /*
                2.21.2版本之后,获取手机号不需要提前调用login进行登录
            */
            getPhoneNumber(e) {
                console.log("获取手机号码", e)
                if (e.detail.errMsg !== 'getPhoneNumber:ok'){
                    this.$u.toast("拒绝手机号登录");
                 return;
                }
                uni.showLoading()
                uni.request({
                    url: 'xxxxxx',
                    data: {
                        code: e.detail.code
                    },
                    method: 'GET',
                    header: {
                        'content-type': 'application/json',
                    },
                    success:(res)=> {
                        console.log('使用手机号登录', res)
                        if (data.statusCode == 200) {
                            wx.hideLoading()
                            // 实际不给手机号,只给token
                            // console.log('获取到的手机号是', res.data)
                            uni.setStorageSync('token', res.access_token)
                            
                        }else {
                            this.$u.toast(res.msg);
                        }
                    },
                    fail:(err)=> {
                        this.$u.toast('服务器开小差了呢,请您稍后再试')
                        console.log(err);
                    },
                })
            },
        }
    }
</script>

<style>

    .btn {
        background: #1890FF !important;
        line-height: 80rpx !important;
        border-radius: 80rpx !important;
        margin: 70rpx 50rpx !important;
        font-size: 35rpx !important;
    }
</style>
### 使用 UniApp 开发微信小程序获取用户手机号 #### 准备工作 确保已在微信开放平台注册并创建了微信小程序,在微信开发者工具中创建一个 UniApp 项目。在项目的 `manifest.json` 文件中,确认 mp-weixin 平台下的 appId 和 appSecret 已经正确配置[^1]。 #### 页面布局与组件设置 为了使用户体验更佳,通常会在页面上放置一个按钮用于触发获取手机号的操作。可以采用如下 HTML 结构: ```html <view class="action-btn"> <button open-type="getPhoneNumber" @getphonenumber="handleGetPhoneNumber" withCredentials="true" class="login-btn cu-btn block bg-blue lg round">获取手机号登录</button> </view> ``` 此部分代码定义了一个带有特定样式的按钮,当点击该按钮时会执行名为 `handleGetPhoneNumber` 的 JavaScript 方法来处理用户的操作响应[^4]。 #### 编写逻辑代码 接下来编写具体的业务逻辑函数 `handleGetPhoneNumber()` 来接收来自前端的事件参数,并从中提取必要的加密数据以便后续解密得到真实的电话号码信息。以下是完整的 Vue 组件脚本片段: ```javascript export default { data() { return {}; }, methods: { handleGetPhoneNumber(event) { const { detail } = event; if (detail.errMsg === "getPhoneNumber:ok") { // 成功获得用户同意授权后的回调 let encryptedData = detail.encryptedData, iv = detail.iv; // 将这些值发送给服务器端进行下一步验证和解析 uni.request({ url: 'https://yourserver.com/api/decryptPhone', method: 'POST', header: {'content-type': 'application/json'}, data: JSON.stringify({ encryptedData, iv }), success(response) { console.log('Decrypted phone number:', response.data.phoneNumber); } }); } else { // 处理拒绝授权的情况 console.error("User denied permission to access the phone number."); } }, // 获取 code 及其他必要信息 getUserCodeAndInfo(){ uni.login({ provider: 'weixin', success(loginRes){ console.log(`Login Code is ${loginRes.code}`); // 进一步利用 loginRes.code 请求 openid 等信息... } }); // 此处还可以加入更多关于获取 userInfo 或者其他所需信息的功能扩展 } }, onLoad(){ this.getUserCodeAndInfo(); } } ``` 上述代码展示了如何通过监听 button 元素上的自定义事件 `@getphonenumber` 来捕获用户授予访问其手机联系人的权限状态;一旦用户同意,则收集相应的加密资料并通过 API 发送到后端服务完成最终的数据转换过程[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值