uniapp 微信公众号 获取手机号并存储

简介: uniapp 微信公众号 获取手机号并存储

uni-app 是一个跨平台框架,可以通过编写一套代码来构建不同平台的应用,包括微信公众号。实现获取用户手机号并存储,可以按照以下步骤进行:

  1. 前端页面:展示获取手机号按钮并调用微信授权接口
  2. 后端服务器:接收并存储用户手机号

一、前端部分

首先,我们需要在前端页面上创建一个按钮,点击按钮后触发微信的获取手机号接口。

<template>
  <view class="container">
    <button @tap="getPhoneNumber" open-type="getPhoneNumber">获取手机号</button>
  </view>
</template>
 
<script>
export default {
  methods: {
    getPhoneNumber(e) {
      if (e.mp.detail.errMsg === 'getPhoneNumber:ok') {
        // 用户允许授权,获取手机号信息
        const { encryptedData, iv } = e.mp.detail;
        // 调用后端接口,发送 encryptedData 和 iv
        this.getPhoneNumberFromServer(encryptedData, iv);
      } else {
        // 用户拒绝授权
        uni.showToast({
          title: '用户拒绝授权',
          icon: 'none'
        });
      }
    },
    getPhoneNumberFromServer(encryptedData, iv) {
      uni.request({
        url: 'https://your-backend-server.com/api/getPhoneNumber', // 替换成你的后端服务器地址
        method: 'POST',
        data: {
          encryptedData,
          iv,
          session_key: uni.getStorageSync('session_key') // 确保已获取并存储用户 session_key
        },
        success: (res) => {
          if (res.data.success) {
            uni.showToast({
              title: '手机号获取成功',
              icon: 'success'
            });
            // 可以在这里处理手机号
          } else {
            uni.showToast({
              title: '手机号获取失败',
              icon: 'none'
            });
          }
        },
        fail: () => {
          uni.showToast({
            title: '请求失败',
            icon: 'none'
          });
        }
      });
    }
  }
}
</script>
 
<style>
.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}
button {
  padding: 10px 20px;
  background-color: #1AAD19;
  color: white;
  border: none;
  border-radius: 5px;
}
</style>

在上面的代码中,我们创建了一个按钮,当用户点击按钮并同意授权后,会触发 getPhoneNumber 方法。这个方法会获取微信返回的 encryptedDataiv,然后调用后端接口,将这些数据发送到服务器。

二、后端部分

后端部分需要接收前端发送的 encryptedDataiv,然后使用微信提供的解密算法解密出用户的手机号,并将其存储在数据库中。以下是一个基于 Node.js 和 Express 的示例代码:

const express = require('express');
const bodyParser = require('body-parser');
const crypto = require('crypto');
 
const app = express();
app.use(bodyParser.json());
 
app.post('/api/getPhoneNumber', (req, res) => {
  const { encryptedData, iv, session_key } = req.body;
  
  // 微信小程序提供的解密算法
  function decryptData(encryptedData, iv, sessionKey) {
    const decodedKey = Buffer.from(sessionKey, 'base64');
    const decodedIV = Buffer.from(iv, 'base64');
    const decodedData = Buffer.from(encryptedData, 'base64');
    
    try {
      const decipher = crypto.createDecipheriv('aes-128-cbc', decodedKey, decodedIV);
      decipher.setAutoPadding(true);
      let decrypted = decipher.update(decodedData, 'binary', 'utf8');
      decrypted += decipher.final('utf8');
      
      return JSON.parse(decrypted);
    } catch (err) {
      console.error('解密失败:', err);
      return null;
    }
  }
 
  const decryptedData = decryptData(encryptedData, iv, session_key);
  if (decryptedData) {
    // 存储手机号逻辑,这里可以是存储到数据库
    const phoneNumber = decryptedData.phoneNumber;
    // 假设我们有一个函数 savePhoneNumber 存储手机号
    savePhoneNumber(phoneNumber).then(() => {
      res.json({ success: true, phoneNumber });
    }).catch(err => {
      console.error('存储失败:', err);
      res.json({ success: false, message: '存储失败' });
    });
  } else {
    res.json({ success: false, message: '解密失败' });
  }
});
 
