diff --git a/README.md b/README.md index 3f14510b..9393fa9d 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,11 @@ ## Require - php >= 8.0 + + +## Step + +- `composer install` +- `cp .env.example .env`, 并修改配置文件 +- `php artisan migrate --seed` +- `php artisan storage:link` \ No newline at end of file diff --git a/app/Endpoint/Api/Http/Controllers/ShareBgController.php b/app/Endpoint/Api/Http/Controllers/ShareBgController.php index 291596de..83e35bc9 100644 --- a/app/Endpoint/Api/Http/Controllers/ShareBgController.php +++ b/app/Endpoint/Api/Http/Controllers/ShareBgController.php @@ -3,9 +3,12 @@ namespace App\Endpoint\Api\Http\Controllers; use App\Endpoint\Api\Http\Resources\ShareBgResource; -use App\Models\ShareBg; +use App\Models\{ShareBg, User}; use Illuminate\Http\Request; use SimpleSoftwareIO\QrCode\Facades\QrCode; +use Illuminate\Support\Facades\Storage; +use App\Exceptions\BizException; +use EasyWeChat\Kernel\Http\StreamResponse; class ShareBgController extends Controller { @@ -22,9 +25,45 @@ class ShareBgController extends Controller public function userQrCode(Request $request) { - $inviteUri = app_settings('app.invite_uri').'/register?code='; + $user = $request->user(); + $qr_code = $user->userInfo->invite_qrcode; + + if (!$qr_code || $request->input('force')) { + $disk = Storage::disk('public'); + $app = $this->getWechatApp(); + $scene = http_build_query([ + 'invite_code' => $user->userInfo->code, + ]); + + $response = $app->app_code->get($scene, [ + 'page' => 'pages/welcome/index', + 'check_path' => false, + // develop: 开发版, trial: 体验版 + 'env_version' => app()->isProduction() ? 'release' : $request->input('env_version', 'trial'), + 'width' => $request->input('width', 200), + ]); + + if ($response instanceof StreamResponse) { + $filepath = 'invite-qrocde'; + $filename = $user->id . '.png'; + $response->saveAs($disk->path($filepath), $filename); + + $qr_code = $disk->url($filepath . '/' . $filename); + $user->userInfo->update([ + 'invite_qrcode' => $qr_code + ]); + } else { + throw new BizException('生成失败'); + } + } + return response()->json([ - 'qr_code' => base64_encode(QrCode::format('png')->size(100)->margin(0)->generate($inviteUri.$request->user()->userInfo?->code)), + 'qr_code' => $qr_code, ]); } + + protected function getWechatApp($getway = 'default') + { + return \EasyWeChat\Factory::miniProgram(config('wechat.mini_program.' . $getway)); + } } diff --git a/app/Models/UserInfo.php b/app/Models/UserInfo.php index 2b8cbdde..238acc25 100644 --- a/app/Models/UserInfo.php +++ b/app/Models/UserInfo.php @@ -44,7 +44,8 @@ class UserInfo extends Model 'path', 'growth_value', 'real_inviter_id', - 'is_company' + 'is_company', + 'invite_qrcode', ]; /** diff --git a/database/migrations/2022_05_06_133819_add_role_to_user_infos.php b/database/migrations/2022_05_06_133819_add_role_to_user_infos.php index ccb51b84..203a3712 100644 --- a/database/migrations/2022_05_06_133819_add_role_to_user_infos.php +++ b/database/migrations/2022_05_06_133819_add_role_to_user_infos.php @@ -16,6 +16,7 @@ class AddRoleToUserInfos extends Migration Schema::table('user_infos', function (Blueprint $table) { $table->decimal('profit', 12, 2)->default(0)->comment('累计收益'); $table->tinyInteger('is_company')->default(0)->comment('是否员工'); + $table->string('invite_qrcode')->nullable()->comment('小程序邀请码'); }); }