浏览代码

バンクチェック対応

master
sosuke.iwabuchi 1年前
父节点
当前提交
69179a12bc
共有 13 个文件被更改,包括 390 次插入5 次删除
  1. +21
    -3
      app/Console/Commands/PoolTransfer/MoveToPool.php
  2. +60
    -0
      app/Http/Controllers/Web/BanckCheck/EntryController.php
  3. +46
    -0
      app/Http/Controllers/Web/BanckCheck/EntryParam.php
  4. +100
    -0
      app/Http/Controllers/Web/BanckCheck/PaymentInfoController.php
  5. +56
    -0
      app/Http/Controllers/Web/BanckCheck/PaymentInfoParam.php
  6. +82
    -0
      app/Kintone/Models/BankCheckResult.php
  7. +1
    -0
      app/Kintone/Models/DropDown/PoolTransferHistory/TransferMethod.php
  8. +4
    -0
      app/Kintone/Models/PoolTransferHistory.php
  9. +7
    -2
      app/Logic/PoolTransferManager.php
  10. +3
    -0
      config/custom.php
  11. +1
    -0
      config/kintone.php
  12. +5
    -0
      resources/views/bank-check/ok.blade.php
  13. +4
    -0
      routes/web.php

+ 21
- 3
app/Console/Commands/PoolTransfer/MoveToPool.php 查看文件

@@ -5,12 +5,14 @@ namespace App\Console\Commands\PoolTransfer;
use App\Console\Commands\BaseCommand; use App\Console\Commands\BaseCommand;
use App\Exceptions\SkipException; use App\Exceptions\SkipException;
use App\Kintone\KintoneRecordQueryOperator; use App\Kintone\KintoneRecordQueryOperator;
use App\Kintone\Models\BankCheckResult;
use App\Kintone\Models\DropDown\SmbcPayment\SmbcPaymentStatus; use App\Kintone\Models\DropDown\SmbcPayment\SmbcPaymentStatus;
use App\Kintone\Models\SmbcAccountTransferResult; use App\Kintone\Models\SmbcAccountTransferResult;
use App\Kintone\Models\SmbcPayment; use App\Kintone\Models\SmbcPayment;
use App\Kintone\Models\YuchoPaymentResult; use App\Kintone\Models\YuchoPaymentResult;
use App\Logic\PoolTransferManager; use App\Logic\PoolTransferManager;
use App\Util\CollectionUtil; use App\Util\CollectionUtil;
use App\Util\DateUtil;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;


class MoveToPool extends BaseCommand class MoveToPool extends BaseCommand
@@ -75,7 +77,7 @@ class MoveToPool extends BaseCommand
return self::RESULTCODE_SUCCESS; return self::RESULTCODE_SUCCESS;
} }


public function handleData(YuchoPaymentResult|SmbcPayment|SmbcAccountTransferResult $payment)
public function handleData(YuchoPaymentResult|SmbcPayment|SmbcAccountTransferResult|BankCheckResult $payment)
{ {


$manager = new PoolTransferManager(); $manager = new PoolTransferManager();
@@ -83,12 +85,12 @@ class MoveToPool extends BaseCommand
} }


/** /**
* @return Collection<int ,YuchoPaymentResult|SmbcPayment|SmbcAccountTransferResult>
* @return Collection<int ,YuchoPaymentResult|SmbcPayment|SmbcAccountTransferResult|BankCheckResult>
*/ */
public function getTargets() public function getTargets()
{ {
/** /**
* @var Collection<int ,YuchoPaymentResult|SmbcPayment|SmbcAccountTransferResult>
* @var Collection<int ,YuchoPaymentResult|SmbcPayment|SmbcAccountTransferResult|BankCheckResult>
*/ */
$ret = collect(); $ret = collect();


@@ -119,6 +121,22 @@ class MoveToPool extends BaseCommand
CollectionUtil::pushAll($ret, $targets); CollectionUtil::pushAll($ret, $targets);
$this->outputInfo(sprintf("口座振替:%d件", $targets->count())); $this->outputInfo(sprintf("口座振替:%d件", $targets->count()));


// バンクチェック
$query = BankCheckResult::getQuery()->whereNotIn(BankCheckResult::FIELD_POOL_DONE, ["済"])
->whereNotNull(BankCheckResult::FIELD_CUSTOMER_CODE)
->where(BankCheckResult::FIELD_REMAINING_AMOUNT, 0, KintoneRecordQueryOperator::LE);
$targets = BankCheckResult::getAccess()->all($query);
CollectionUtil::pushAll($ret, $targets);
$this->outputInfo(sprintf("バンクチェック 支払完了:%d件", $targets->count()));

$query = BankCheckResult::getQuery()->whereNotIn(BankCheckResult::FIELD_POOL_DONE, ["済"])
->whereNotNull(BankCheckResult::FIELD_CUSTOMER_CODE)
->where(BankCheckResult::FIELD_REMAINING_AMOUNT, 0, KintoneRecordQueryOperator::NEQ)
->whereDate(BankCheckResult::FIELD_PAYMENT_EXPIRES_DATE, DateUtil::now(), KintoneRecordQueryOperator::LT);
$targets = BankCheckResult::getAccess()->all($query);
CollectionUtil::pushAll($ret, $targets);
$this->outputInfo(sprintf("バンクチェック 支払期限切れ:%d件", $targets->count()));

return $ret; return $ret;
} }
} }