function savePhoneNumber(phoneNumber) {
  // 此处为示例,实际应将手机号存储到数据库中
  return new Promise((resolve, reject) => {
    // 模拟异步存储操作
    setTimeout(() => {
      console.log('手机号存储成功:', phoneNumber);
      resolve();
    }, 1000);
  });
}
 
app.listen(3000, () => {
  console.log('服务器已启动,端口 3000');
});

在后端代码中,我们首先通过 decryptData 函数解密 encryptedData,然后将解密后的数据(包含手机号)存储到数据库中。savePhoneNumber 函数是一个模拟的存储操作,你需要根据实际情况将其替换为实际的数据库存储逻辑。

三、整体流程说明

用户点击按钮:前端页面展示一个按钮,用户点击后会触发 getPhoneNumber 方法。

微信授权:如果用户同意授权,微信会返回 encryptedData 和 iv,前端将其发送到后端服务器。

后端解密:后端接收到 encryptedData 和 iv 后,使用微信提供的解密算法解密出用户的手机号。

存储手机号:解密成功后,将手机号存储到数据库中,返回成功或失败的消息给前端。

四、注意事项

session_key 的获取和存储:在用户登录时,需要获取并存储 session_key。可以通过微信的登录接口获取到 session_key


数据安全:在实际应用中,务必确保数据传输和存储的安全性,避免用户信息泄露。


错误处理:在解密和存储过程中,需要添加完整的错误处理逻辑,确保系统的健壮性。


通过以上步骤,便可以在 uni-app 中实现微信公众号获取用户手机号并存储的功能。如果你需要对接其他平台,只需根据平台的不同修改相应的代码逻辑即可。


相关文章
|
4月前
|
Java 数据安全/隐私保护 计算机视觉
手机虚拟视频替换摄像头,QQ微信虚拟视频插件,jar代码分享
这段代码演示了如何使用JavaCV捕获视频流、处理帧数据并输出到虚拟摄像头设备。它需要JavaCV和OpenCV库支持
|
4月前
|
API 数据安全/隐私保护 开发者
企业微信自动加好友软件,导入手机号批量添加微信好友,python版本源码分享
代码展示了企业微信官方API的合规使用方式,包括获取access_token、查询部门列表和创建用户等功能
|
4月前
|
Android开发 数据安全/隐私保护
手机微信虚拟视频聊天,安卓免root虚拟摄像头,免root虚拟hook相机
以上代码实现了一个完整的免root虚拟摄像头方案,通过Hook系统摄像头服务和微信视频通话接口
|
5月前
|
Android开发
微信加好友脚本自动,手机号自动添加定时,可群聊通讯录添加
这是一款基于 AutoJS 的微信自动化脚本,适用于 Android 7.0+ 系统,实现定时批量添加好友功能。采用分层设计(主控模块+功能模块+配置模块)
微信养号脚本,导入手机号自动添加,autojs代码分享
这段代码实现了基本的微信自动添加好友功能,包括读取手机号文件、启动微信、搜索用户和发送
企业微信批量加好友脚本,企业微信自动加手机号好友软件,自动同意群发消息自动回复
这是一款为企业微信设计的自动化营销工具,能够一键批量加好友并自动回复消息。通过模拟操作实现自动化流程,提升网络营销效率。
|
5月前
|
监控 数据可视化 BI
微信计数器统计工具,QQ统计器手机APP,通过autojs实现后台
这是一款基于AutoJS的微信/QQ新增好友监控脚本,具备后台运行、自动统计每日新增好友数量、生成简单报表及定时提醒功能。
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
2408 3
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
3269 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
|
机器学习/深度学习 算法 数据可视化
UniApp手机滑块验证组件代码生成器
UniApp手机滑块验证组件代码生成器
721 1

热门文章

最新文章