123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- <?php
- namespace app\index\controller;
- use EasyWeChat\Factory;
- use think\facade\Config;
- use think\facade\Log;
- use think\facade\Cache;
- use app\common\util\wechat\WxAccountConfig;
- class Test extends Base
- {
- private $wechat_config;
- public function __construct()
- {
- parent::__construct();
- $this->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("二维码生成失败");
- }
-
- }
|