uniapp抖音小程序一键获取用户手机号的实现方案

作者:阿沐时间:2026-10-31 17:53:26浏览:126

本文详细介绍在uniapp开发抖音小程序时,如何通过前端调用open-type="getPhoneNumber"获取用户授权,并将sessionKey、encryptedData和iv传递给后端。后端利用Node.js crypto模块进行AES-128-CBC解密,最终还原出用户手机号。

前端部分

在页面中放置一个按钮,用户点击该按钮以触发获取手机号的流程。

<button class="button" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">一键获取</button>

需要向接口传递sessionKey、encryptedData以及iv这三个关键参数。

sessionKey的值来源于登录阶段,通过调用抖音官方接口https://developer.toutiao.com/api/apps/v2/jscode2session获取。

encryptedData和iv则是用户在点击授权按钮后,由回传的事件参数中提供的。

  getPhoneNumber(e) {
    if (e.detail) {
      if (e.detail.errMsg == "getPhoneNumber:fail auth den") {
        uni.showToast({
          title: '小程序通过试运营期,才能一键获取手机号',
          icon: 'none'
        });
      }
      this.getUserPhone(e.detail)
    } else {
      this.hasPhoneValue = false
    }
  },
  async getUserPhone(query) {
    // douyin-ad-1ddba+123456 /admin/dyinAd/answerAd
    let Authorization = this.$user.token || "none Authorization";
    let http_url = this.$config.base_url + '/app/user/login/getDyPhone'
    let http_data = {
      sessionKey: this.$user.sessionKey,
      encryptedData: query.encryptedData,
      iv: query.iv,
      "admin": this.$config.admin,
    }
    let http_header = {
      Authorization
    }
    let result = await this.$http.post(http_url, http_data, http_header, 'json')
      .then(async (res) => {
        if (res && res.data) {
          let phone = {}
          Object.assign(phone, JSON.parse(res.data))
          this.formPhone = phone.phoneNumber
        }
      })
      .catch((err) => {
      });
  },

后端部分

后端负责接收前端传来的加密数据,并进行手机号解密操作。

async getDyPhone(query){
    const decipher = crypto.createDecipheriv(
      "aes-128-cbc",
      Buffer.from(query.sessionKey, "base64"),
      Buffer.from(query.iv, "base64")
    );
    let ret = decipher.update(query.encryptedData, "base64", 'utf8');
    ret += decipher.final('utf8');
    return ret;
  }

关于uniapp抖音小程序一键获取用户手机号的示例代码介绍至此,更多相关uniapp抖音小程序获取用户手机号内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

作者最新文章