+ 60
- 0
app/Http/Controllers/Web/BanckCheck/EntryController.php 查看文件

@@ -0,0 +1,60 @@
<?php

namespace App\Http\Controllers\Web\BanckCheck;

use App\Http\Controllers\Web\WebController;
use App\Kintone\Models\BankCheckResult;
use App\Util\DateUtil;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Carbon;
use Illuminate\Support\Str;

class EntryController extends WebController
{

public function name(): string
{
return "バンクチェック 受付";
}

public function description(): string
{
return "バンクチェック 受付";
}


public function __construct(protected EntryParam $param)
{
parent::__construct();
}

protected function run(Request $request): Response
{
$param = $this->param;

if ($param->token !== config('custom.bank-check.token')) {
abort(403);
}

$model = new BankCheckResult();

$model->customerCode = $param->customerCode;
$model->entryRecordNo = $param->entryRecordNo;
$model->shopOrderNo = $param->cod;
$model->paymentNo = $param->gid;
$model->orderCode = $param->god;
$model->entryResult = $param->rst;
$model->entryErrorCode = $param->ec;
$model->paymentPlanAmount = intval($param->am);
$model->paymentExpiresDate = Carbon::createFromFormat("Ymd", $param->exp);

$requestArr = $request->toArray();
unset($requestArr["token"]);
$model->dataEntry = json_encode($requestArr);

$model->save();

return response()->view('bank-check.ok');
}
}

+ 46
- 0
app/Http/Controllers/Web/BanckCheck/EntryParam.php 查看文件

@@ -0,0 +1,46 @@
<?php

namespace App\Http\Controllers\Web\BanckCheck;

use App\Http\Controllers\Web\BaseParam;

/**
* @property string $gid 決済受付時に発行された決済番号
* @property string $rst 決済結果(1:OK 2:NG)
* @property string $ap 入金:完了(BAN_SAL)
* @property string $ec エラーコード
* @property string $god オーダーコード
* @property string $cod 店舗側オーダー番号
* @property string $am 決済金額
* @property string $tx 税金額
* @property string $sf 送料
* @property string $ta 合計金額
* @property string $bank 振込先口座情報(ドット「.」区切りの文字列)[銀行コード].[銀行名].[支店コード].[支店名].[口座種別].[口座番号].[口座名義]
* @property string $exp 支払期限(yyyymmdd形式)
* @property string $customerCode カスタム-顧客コード
* @property int $entryRecordNo カスタム-定期申込レコード番号
* @property string $token カスタム-トークン
*/
class EntryParam extends BaseParam
{
public function rules(): array
{
return [
'gid' => $this->str(),
'rst' => $this->str(),
'ap' => $this->str(),
'ec' => $this->str(),
'god' => $this->str(),
'cod' => $this->str(),
'am' => $this->numeric(),
'tx' => $this->numeric(),
'sf' => $this->numeric(),
'ta' => $this->numeric(),
'bank' => $this->str(),
'exp' => $this->str(),
'customer_code' => $this->str(),
'entry_record_no' => $this->numeric(),
'token' => $this->str(),
];
}
}

+ 100
- 0
app/Http/Controllers/Web/BanckCheck/PaymentInfoController.php 查看文件

