当前位置: 首页 > article >正文

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

前端部分

点击按钮,获取手机号

<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.kler.cn/a/452244.html

相关文章:

  • 【学习总结|DAY023】Java高级技术
  • GPUStack v0.4.1 单节点与多节点安装与部署指南 Docker PowerShell
  • x86_64 Ubuntu 编译安装英伟达GPU版本的OpenCV
  • Android--java实现手机亮度控制
  • 如何在谷歌浏览器中进行网络速度测试
  • 操作系统导论读书笔记
  • arcface
  • Linux configfs和sysfs的使用与理解
  • 开关电源中的高频振荡噪声及其抑制方法
  • 117.【C语言】数据结构之排序(选择排序)
  • 青蛇人工智能学家
  • 2025差旅平台怎么选?一体化、全流程降本案例解析
  • 用 Python 从零开始构建 LLaMA 3
  • 网络管理(Network Management,NM)(一)
  • 【唐叔学算法】第19天:交换排序-冒泡排序与快速排序的深度解析及Java实现
  • 斐波那契数【东北大学oj数据结构10-1】C++
  • 大数据-259 离线数仓 - Griffin架构 修改配置 pom.xml sparkProperties 编译启动
  • Type-c接口
  • 将Minio设置为Django的默认Storage(django-storages)
  • 深度学习中常见的权重初始化方法
  • 关于 [MenuItem] Hierarchy 右键扩展多选问题
  • linux查看天气预报
  • Canvas指定三角形内部生成随机点
  • GoFrame框架介绍
  • 宏定义介绍
  • mysql双主双从