醉梦人间三千年 5 months ago
parent
commit
09ce23360e

+ 2 - 2
app/Http/Controllers/Controller.php

@@ -10,13 +10,13 @@ use Illuminate\Support\Str;
 
 abstract class Controller extends \Illuminate\Routing\Controller
 {
-    public static function success($result = null, $message = null, $code = 0): JsonResponse
+    public static function success($result = null, $message = null, $code = 0, $headers = []): JsonResponse
     {
         if (is_null($result) && is_null($message)) return response()->json();
         $data = ['code' => $code];
         !is_null($result) && ($data = Arr::add($data, 'data', $result));
         !is_null($message) && ($data = Arr::add($data, 'msg', $message));
-        return response()->json($data);
+        return response()->json($data, 200, $headers);
     }
 
     public function fail($message = null, $code = -1): JsonResponse

+ 6 - 0
app/Http/Controllers/Frontend/Client/Member/UserController.php

@@ -63,4 +63,10 @@ class UserController extends Controller
         return self::success($this->service->address());
     }
 
+    public function qrcode(): \Illuminate\Foundation\Application|\Illuminate\Http\Response|\Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory
+    {
+        $result = $this->service->qrcode();
+        return response($result->getString())->header('Content-Type', 'image/png');
+    }
+
 }

+ 9 - 6
app/Http/Controllers/Frontend/Client/Service/OrderController.php

@@ -16,8 +16,11 @@ use App\Http\Requests\Request;
 use App\Http\Services\Frontend\Client\Service\OrderService;
 use App\Models\Coach\User;
 use App\Models\Service\Order;
+use Endroid\QrCode\Builder\Builder;
+use Endroid\QrCode\Writer\PngWriter;
+use Illuminate\Foundation\Application;
 use Illuminate\Http\JsonResponse;
-use SimpleSoftwareIO\QrCode\Facades\QrCode;
+//use SimpleSoftwareIO\QrCode\Facades\QrCode;
 
 class OrderController extends Controller
 {
@@ -103,11 +106,11 @@ class OrderController extends Controller
 
     }
 
-    public function qrCode(){
-        // 生成二维码并直接显示在浏览器
-        $result = QrCode::encoding('UTF-8')->format('png')->size(200)->generate('你要编码的内容');
-        dd($result);
-        return self::success(['html',$result]);
+    public function qrCode(Request $request)
+    {
+        $params = $request->all();
+        $result = $this->orderService->qrCode($params);
+        return response($result->getString())->header('Content-Type', 'image/png');
     }
 
 }

+ 8 - 5
app/Http/Services/Frontend/Client/Auth/WechatAuthenticatedService.php

@@ -51,15 +51,17 @@ class WechatAuthenticatedService extends Service
         //$wechat_user = $user->toArray();
 
         $data = [
-            'openid' => $wechat_user->getId() ?? $wechat_user->getTokenResponse()['openid'],
-            'bindUser' => true
+            'openid' => $wechat_user->getId() ?? $wechat_user->getTokenResponse()['openid']
         ];
         $avatar = $wechat_user->getAvatar();
         $avatar && ($data['avatar'] = $avatar);
         $nickname = $wechat_user->getNickname();
         $nickname && ($data['nickname'] = $nickname);
 
+        \App\Models\Wechat\User::query()->create($data);
+
         $userIsExists = User::query()->where('openid', $data['openid'])->exists();
+        $data['bindUser'] = true;
         if (!$userIsExists) {
 //            $user_id = User::query()->create($data)->id;
 //            $user = User::query()->find($user_id);
@@ -121,8 +123,9 @@ class WechatAuthenticatedService extends Service
 
         if (!$user && $autoRegister) {
             // 获取微信信息
+            $wechatUser = \App\Models\Wechat\User::query()->where(['openid' => $openID])->first();
             // 创建用户信息
-            $user_id = User::query()->create(['openid' => $openID])->id;
+            $user_id = User::query()->create(['nickname' => $wechatUser['nickname'], 'avatar' => $wechatUser['avatar'], 'openid' => $openID])->id;
             $user = User::query()->find($user_id);
         }
         $token = (new AuthService)->store($user);
@@ -167,10 +170,10 @@ class WechatAuthenticatedService extends Service
         $jsapi_ticket = $ticket->getTicket();
 
         // 当前URL
-        $url = request('url',request()->header('referer'));
+        $url = request('url', request()->header('referer'));
 
         // 生成签名
-        $nonceStr = 'xiaoding'.Str::random(20); // 请用随机算法生成
+        $nonceStr = 'xiaoding' . Str::random(20); // 请用随机算法生成
         $timestamp = time(); // 当前时间戳
 
         $signatureStr = "jsapi_ticket={$jsapi_ticket}&noncestr={$nonceStr}&timestamp={$timestamp}&url={$url}";

+ 14 - 0
app/Http/Services/Frontend/Client/Member/UserService.php

@@ -13,6 +13,8 @@ use App\Http\Services\Frontend\Client\Common\AuthService;
 use App\Http\Services\Service;
 use App\Models\Member\Address;
 use App\Models\Member\User;
+use Endroid\QrCode\Builder\Builder;
+use Endroid\QrCode\Writer\PngWriter;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
 
@@ -46,4 +48,16 @@ class UserService extends Service
         $select = ['user_name', 'mobile', 'address', 'lat', 'lng', 'status'];
         return Address::query()->where($where)->select($select)->first();
     }
