uniapp微信小程序,使用fastadmin完成一个一键获取微信手机号的功能

devtools/2024/12/25 12:05:43/

前端部分

点击按钮,获取手机号

<button open-type="getPhoneNumber" @getphonenumber="bindGetPhoneNumber" hover-class="none"class="btn-purity">一键获取</button>

传入openid和code

bindGetPhoneNumber(e) {var that = this;if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {uni.showModal({title: '温馨提示',content: '您已拒绝授权,无法获取手机号!',showCancel: false,success: function(res) {if (res.confirm) {uni.$emit("getContract", {});uni.navigateBack();// uni.switchTab({// 	url: "/pages/home/index/index"// })}}});return;} else {var json = {openid: this.userInfo.openid,};let version = uni.getSystemInfoSync().SDKVersion;// json['encryptedData'] = e.detail.encryptedData;// json['iv'] = e.detail.iv;json['code'] = e.detail.code;this.$api.user.getPhone(json).then(res => {console.log(7777123, res)if (res !== false) {this.phoneNumber = res.data.mobile}});}},

后台部分

初始化EasyWechat的核心类

private $app;public $payment;public function __construct(){$config = get_addon_config('lineup');Log::write('[ Log LIST ++++++++++$config ] ' . json_encode($config, JSON_UNESCAPED_UNICODE), 'debug');$options = ['app_id'      => $config['app_id'],'secret'      =>  $config['app_secret'],'response_type' => 'array',];$payment_config = [// 必要配置'app_id'             => $config['app_id'] ?? '','mch_id'             => $config['mch_id'] ?? '','key'                => $config['mch_key'] ?? '',   // API 密钥// 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)'cert_path'          => '', // XXX: 绝对路径!!!!'key_path'           => '',      // XXX: 绝对路径!!!!'notify_url'         => '',     // 你也可以在下单时单独设置来想覆盖它];try {$this->app = Factory::miniProgram($options);$this->payment = Factory::payment($payment_config);} catch (\Exception $e) {\think\Log::error('初始化失败:' . $e->getMessage());}}/*** 根据 jsCode 获取用户 session 信息*/public function jscode2session($code){return $this->app->auth->session($code);}/*** 获取手机号* @param $code*/public function getPhoneNumber($code){$token = $this->app->access_token->getToken();try {$data = Http::post("https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=".$token['access_token'],json_encode(['code'=>$code]));$data = json_decode($data,true);if($data['errcode'] != '0'){throw new Exception("获取手机号失败");}}catch (ErrorException $exception){throw $exception;}return $data['phone_info'];}/*** 小程序>微信小程序消息解密*/public function decryptData($session, $iv, $encryptedData){return $this->app->encryptor->decryptData($session, $iv, $encryptedData);}

解析出手机号

public function decryptPhoneNumber($post){$wxmini = new \app\common\library\lineup\Wxmini();//新版本授权try {if(!empty($post['code'])){$return = $wxmini->getPhoneNumber($post['code']);}else if($post['iv'] && $post['encryptedData']){$return = $wxmini->decryptData($post['session_key'], $post['iv'], $post['encryptedData']);}else{throw new Exception("参数错误");}}catch (Exception | ErrorException $e){return ['status' => false,'info'   => $e->getMessage(),'data' => [],];}return ['status' => true,'data' => ['mobile' => isset($return['phoneNumber']) ? $return['phoneNumber'] : '',],];}


http://www.ppmy.cn/devtools/145252.html

相关文章

C++练习:图论的两种遍历方式

一、遍历 一提到遍历&#xff0c;我们首先想到的肯定是树的遍历。因为在数据结构中我们是从树引出图的。但图明显比树更常见&#xff0c;更丰富&#xff0c;更多变。所以我们可能会被树的一些知识所固化了思维。比如树的遍历有前、中、后遍历&#xff0c;或者深度优先、广度优…

我用Cursor+DeepSeek做了个飞书文档一键同步插件,免费使用!

作为一个飞书文档的重度使用者&#xff0c;我基本上都是先在飞书上写好文章&#xff0c;然后再想办法搬到其他平台上&#xff0c;所以对飞书一键同步有很强的需求。​ 于是我决定做个插件来支持飞书文档的同步。​ 说实话我是第一次玩插件&#xff0c;源代码看起来有些陌生&a…

在 .NET Core 中使用 ActionBlock 实现高效率的多步骤数据处理

一、引言 本篇使用 ActionBlock 二、ActionBlock介绍 什么是 ActionBlock? ActionBlock是 .NET 中 TPL Dataflow 库的一部分,用于处理数据流和并行任务。它提供了一种简单而强大的方式来处理并行任务,并且可以轻松地实现生产者-消费者模式。 ActionBlock 的特点 并行处…

SpringBoot 依赖之Spring Web

SpringBoot 依赖之 Spring Web 详细介绍 Spring Web 依赖的内容&#xff1a; 第 1 章&#xff1a;Spring Web 1. 简介 功能描述 英文: Build web, including RESTful, applications using Spring MVC. Uses Apache Tomcat as the default embedded container.中文译文&…

【AscendC】记录LpNorm的tiling方案中用到的一些变量

LpNorm的官方仓库链接在operator_contrib/LpNormV2CustomSample/FrameworkLaunch/LpNormV2Custom。观察其tiling方案可以看到&#xff0c;有几个比较特殊的变量&#xff1a;pType,pValue,stepSize,unitCount&#xff0c;totalLength。下面结合代码分别对其进行分析。 pType 类…

B/S 跟C/S架构的区别

B/S架构&#xff08;浏览器/服务器&#xff09; 特点&#xff1a; 用户界面&#xff1a; 用户通过网页浏览器访问服务器上的应用程序&#xff0c;用户界面主要在客户端浏览器中渲染。集中式处理&#xff1a; 所有的业务逻辑和数据处理都在服务器端进行&#xff0c;客户端仅负…

【Leetcode】1705. 吃苹果的最大数目

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 有一棵特殊的苹果树&#xff0c;一连 n n n 天&#xff0c;每天都可以长出若干个苹果。在第 i i i 天&#xff0c;树上会长出 a p p l e s [ i ] apples[i] apples[i] 个苹果&a…

Vue中使用a标签下载静态资源文件(比如excel、pdf等),纯前端操作

第一步&#xff0c;public文件夹下新建static文件夹存放静态资源 我存放了一个 .docx文件&#xff0c;当然&#xff0c;你可以存放pdf/word 等文件都可以。 第二步&#xff0c;模拟a标签下载 //html部分<el-button type"primary" plain click"download&quo…