diff --git a/app/index/controller/UserController.php b/app/index/controller/UserController.php index 85025d8..cc1a00e 100644 --- a/app/index/controller/UserController.php +++ b/app/index/controller/UserController.php @@ -11,6 +11,9 @@ use PHPMailer\PHPMailer\PHPMailer; use think\Response; use app\index\model\UserMessage; use app\index\model\SystemNotice; +use Endroid\QrCode\QrCode; +use Endroid\QrCode\Writer\PngWriter; + class UserController extends BaseController { @@ -217,43 +220,43 @@ class UserController extends BaseController } // 微信授权回调 - public function wechatCallback() - { - $code = $this->request->get('code'); - if (!$code) { - return json(['code' => 0, 'msg' => '微信授权失败']); - } + // public function wechatCallback() + // { + // $code = $this->request->get('code'); + // if (!$code) { + // return json(['code' => 0, 'msg' => '微信授权失败']); + // } - try { - // 这里应该调用微信API获取用户信息 - // 示例代码,实际使用时需要替换为真实的微信API调用逻辑 - // $wechatUser = getWechatUserInfo($code); + // try { + // // 这里应该调用微信API获取用户信息 + // // 示例代码,实际使用时需要替换为真实的微信API调用逻辑 + // // $wechatUser = getWechatUserInfo($code); - // 模拟获取到的微信用户信息 - $wechatUser = [ - 'openid' => 'test_openid_' . time(), - 'nickname' => '微信用户', - 'avatar' => '' - ]; + // // 模拟获取到的微信用户信息 + // $wechatUser = [ + // 'openid' => 'test_openid_' . time(), + // 'nickname' => '微信用户', + // 'avatar' => '' + // ]; - // 检查用户是否已注册 - $user = Users::where('openid', $wechatUser['openid'])->find(); - if ($user) { - // 已注册,直接登录 - session('user_id', $user->id); - return json(['code' => 1, 'msg' => '登录成功']); - } + // // 检查用户是否已注册 + // $user = Users::where('openid', $wechatUser['openid'])->find(); + // if ($user) { + // // 已注册,直接登录 + // session('user_id', $user->id); + // return json(['code' => 1, 'msg' => '登录成功']); + // } - // 未注册,返回注册所需信息 - return json([ - 'code' => 2, - 'msg' => '需要注册', - 'data' => $wechatUser - ]); - } catch (\Exception $e) { - return json(['code' => 0, 'msg' => '微信授权失败:' . $e->getMessage()]); - } - } + // // 未注册,返回注册所需信息 + // return json([ + // 'code' => 2, + // 'msg' => '需要注册', + // 'data' => $wechatUser + // ]); + // } catch (\Exception $e) { + // return json(['code' => 0, 'msg' => '微信授权失败:' . $e->getMessage()]); + // } + // } // 发送邮箱验证码 public function sendEmailCode() @@ -356,6 +359,7 @@ class UserController extends BaseController $user->phone = $data['phone'] ?? ''; $user->sex = $data['sex'] ?? 0; $user->qq = $data['qq'] ?? ''; + $user->wechat = $data['wechat'] ?? ''; $user->update_time = time(); if ($user->save()) { @@ -691,4 +695,43 @@ class UserController extends BaseController } } } + + //生成二维码绑定微信 + public function qrcode() + { + // 检查用户是否登录 + if (!cookie('user_account')) { + return json(['code'=> -1,'msg'=> '请先登录']); + } + + // 获取当前用户信息 + $user = Users::where('account', cookie('user_account'))->find(); + if (!$user) { + return json(['code' => -1, 'msg' => '用户信息获取失败']); + } + + // 假设这里生成一个唯一的绑定标识,例如使用用户ID和时间戳组合 + $bindToken = md5($user->id . time()); + + // 生成实际的绑定 URL + $domain = $this->request->domain(); + $bindUrl = "{$domain}/wechat_bind?token={$bindToken}"; + + // 将绑定标识存入缓存,设置有效期,例如30分钟 + cache('wechat_bind_token_' . $user->id, $bindToken, 1800); + + try { + // 创建二维码实例 + $qrCode = QrCode::create($bindUrl); + $writer = new PngWriter(); + + // 生成二维码图片 + $result = $writer->write($qrCode); + $qrCodeDataUri = $result->getDataUri(); + + return json(['code' => 0, 'msg' => '二维码生成成功', 'data' => ['qrcode_url' => $qrCodeDataUri]]); + } catch (\Exception $e) { + return json(['code' => -1, 'msg' => '二维码生成失败: ' . $e->getMessage()]); + } + } } diff --git a/app/index/model/LoginVerification.php b/app/index/model/LoginVerification.php new file mode 100644 index 0000000..f22e0f1 --- /dev/null +++ b/app/index/model/LoginVerification.php @@ -0,0 +1,17 @@ +
- +
@@ -24,14 +25,27 @@
- + +
+
+ +
+ +
+ {if $user.wechat} + + {else} + + {/if}
- +
@@ -84,150 +98,6 @@ - \ No newline at end of file + + + + \ No newline at end of file diff --git a/composer.json b/composer.json index 6d45fb1..7b6bed1 100644 --- a/composer.json +++ b/composer.json @@ -29,7 +29,8 @@ "topthink/think-captcha": "^3.0", "phpoffice/phpspreadsheet": "^1.25", "phpmailer/phpmailer": "^6.9", - "overtrue/wechat": "^5.36" + "overtrue/wechat": "^5.36", + "endroid/qr-code": "^4.6" }, "require-dev": { "symfony/var-dumper": "^4.2", diff --git a/composer.lock b/composer.lock index 2888350..fa4b3f3 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,68 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "59f4c2b91f51ca8dcfb4d292449e4cca", + "content-hash": "50bdaec3985055faecd44de7a6b9a1f3", "packages": [ + { + "name": "bacon/bacon-qr-code", + "version": "2.0.8", + "source": { + "type": "git", + "url": "https://github.com/Bacon/BaconQrCode.git", + "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/8674e51bb65af933a5ffaf1c308a660387c35c22", + "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "dasprid/enum": "^1.0.3", + "ext-iconv": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phly/keep-a-changelog": "^2.1", + "phpunit/phpunit": "^7 | ^8 | ^9", + "spatie/phpunit-snapshot-assertions": "^4.2.9", + "squizlabs/php_codesniffer": "^3.4" + }, + "suggest": { + "ext-imagick": "to generate QR code images" + }, + "type": "library", + "autoload": { + "psr-4": { + "BaconQrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "BaconQrCode is a QR code generator for PHP.", + "homepage": "https://github.com/Bacon/BaconQrCode", + "support": { + "issues": "https://github.com/Bacon/BaconQrCode/issues", + "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.8" + }, + "time": "2022-12-07T17:46:57+00:00" + }, { "name": "composer/pcre", "version": "3.3.2", @@ -91,6 +151,62 @@ ], "time": "2024-11-12T16:29:46+00:00" }, + { + "name": "dasprid/enum", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/DASPRiD/Enum.git", + "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/6faf451159fb8ba4126b925ed2d78acfce0dc016", + "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1 <9.0" + }, + "require-dev": { + "phpunit/phpunit": "^7 | ^8 | ^9", + "squizlabs/php_codesniffer": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "DASPRiD\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "PHP 7.1 enum implementation", + "keywords": [ + "enum", + "map" + ], + "support": { + "issues": "https://github.com/DASPRiD/Enum/issues", + "source": "https://github.com/DASPRiD/Enum/tree/1.0.5" + }, + "time": "2023-08-25T16:18:39+00:00" + }, { "name": "easywechat-composer/easywechat-composer", "version": "1.4.1", @@ -145,6 +261,84 @@ }, "time": "2021-07-05T04:03:22+00:00" }, + { + "name": "endroid/qr-code", + "version": "4.6.1", + "source": { + "type": "git", + "url": "https://github.com/endroid/qr-code.git", + "reference": "a75c913b0e4d6ad275e49a2c1de1cacffc6c2184" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/endroid/qr-code/zipball/a75c913b0e4d6ad275e49a2c1de1cacffc6c2184", + "reference": "a75c913b0e4d6ad275e49a2c1de1cacffc6c2184", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "bacon/bacon-qr-code": "^2.0.5", + "php": "^7.4||^8.0" + }, + "require-dev": { + "endroid/quality": "dev-master", + "ext-gd": "*", + "khanamiryan/qrcode-detector-decoder": "^1.0.4", + "setasign/fpdf": "^1.8.2" + }, + "suggest": { + "ext-gd": "Enables you to write PNG images", + "khanamiryan/qrcode-detector-decoder": "Enables you to use the image validator", + "roave/security-advisories": "Makes sure package versions with known security issues are not installed", + "setasign/fpdf": "Enables you to use the PDF writer" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Endroid\\QrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeroen van den Enden", + "email": "info@endroid.nl" + } + ], + "description": "Endroid QR Code", + "homepage": "https://github.com/endroid/qr-code", + "keywords": [ + "code", + "endroid", + "php", + "qr", + "qrcode" + ], + "support": { + "issues": "https://github.com/endroid/qr-code/issues", + "source": "https://github.com/endroid/qr-code/tree/4.6.1" + }, + "funding": [ + { + "url": "https://github.com/endroid", + "type": "github" + } + ], + "time": "2022-10-26T08:48:17+00:00" + }, { "name": "ezyang/htmlpurifier", "version": "v4.18.0", diff --git a/config/wechat.php b/config/wechat.php deleted file mode 100644 index 630952c..0000000 --- a/config/wechat.php +++ /dev/null @@ -1,5 +0,0 @@ -return [ - 'app_id' => env('wechat.app_id'), - 'secret' => env('wechat.secret'), - // 其他配置项... -]; \ No newline at end of file