70 lines
2.2 KiB
PHP
70 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Endpoint\Api\Http\Controllers;
|
|
|
|
use App\Endpoint\Api\Http\Resources\ShareBgResource;
|
|
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
|
|
{
|
|
/**
|
|
* 分享背景图
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
return ShareBgResource::collection(ShareBg::where('is_use', true)->orderBy('sort', 'desc')->get());
|
|
}
|
|
|
|
public function userQrCode(Request $request)
|
|
{
|
|
$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->getUnlimit($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' => $qr_code,
|
|
]);
|
|
}
|
|
|
|
protected function getWechatApp($getway = 'default')
|
|
{
|
|
return \EasyWeChat\Factory::miniProgram(config('wechat.mini_program.' . $getway));
|
|
}
|
|
}
|