+
+    public function qrcode(): \Endroid\QrCode\Writer\Result\ResultInterface
+    {
+        $id = Auth::id();
+        $result = Builder::create()
+            ->writer(new PngWriter())
+            ->data("https://h5.xiaoding.niusenyun.com?invite={$id}")
+            ->size(300)
+            ->margin(10)
+            ->build();
+        return $result;
+    }
 }

+ 13 - 0
app/Http/Services/Frontend/Client/Service/OrderService.php

@@ -16,6 +16,8 @@ use App\Models\Member\Address;
 use App\Models\Member\Benefit;
 use App\Models\Service\Order;
 use App\Models\Service\Project;
+use Endroid\QrCode\Builder\Builder;
+use Endroid\QrCode\Writer\PngWriter;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Log;
@@ -251,4 +253,15 @@ class OrderService extends Service
 
         return $orderPayInfo;
     }
+
+    public function qrCode(array $params)
+    {
+        $result = Builder::create()
+            ->writer(new PngWriter())
+            ->data('https://www.baidu.com')
+            ->size(300)
+            ->margin(10)
+            ->build();
+        return $result;
+    }
 }

+ 0 - 1
bootstrap/app.php

@@ -19,7 +19,6 @@ return Application::configure(basePath: dirname(__DIR__))
         apiPrefix: 'frontend'
     )
     ->withMiddleware(function (Middleware $middleware) {
-
         $middleware->use([
             \Illuminate\Http\Middleware\HandleCors::class,
             \App\Exceptions\Handler::class,

+ 1 - 0
composer.json

@@ -7,6 +7,7 @@
     "require": {
         "php": "^8.2",
         "bensampo/laravel-enum": "^6.11",
+        "endroid/qr-code": "^5.0",
         "laravel/framework": "^11.9",
         "laravel/sanctum": "^4.0",
         "laravel/tinker": "^2.9",

+ 76 - 1
composer.lock

@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "b6a5e3681dda977ff366f581b0933e63",
+    "content-hash": "859ff6b848c8bd9da31fd1a530ba2379",
     "packages": [
         {
             "name": "bacon/bacon-qr-code",
@@ -858,6 +858,81 @@
             ],
             "time": "2023-10-06T06:47:41+00:00"
         },
+        {
+            "name": "endroid/qr-code",
+            "version": "5.0.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/endroid/qr-code.git",
+                "reference": "0cc00f0626b73bc71a1ea17af01387d0ac75e046"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/endroid/qr-code/zipball/0cc00f0626b73bc71a1ea17af01387d0ac75e046",
+                "reference": "0cc00f0626b73bc71a1ea17af01387d0ac75e046",
+                "shasum": ""
+            },
+            "require": {
+                "bacon/bacon-qr-code": "^2.0.5",
+                "php": "^8.1"
+            },
+            "conflict": {
+                "khanamiryan/qrcode-detector-decoder": "^1.0.6"
+            },
+            "require-dev": {
+                "endroid/quality": "dev-main",
+                "ext-gd": "*",
+                "khanamiryan/qrcode-detector-decoder": "^1.0.4||^2.0.2",
+                "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-main": "5.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/5.0.7"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/endroid",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-03-08T11:24:40+00:00"
+        },
         {
             "name": "fruitcake/php-cors",
             "version": "v1.3.0",

+ 1 - 1
config/cors.php

@@ -19,7 +19,7 @@ return [
 
     'allowed_methods' => ['*'],
 
-    'allowed_origins' => [env('FRONTEND_URL', 'http://localhost:3000'),env('BACKEND_URL', 'http://localhost:3000'),env('APP_URL')],
+    'allowed_origins' => [env('FRONTEND_URL', 'http://localhost:3000'),env('BACKEND_URL', 'http://localhost:3000'),env('APP_URL'),'http://127.0.0.1:5173'],
 
     'allowed_origins_patterns' => [],
 

+ 2 - 2
database/seeders/SystemUsersTableSeeder.php

@@ -15,8 +15,8 @@ class SystemUsersTableSeeder extends Seeder
      */
     public function run(): void
     {
-        //
-        DB::table('system_users')->insert(['id' => 1, 'username' => 'administrator', 'password' => '$2y$12$FD.RtwKBvPN.9dHRf00/7O3u447/YACyY.daCb9Ctblm3IQPRosTW', 'created_at' => now(), 'updated_at' => now()]);
+        // $2y$12$FD.RtwKBvPN.9dHRf00/7O3u447/YACyY.daCb9Ctblm3IQPRosTW
+        DB::table('system_users')->insert(['id' => 1, 'username' => 'administrator', 'password' => Hash::make('admin'), 'created_at' => now(), 'updated_at' => now()]);
         DB::table('system_users')->insert(['id' => 2, 'username' => 'admin', 'password' => Hash::make('admin'), 'created_at' => now(), 'updated_at' => now()]);
     }
 }

+ 2 - 1
routes/api.php

@@ -21,7 +21,6 @@ Route::prefix('client')->group(function () {
     Route::get('/', function () {
         return ['Laravel' => 'frontend client'];
     });
-
 });
 
 
@@ -74,6 +73,8 @@ Route::prefix('client')->group(function () {
     });
 
     Route::prefix('member')->middleware(['auth:sanctum'])->group(function () {
+        # 邀请码
+        Route::get('qrcode', [ClientMemberUserController::class, 'qrcode']);
         Route::get('address/default', [ClientMemberAddressController::class, 'default']);
         Route::resource('address', ClientMemberAddressController::class);
         Route::post('upload', [ClientMemberToolController::class, "upload"]);