uniapp 微信小程序 获取手机号并存储

简介: uniapp 微信小程序 获取手机号并存储

在使用uni-app开发微信小程序时,获取用户手机号并进行存储是一项常见的需求。以下是如何在微信小程序中实现这一功能的详细步骤和对应的代码示例,包括用户授权、手机号解密以及数据存储。

一、准备工作

  1. 确保你已经在微信开放平台注册并创建了一个微信小程序。
  2. 在微信开发者工具中创建一个uni-app项目。
  3. 在项目的manifest.json文件中,确保mp-weixin平台的appIdappSecret正确配置。


二、页面布局

pages目录下创建一个获取手机号的页面,比如getPhone.vue,并添加以下代码:

<template>
  <view class="container">
    <button
      open-type="getPhoneNumber"
      @getphonenumber="getPhoneNumber"
    >获取手机号</button>
  </view>
</template>
 
<script>
export default {
  methods: {
    getPhoneNumber(e) {
      if (e.detail.errMsg === "getPhoneNumber:ok") {
        const { encryptedData, iv } = e.detail;
        // 将加密数据和iv发送到服务器进行解密
        uni.request({
          url: 'https://your-server.com/decryptPhoneNumber', // 服务器解密接口
          method: 'POST',
          data: {
            encryptedData,
            iv,
            sessionKey: getApp().globalData.sessionKey // 从全局变量中获取sessionKey
          },
          success: res => {
            if (res.data.success) {
              console.log('用户手机号:', res.data.phoneNumber);
              // 在此处可以进行手机号的存储操作
            } else {
              console.error('解密失败', res.data.error);
            }
          },
          fail: err => {
            console.error('请求失败', err);
          }
        });
      } else {
        console.log('用户拒绝授权获取手机号');
      }
    }
  }
};
</script>
 
<style scoped>
.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}
</style>

三、用户登录获取 session_key

在微信小程序中,用户登录可以获取到session_key,这是解密用户手机号的关键。需要在App.vue中添加登录逻辑:

// App.vue
<template>
  <view>
    <slot/>
  </view>
</template>
 
<script>
export default {
  onLaunch() {
    // 登录
    uni.login({
      success: res => {
        if (res.code) {
          // 发送 res.code 到后台换取 openId, sessionKey, unionId
          uni.request({
            url: 'https://your-server.com/onLogin',
            method: 'POST',
            data: {
              code: res.code
            },
            success: res => {
              if (res.data.success) {
                // 将sessionKey存储在全局变量中
                this.globalData.sessionKey = res.data.sessionKey;
              } else {
                console.error('登录失败', res.data.error);
              }
            },
            fail: err => {
              console.error('请求失败', err);
            }
          });
        } else {
          console.log('登录失败!' + res.errMsg);
        }
      }
    });
  },
  globalData: {
    sessionKey: null
  }
};
</script>

四、服务器端解密手机号

服务器需要实现一个接口来解密手机号。以下是Node.js的示例代码,使用wxBizDataCrypt库解密数据:

const express = require('express');
const bodyParser = require('body-parser');
const WXBizDataCrypt = require('./WXBizDataCrypt'); // 自行下载并引用该库
const app = express();
 
app.use(bodyParser.json());
 
app.post('/onLogin', (req, res) => {
  const { code } = req.body;
  // 调用微信登录凭证校验接口
  // 获取 session_key 和 openid
  // 这里只是一个示例,需要替换为实际请求
  const sessionKey = 'mockSessionKey'; // 假设从微信获取的sessionKey
  res.json({ success: true, sessionKey });
});
 
app.post('/decryptPhoneNumber', (req, res) => {
  const { encryptedData, iv, sessionKey } = req.body;
  const appId = 'yourAppId'; // 微信小程序的appId
  const pc = new WXBizDataCrypt(appId, sessionKey);
  const data = pc.decryptData(encryptedData, iv);
 
  if (data) {
    res.json({ success: true, phoneNumber: data.phoneNumber });
  } else {
    res.json({ success: false, error: '解密失败' });
  }
});
 
app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

五、完整项目结构

以下是完整的项目结构:

├── pages
│   └── getPhone.vue
├── App.vue
├── manifest.json
└── server
    ├── WXBizDataCrypt.js
    └── app.js