@@ -0,0 +1,100 @@
<?php

namespace App\Http\Controllers\Web\BanckCheck;

use App\Exceptions\AppCommonException;
use App\Http\Controllers\Web\WebController;
use App\Kintone\Models\BankCheckResult;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Carbon;

class PaymentInfoController extends WebController
{

public function name(): string
{
return "バンクチェック 決済結果";
}

public function description(): string
{
return "バンクチェック 決済結果";
}


public function __construct(protected PaymentInfoParam $param)
{
parent::__construct();
}

protected function run(Request $request): Response
{
$param = $this->param;
logger("リクエスト受信 bankcheck");

if ($param->token !== config('custom.bank-check.token')) {
abort(403);
}

if ($param->ap === "BANK") {
$this->handleEntry();
} else if ($param->ap === "BAN_SAL") {
$this->handlePayment();
}


return response()->view('bank-check.ok');
}

private function handleEntry()
{
$param = $this->param;
$model = new BankCheckResult();

$model->customerCode = $param->customerCode;
$model->entryRecordNo = $param->entryRecordNo;
$model->shopOrderNo = $param->cod;
$model->paymentNo = $param->gid;
$model->orderCode = $param->god;
$model->entryResult = $param->rst;
$model->entryErrorCode = $param->ec;
$model->paymentPlanAmount = intval($param->am);
$model->paymentExpiresDate = Carbon::createFromFormat("Ymd", $param->exp);

$requestArr = request()->toArray();
unset($requestArr["token"]);
$model->dataEntry = json_encode($requestArr);

$model->save();
}

private function handlePayment()
{
$param = $this->param;

$model = BankCheckResult::getAccess()
->first(BankCheckResult::getQuery()->where(
BankCheckResult::FIELD_SHOP_ORDER_NO,
$param->cod
));

if ($model === null) {
throw new AppCommonException(sprintf(
"存在しない店舗側オーダー番号:[%s]",
$param->cod
));
}

$model->paymentResult = $param->rst;
$model->paymentErrorCode = $param->ec;
$model->paymentAmount = intval($param->nk);
$model->paymentDate = Carbon::createFromFormat("Ymd", $param->nkd);

$requestArr = request()->toArray();
unset($requestArr["token"]);
$model->dataResult = json_encode($requestArr);

$model->save();
}
}

+ 56
- 0
app/Http/Controllers/Web/BanckCheck/PaymentInfoParam.php 查看文件

@@ -0,0 +1,56 @@
<?php

namespace App\Http\Controllers\Web\BanckCheck;

use App\Http\Controllers\Web\BaseParam;

/**
* @property string $gid 決済受付時に発行された決済番号
* @property string $rst 決済結果(1:OK 2:NG)
* @property string $ap 入金:完了(BAN_SAL)
* @property string $ec エラーコード
* @property string $god オーダーコード
* @property string $cod 店舗側オーダー番号
* @property string $am 決済金額
* @property string $tx 税金額
* @property string $sf 送料
* @property string $ta 合計金額
* @property string $id 発行ID
* @property string $ps 発行パスワード
* @property string $mf マッチングフラグ(1:マッチ2:過少3:過剰)
* @property string $nk 入金金額
* @property string $nkd 入金日(yyyymmdd形式)
* @property string $bank 振込先口座情報(ドット「.」区切りの文字列)[銀行コード].[銀行名].[支店コード].[支店名].[口座種別].[口座番号].[口座名義]
* @property string $exp 支払期限(yyyymmdd形式)
* @property string $customerCode カスタム-顧客コード
* @property int $entryRecordNo カスタム-定期申込レコード番号
* @property string $token カスタム-トークン
*/
class PaymentInfoParam extends BaseParam
{
public function rules(): array
{
return [
'gid' => $this->str(),
'rst' => $this->str(),
'ap' => $this->str(),
'ec' => $this->str(true),
'god' => $this->str(),
'cod' => $this->str(),
'am' => $this->numeric(),
'tx' => $this->numeric(),
'sf' => $this->numeric(),
'ta' => $this->numeric(),
'id' => $this->str(true),
'ps' => $this->str(true),
'mf' => $this->str(true),
'nk' => $this->str(true),
'nkd' => $this->str(true),
'bank' => $this->str(true),
'exp' => $this->str(),
'customer_code' => $this->str(),
'entry_record_no' => $this->numeric(),
'token' => $this->str(),
];
}
}

