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'] : '',
            ],
        ];
    }
相关推荐
说私域4 小时前
内容力重塑品牌增长:开源AI大模型驱动下的智能名片与S2B2C商城赋能抖音生态种草范式
人工智能·小程序·开源·零售
Jiaberrr4 小时前
uniapp 安卓 APP 后台持续运行(保活)的尝试办法
android·前端·javascript·uni-app·app·保活
不老刘4 小时前
uniapp+vue3实现CK通信协议(基于jjc-tcpTools)
前端·javascript·uni-app
前端缘梦5 小时前
微信小程序登录方案实践-从账号体系到用户信息存储
前端·微信小程序
疯狂的沙粒6 小时前
uni-app 如何实现选择和上传非图像、视频文件?
前端·javascript·uni-app
^Rocky6 小时前
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
uni-app·腾讯云·媒体
$程6 小时前
Uniapp 二维码生成与解析完整教程
前端·uni-app
tryCbest6 小时前
UniApp系列
uni-app·web
iOS阿玮8 小时前
社交的本质是价值交换,请不要浪费别人的时间。
uni-app·app·apple
monika_yu8 小时前
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uni-app