六、代码详细解释

getPhone.vue 代码解释

模板部分:


open-type="getPhoneNumber":按钮的open-type属性设置为getPhoneNumber,用于触发获取手机号的操作。

@getphonenumber="getPhoneNumber":按钮绑定getPhoneNumber方法。

方法部分:


getPhoneNumber(e):处理用户点击按钮后的逻辑。

检查e.detail.errMsg是否为getPhoneNumber:ok,表示用户允许授权。

通过uni.request将加密数据encryptedData和iv发送到服务器进行解密。

App.vue 代码解释

onLaunch方法:

调用uni.login进行用户登录,获取登录凭证code。

通过uni.request发送code到服务器,换取sessionKey。

将sessionKey存储在全局变量globalData中,供后续使用。

服务器端代码解释

/onLogin接口:


接受微信小程序的登录凭证code。

调用微信服务器接口获取sessionKey和openid(示例代码中简化为直接返回sessionKey)。

/decryptPhoneNumber接口:


接受客户端传递的encryptedData、iv和sessionKey。

使用WXBizDataCrypt库进行解密,返回解密后的手机号。

总结

通过以上步骤和代码示例,你可以在uni-app开发的微信小程序中实现获取用户手机号并存储的功能。关键点在于用户授权、会话密钥session_key的获取以及服务器端的解密处理。希望这些内容对你有所帮助!

相关文章
|
10天前
|
小程序 前端开发 关系型数据库
基于Uniapp+php校园小程序,校园圈子论坛系统功能,校园跑腿二手交流功能设计
校园圈子论坛及综合服务平台集成了校园跑腿、兼职信息、外卖团购、闲置交换、租赁服务、表白墙等多功能模块,提供一站式校园生活解决方案。系统采用uniapp前端和PHP后端开发,支持多城市、多学校切换,配备分站式后台管理,确保稳定性和安全性。通过融云IM SDK实现即时通讯功能,增强用户互动与粘性。适用于大学校园、城市及社区圈子,满足多样化需求,提升便捷体验。
|
9天前
|
小程序 前端开发 关系型数据库
uniapp跨平台框架,陪玩系统并发性能测试,小程序源码搭建开发解析
多功能一体游戏陪练、语音陪玩系统的开发涉及前期准备、技术选型、系统设计与开发及测试优化。首先,通过目标用户分析和竞品分析明确功能需求,如注册登录、预约匹配、实时语音等。技术选型上,前端采用Uni-app支持多端开发,后端选用PHP框架确保稳定性能,数据库使用MySQL保证数据一致性。系统设计阶段注重UI/UX设计和前后端开发,集成WebSocket实现语音聊天。最后,通过功能、性能和用户体验测试,确保系统的稳定性和用户满意度。
|
2月前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
|
29天前
|
移动开发 小程序 前端开发
超详细攻略!uniapp陪玩系统,打包陪玩小程序、H5需要注意什么?
陪玩系统的打包过程涵盖APP、小程序和H5平台。APP打包需使用uni-app开发工具,配置项目信息并选择云打包;小程序打包需在微信公众平台注册账号并提交审核;H5打包则直接通过uni-app生成文件并上传至服务器。各平台需注意权限配置、代码规范及充分测试,确保应用稳定性和兼容性。
|
13天前
|
移动开发 小程序
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
14 0
|
3月前
|
人工智能 小程序 搜索推荐
uni app下开发AI运动小程序解决方案
本文介绍了在小程序中实现AI运动识别的解决方案。该方案依托于UNI平台,通过高效便捷的插件形式,实现包括相机抽帧控制、人体识别、姿态识别等在内的多项功能,无需依赖后台服务器,大幅提高识别效率和用户体验。方案内置多种运动模式,支持自定义扩展,适用于AI健身、云上赛事、AI体测等多场景,适合新开发和存量改造项目。
|
3月前
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
69 0
在线课堂+工具组件小程序uniapp移动端源码
|
4月前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
521 3
|
4月前
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
1625 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
|
4月前
|
移动开发 小程序 数据可视化
一招学会DIY官网可视化设计支持导出微擎、UNIAPP、H5、微信小程序源码
一招学会DIY官网可视化设计支持导出微擎、UNIAPP、H5、微信小程序源码
66 2

热门文章

最新文章