+ 82
- 0
app/Kintone/Models/BankCheckResult.php 查看文件

@@ -0,0 +1,82 @@
<?php

namespace App\Kintone\Models;

use Illuminate\Support\Carbon;

/**
* アプリ名 バンクチェック入金結果
*
* @property string $customerCode 顧客コード
* @property string $customerName 顧客名
* @property string $shopOrderNo 店舗側オーダー番号
* @property int $entryRecordNo 定期申込レコード番号
* @property ?string $paymentNo 決済番号
* @property ?string $orderCode オーダーコード
* @property ?string $entryResult 受付結果
* @property ?string $entryErrorCode 受付エラーコード
* @property ?int $paymentPlanAmount 予定金額
* @property ?Carbon $paymentExpiresDate 支払期限
* @property ?string $paymentResult 決済結果
* @property ?string $paymentErrorCode 決済エラーコード
* @property ?Carbon $paymentDate 入金日
* @property ?int $paymentAmount 入金金額
* @property string[] $poolDone プール済み
* @property ?string $dataEntry 受信電文_受付
* @property ?string $dataResult 受信電文_結果
*/
class BankCheckResult extends KintoneModel
{
const CONFIG_KEY = "KINTONE_APP_BANK_CHECK_RESULT";

const FIELD_CUSTOMER_CODE = "顧客コード";
const FIELD_CUSTOMER_NAME = "顧客名";
const FIELD_SHOP_ORDER_NO = "店舗側オーダー番号";
const FIELD_ENTRY_RECORD_NO = "定期申込レコード番号";
const FIELD_PAYMENT_NO = "決済番号";
const FIELD_ORDER_CODE = "オーダーコード";
const FIELD_ENTRY_RESULT = "受付結果";
const FIELD_ENTRY_ERROR_CODE = "受付エラーコード";
const FIELD_PAYMENT_PLAN_AMOUNT = "予定金額";
const FIELD_PAYMENT_EXPIRES_DATE = "支払期限";
const FIELD_PAYMENT_RESULT = "決済結果";
const FIELD_PAYMENT_ERROR_CODE = "決済エラーコード";
const FIELD_PAYMENT_DATE = "入金日";
const FIELD_PAYMENT_AMOUNT = "入金金額";
const FIELD_REMAINING_AMOUNT = "残金";
const FIELD_POOL_DONE = "プール済み";
const FIELD_DATA_ENTRY = "受信電文_受付";
const FIELD_DATA_RESULT = "受信電文_結果";


protected const FIELDS = [
...parent::FIELDS,
self::FIELD_CUSTOMER_CODE => FieldType::NUMBER,
self::FIELD_CUSTOMER_NAME => FieldType::SINGLE_LINE_TEXT,
self::FIELD_SHOP_ORDER_NO => FieldType::SINGLE_LINE_TEXT,
self::FIELD_ENTRY_RECORD_NO => FieldType::NUMBER,
self::FIELD_PAYMENT_NO => FieldType::SINGLE_LINE_TEXT,
self::FIELD_ORDER_CODE => FieldType::SINGLE_LINE_TEXT,
self::FIELD_ENTRY_RESULT => FieldType::SINGLE_LINE_TEXT,
self::FIELD_ENTRY_ERROR_CODE => FieldType::SINGLE_LINE_TEXT,
self::FIELD_PAYMENT_PLAN_AMOUNT => FieldType::NUMBER,
self::FIELD_PAYMENT_EXPIRES_DATE => FieldType::DATE,
self::FIELD_PAYMENT_RESULT => FieldType::SINGLE_LINE_TEXT,
self::FIELD_PAYMENT_ERROR_CODE => FieldType::SINGLE_LINE_TEXT,
self::FIELD_PAYMENT_DATE => FieldType::DATE,
self::FIELD_PAYMENT_AMOUNT => FieldType::NUMBER,
self::FIELD_REMAINING_AMOUNT => FieldType::NUMBER,
self::FIELD_POOL_DONE => FieldType::CHECK_BOX,
self::FIELD_DATA_ENTRY => FieldType::MULTI_LINE_TEXT,
self::FIELD_DATA_RESULT => FieldType::MULTI_LINE_TEXT,
];

protected const FIELD_NAMES = [
...parent::FIELD_NAMES,
];

protected const RELATIONS = [
Customer::class,
SeasonTicketContractEntry::class,
];
}

