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

前端部分

点击按钮,获取手机号

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

传入openid和code

javascript 复制代码
			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的核心类

javascript 复制代码
    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);
    }

解析出手机号

javascript 复制代码
    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'] : '',
            ],
        ];
    }
相关推荐
V+zmm101341 小时前
微信点餐系统小程序ssm+论文源码调试讲解
java·数据库·微信小程序·小程序·毕业设计
寰宇软件4 小时前
PHP填表统计预约打卡表单系统小程序
小程序·uni-app·vue·php
启山智软4 小时前
【电商系统架构的深度剖析与技术选型】
java·微信小程序
林涧泣13 小时前
【Uniapp-Vue3】使用uni.$emit和$on页面通讯实现发布成功即时更新数据
前端·vue.js·uni-app
林涧泣13 小时前
【Uniapp-Vue3】uniCloud获取数据时限制字段
uni-app
学如逆水,不进则退13 小时前
uniapp引入cloudflare人机验证
uni-app
吴秋霖13 小时前
某音小程序反编译签名加密静态分析
python·算法·小程序
西农小陈14 小时前
Python-基于PyQt5,Pillow,pathilb,imageio,moviepy,sys的GIF(动图)制作工具(进阶版)
开发语言·图像处理·python·小程序·pycharm·pyqt·pillow
计算机-秋大田15 小时前
云上考场微信小程序的设计与实现(LW+源码+讲解)
java·前端·spring boot·微信小程序·小程序·课程设计
不知名12316 小时前
基于微信小程序的校园水电费管理平台设计与实现
微信小程序·小程序