uniapp抖音小程序,如何一键获取用户手机号

ops/2024/12/25 9:39:33/

前端部分

点击按钮,获取手机号
<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/answerAdlet 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;}


http://www.ppmy.cn/ops/144816.html

相关文章

k8s总结

1、k8s是部署、拓展、管理容器的容器编排引擎。可根据负载的变化动态增加或缩减节点保证系统的高可用。 2、ks8s核心组件&#xff1a;node是节点&#xff08;可以是物理机也可以是虚拟机&#xff09;、pod最小的调度单位&#xff0c;是容器的抽象&#xff0c;有svc管理容器网络…

【序】前端监控:打造高效稳定的用户体验

前端监控&#xff1a;打造高效稳定的用户体验 为什么需要前端监控&#xff1f; 在现代前端开发中&#xff0c;用户体验至关重要。无论是页面性能问题、JavaScript 报错&#xff0c;还是网络请求的失败&#xff0c;都可能影响用户的满意度。前端监控可以帮助我们&#xff1a; …

PostgreSQL的交互式终端使用一系列命令来获取有关文本搜索配置对象的信息

在 psql&#xff08;PostgreSQL 的交互式终端&#xff09;中&#xff0c;你可以使用一系列命令来获取有关文本搜索配置对象的信息。这些命令主要围绕 \dF 系列&#xff0c;以及使用 SQL 查询 pg_ts_config 系统视图。以下是你可以使用的一些方法&#xff1a; 使用 \dF 系列命令…

专业的内外网数据交换方案 可解决安全、效率、便捷3大问题

内外网数据交换是很多企业和行业都会面临的场景&#xff0c;既然隔离了内外网&#xff0c;重中之重就是要确保数据的安全性&#xff0c;其次在数据流转交换过程中&#xff0c;不能太繁琐复杂&#xff0c;需要让用户快速、便捷的进行数据交换。首先我们来看看&#xff0c;在进行…

【Vue3学习】使用ref调用子组件的方法,实现子组件的显示与隐藏

不同于v2的写法,在v3中,子组件的方法和变量需要用defineExpose 暴露出去,defineExpose 是 Vue 3 提供的一个 API&#xff0c;用于显式地暴露组件中的方法或属性给外部&#xff08;通常是父组件&#xff09;。它的主要用途是让你能够控制哪些内容可以被父组件通过 ref 或 $refs …

Git 的基本概念和使用

Git是一个分布式版本控制系统&#xff0c;它可以帮助开发人员追踪和管理代码的修改。下面是Git的基本概念和使用方式的解释&#xff1a; 仓库&#xff08;Repository&#xff09;&#xff1a;Git使用仓库来存储代码和版本历史记录。仓库可以位于本地计算机上&#xff0c;也可以…

WPF 依赖属性和附加属性

除了普通的 CLR 属性&#xff0c; WPF 还有一套自己的属性系统。这个系统中的属性称为依赖属性。 1. 依赖属性 为啥叫依赖属性&#xff1f;不叫阿猫阿狗属性&#xff1f; 通常我们定义一个普通 CLR 属性&#xff0c;其实就是获取和设置一个私有字段的值。假设声明了 100 个 …

【C++】模板与泛型编程(一):定义模板,类模板

16.1.2 类模板 类模板&#xff08;class template&#xff09;可以用来生成类的蓝图。与函数模板的不同之处在于&#xff0c;编译器不能为类模板推断模板参数类型。 为了使用类模板&#xff0c;必须在模板名后的尖括号中提供额外的信息——用来代替模板参数的模板实参列表。 …