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 @@
+
+
@@ -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