+ 1
- 0
app/Kintone/Models/DropDown/PoolTransferHistory/TransferMethod.php 查看文件

@@ -7,4 +7,5 @@ abstract class TransferMethod
const ACCOUNT_TRANSFER = "口座振替"; const ACCOUNT_TRANSFER = "口座振替";
const YUCHO = "ゆうちょ振込"; const YUCHO = "ゆうちょ振込";
const CVS = "コンビニ支払"; const CVS = "コンビニ支払";
const BANK_CHECK = "バンクチェック";
} }

+ 4
- 0
app/Kintone/Models/PoolTransferHistory.php 查看文件

@@ -19,6 +19,7 @@ use Illuminate\Support\Carbon;
* @property ?int incomeAccountTransferResultRecordNo * @property ?int incomeAccountTransferResultRecordNo
* @property ?int incomeYuchoTransferRecordNo * @property ?int incomeYuchoTransferRecordNo
* @property ?int incomeCvsPaymentRecordNo * @property ?int incomeCvsPaymentRecordNo
* @property ?int incomeBankCheckPaymentRecordNo
* @property ?int paymentPlanRecordNo * @property ?int paymentPlanRecordNo
* @property ?int seasonContractRecordNo * @property ?int seasonContractRecordNo
*/ */
@@ -38,6 +39,7 @@ class PoolTransferHistory extends KintoneModel
const FIELD_INCOME_ACCOUNT_TRANSFER_RESULT_RECORD_NO = "口座振替結果レコード番号"; const FIELD_INCOME_ACCOUNT_TRANSFER_RESULT_RECORD_NO = "口座振替結果レコード番号";
const FIELD_INCOME_YUCHO_TRANSFER_RECORD_NO = "ゆうちょ振込レコード番号"; const FIELD_INCOME_YUCHO_TRANSFER_RECORD_NO = "ゆうちょ振込レコード番号";
const FIELD_INCOME_CVS_PAYMENT_RECORD_NO = "コンビニ支払レコード番号"; const FIELD_INCOME_CVS_PAYMENT_RECORD_NO = "コンビニ支払レコード番号";
const FIELD_INCOME_BANK_CHECK_PAYMENT_RECORD_NO = "バンクチェック支払レコード番号";
const FIELD_PAYMENT_PLAN_RECORD_NO = "入金予定結果レコード番号"; const FIELD_PAYMENT_PLAN_RECORD_NO = "入金予定結果レコード番号";
const FIELD_SEASON_CONTRACT_RECORD_NO = "車室情報管理レコード番号"; const FIELD_SEASON_CONTRACT_RECORD_NO = "車室情報管理レコード番号";


@@ -56,6 +58,7 @@ class PoolTransferHistory extends KintoneModel
self::FIELD_INCOME_ACCOUNT_TRANSFER_RESULT_RECORD_NO => FieldType::NUMBER, self::FIELD_INCOME_ACCOUNT_TRANSFER_RESULT_RECORD_NO => FieldType::NUMBER,
self::FIELD_INCOME_YUCHO_TRANSFER_RECORD_NO => FieldType::NUMBER, self::FIELD_INCOME_YUCHO_TRANSFER_RECORD_NO => FieldType::NUMBER,
self::FIELD_INCOME_CVS_PAYMENT_RECORD_NO => FieldType::NUMBER, self::FIELD_INCOME_CVS_PAYMENT_RECORD_NO => FieldType::NUMBER,
self::FIELD_INCOME_BANK_CHECK_PAYMENT_RECORD_NO => FieldType::NUMBER,
self::FIELD_PAYMENT_PLAN_RECORD_NO => FieldType::NUMBER, self::FIELD_PAYMENT_PLAN_RECORD_NO => FieldType::NUMBER,
self::FIELD_SEASON_CONTRACT_RECORD_NO => FieldType::NUMBER, self::FIELD_SEASON_CONTRACT_RECORD_NO => FieldType::NUMBER,
]; ];
@@ -71,5 +74,6 @@ class PoolTransferHistory extends KintoneModel
SmbcAccountTransferResult::class, SmbcAccountTransferResult::class,
Pool::class, Pool::class,
PaymentPlan::class, PaymentPlan::class,
BankCheckResult::class,
]; ];
} }

