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'] : '',
            ],
        ];
    }
相关推荐
JavaDog程序狗20 小时前
【指南】uni-app微信小程序多环境CI-CD完全指南
ci/cd·uni-app·jenkins
PedroQue9921 小时前
uni-router v2.1.0 升级:导航守卫全面支持返回值模式
前端·uni-app
weixin_BYSJ198721 小时前
springboot技能与工具共享小程序---附源码29657
java·javascript·spring boot·python·小程序·django·php
weixin_BYSJ198721 小时前
flask民族服饰饰品商城小程序---附源码37399
java·javascript·spring boot·python·小程序·django·php
show4331 天前
2026小程序工具生态技术趋势:轻量化免费替代桌面软件的路径解析
小程序
码云之上1 天前
小程序 iOS 多输入框焦点乱序脱坑记
ios·微信小程序·taro
ON.LIN2 天前
云边去水印小程序详细搭建教程(附源码)
小程序
2501_915909062 天前
iOS test 测试怎么做?功能、性能、兼容、稳定与安全五类测试指南
android·ios·小程序·https·uni-app·iphone·webview
deng1hao2 天前
2026小微企业企业邮箱选择指南:低成本高性价比方案
网络·科技·小程序
Ai-_Man2 天前
从AI公式到可编辑文档:MathType格式转换技术分析教程
人工智能·ai·小程序