wechat_config = WxAccountConfig::getMiniProgramConfig(); $this->wechat_config['app_id'] = Config::get('wechat.request.app_id'); //微信appid,推荐写在配置文件或环境变量 $this->wechat_config['secret'] = Config::get('wechat.request.secret'); //微信appid对应secret,推荐写在配置文件或环境变量 } //二维码被扫判断是否已登录 public function miniProgram_qrcode_login(){ $my_token = trim(input('my_token', ''));//二维码token //获取缓存中的对应token $check = Cache::get('mini_logged_'.$my_token); $id = intval($check); if($id==0){ $this->error('未登录'); } /* * 获取账号信息result 业务部分 */ $this->success($result, "登录成功"); } //小程序已扫码标记 public function miniProgram_scan(){ $my_token = trim(input('my_token', ''));//二维码token if($my_token != ''){//通过扫二维码登录 $check = Cache::get('mini_login_'.$my_token); if(!isset($check)){ //113可以自定义 $this->error('二维码失效', 113); } Cache::set('mini_login_'.$my_token, 1, 60);//把二维码标记为已扫 $this->success([], "扫描成功"); } $this->error("二维码token不能为空"); } //小程序扫码后请求登录接口 public function miniProgram_login(){ $my_token = trim(input('my_token', ''));//二维码token $code = trim(input('code', ''));//微信码 if($code == ''){ $this->error("微信码不能为空"); } $app = Factory::miniProgram($this->wechat_config); //$result = $app->auth->session($code); $params = ['code'=>$code]; $result = $app->plugin->httpPostJson('wxa/business/getuserphonenumber', $params); if (!isset($result['phone_info']['phoneNumber'])) { $this->error('获取手机号失败'); } $phone = $result['phone_info']['phoneNumber']; /* * 获取登录账号id 业务部分 */ if($my_token != ''){//通过扫二维码登录 $check = Cache::get('mini_logged_'.$my_token); Cache::set('mini_login_'.$my_token, 1, 60);//把二维码标记为已扫 if(isset($check)){//已登录 $id = intval($check); /* * 获取账号信息result 业务部分 */ $this->success($result, "登录成功"); } else{ $check = Cache::get('mini_login_'.$my_token); if(!isset($check)){ //113可以自定义 $this->error('二维码失效', 113); } else { /* * 获取账号信息result 业务部分 */ Cache::set('mini_logged_'.$my_token, $id, 3600*24);//把二维码绑定扫码id $this->success($result, "登录成功"); } } } //直接授权登录 /* * 获取账号信息result 业务部分 */ $this->success($result, "登录成功"); } //页面判断二维码是否已被扫 public function miniProgram_qrcode_check(){ $my_token = trim(input('my_token', ''));//二维码token //获取缓存中的对应token $check = Cache::get('mini_login_'.$my_token); //其中113与114可以自定义 if(!isset($check)){ $this->error('二维码失效', 113); } else if($check == 1){ $this->error('二维码已被扫', 114); } $this->success([], "二维码未被扫"); } //获取小程序登录二维码图片文件 public function miniProgram_qrcode(){ $page = trim(input('page', ''));//前端定义的页面 $width = intval(input('width', 600));//前端定义的二维码的宽度,单位 px,最小 280,最大 1280 $env_version = trim(input('env_version', 'release'));//二维码版本,正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。 //判断wechat.log文件是否存在,不存在则创建 // $fileHelp = new FileHelp(); // if(!is_file($fileHelp->qrcode_path.'wechat.log')){ // file_put_contents($fileHelp->qrcode_path.'wechat.log', ""); // } $config = [ 'app_id' => Config::get('wechat.request.app_id'), //微信appid,推荐写在配置文件或环境变量 'secret' => Config::get('wechat.request.secret'), //微信appid对应secret,推荐写在配置文件或环境变量 // 下面为可选项 // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名 'response_type' => 'array', // 'log' => [ // 'level' => 'debug', // 'file' => $fileHelp->qrcode_path.'wechat.log', // ], ]; $filename = time().'_qrcode.jpg';//自定义二维码图片文件名 $app = Factory::miniProgram($config); $opt = [ 'page' => $page, 'width' => $width, 'env_version' => $env_version, ]; //生成二维码token $my_token = substr(md5(time()), 0, 16); //token写入缓存 Cache::set('mini_login_'.$my_token, 0, 60); $scene = $my_token; $response = $app->app_code->getUnlimit($scene, $opt); Log::info(' scene:'.json_encode($scene).' opt:'.json_encode($opt).' response:'.json_encode($response)); // 保存小程序码到文件 if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) { //目录不存在则创建 // if(!is_dir($fileHelp->qrcode_path)){ // mkdir($fileHelp->qrcode_path, 0777); // } //保存二维码图片文件 $new_filename = $response->saveAs($fileHelp->qrcode_path, $filename); //转换图片地址 $result['qrcode_url'] = $fileHelp->getQrcodeUrlByPath($fileHelp->qrcode_path.$new_filename); $result['my_token'] = $my_token; //生成二维码成功,返回图片与token $this->success($result, "生成成功"); } $this->error("二维码生成失败"); } }