+ 7
- 2
app/Logic/PoolTransferManager.php 查看文件

@@ -3,6 +3,7 @@
namespace App\Logic; namespace App\Logic;


use App\Exceptions\SkipException; use App\Exceptions\SkipException;
use App\Kintone\Models\BankCheckResult;
use App\Kintone\Models\DropDown\PoolTransferHistory\TransferMethod; use App\Kintone\Models\DropDown\PoolTransferHistory\TransferMethod;
use App\Kintone\Models\DropDown\PoolTransferHistory\TransgerType; use App\Kintone\Models\DropDown\PoolTransferHistory\TransgerType;
use App\Kintone\Models\Pool; use App\Kintone\Models\Pool;
@@ -18,12 +19,12 @@ use App\Util\DateUtil;
class PoolTransferManager class PoolTransferManager
{ {


private SmbcPayment|SmbcAccountTransferResult|YuchoPaymentResult|null $payment = null;
private SmbcPayment|SmbcAccountTransferResult|YuchoPaymentResult|BankCheckResult|null $payment = null;
private Pool|null $pool = null; private Pool|null $pool = null;
private PoolTransferHistory|null $history = null; private PoolTransferHistory|null $history = null;




public function moveToPool(SmbcPayment|SmbcAccountTransferResult|YuchoPaymentResult $payment): Pool
public function moveToPool(SmbcPayment|SmbcAccountTransferResult|YuchoPaymentResult|BankCheckResult $payment): Pool
{ {
$this->clear(); $this->clear();


@@ -89,6 +90,10 @@ class PoolTransferManager
$history->incomeMethod = TransferMethod::YUCHO; $history->incomeMethod = TransferMethod::YUCHO;
$history->incomeYuchoTransferRecordNo = $this->payment->getRecordId(); $history->incomeYuchoTransferRecordNo = $this->payment->getRecordId();
} }
if ($this->payment instanceof BankCheckResult) {
$history->incomeMethod = TransferMethod::BANK_CHECK;
$history->incomeBankCheckPaymentRecordNo = $this->payment->getRecordId();
}


$this->history = $history; $this->history = $history;
} }


+ 3
- 0
config/custom.php 查看文件

@@ -4,5 +4,8 @@ return [
"ht-ic-web" => [ "ht-ic-web" => [
'apiKey' => env("HT_IC_WEB_API_KEY", ""), 'apiKey' => env("HT_IC_WEB_API_KEY", ""),
'url' => env("HT_IC_WEB_URL", ""), 'url' => env("HT_IC_WEB_URL", ""),
],
"bank-check" => [
'token' => env("BANK_CHECK_TOKEN", ""),
] ]
]; ];

+ 1
- 0
config/kintone.php 查看文件

@@ -54,6 +54,7 @@ return [
...App\Kintone\Models\YuchoPaymentResult::setConfig(), ...App\Kintone\Models\YuchoPaymentResult::setConfig(),
...App\Kintone\Models\Pool::setConfig(), ...App\Kintone\Models\Pool::setConfig(),
...App\Kintone\Models\PoolTransferHistory::setConfig(), ...App\Kintone\Models\PoolTransferHistory::setConfig(),
...App\Kintone\Models\BankCheckResult::setConfig(),
], ],


]; ];

+ 5
- 0
resources/views/bank-check/ok.blade.php 查看文件

@@ -0,0 +1,5 @@
<html>

<body>ok</body>

</html>

+ 4
- 0
routes/web.php 查看文件

@@ -25,5 +25,9 @@ Route::get("/test/bank", function () {
return view('bank-test'); return view('bank-test');
}); });


// BANK CHECK WEBHOOK
RouteHelper::get('/bank-check/info', App\Http\Controllers\Web\BanckCheck\PaymentInfoController::class);


// ルーティングで適合しない場合はフロント側のRoutingにゆだねる // ルーティングで適合しない場合はフロント側のRoutingにゆだねる
RouteHelper::get('/{any?}', App\Http\Controllers\Web\IndexController::class)->where('any', '.*'); RouteHelper::get('/{any?}', App\Http\Controllers\Web\IndexController::class)->where('any', '.*');

正在加载...
取消
保存