Loading src/ConfigProvider.php +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ class ConfigProvider 'http' => [ \Meibuyu\Micro\Exceptions\Handler\MicroExceptionHandler::class, \Meibuyu\Micro\Exceptions\Handler\QueryExceptionHandler::class, \Meibuyu\Micro\Exceptions\Handler\PhpSpreadsheetExceptionHandler::class, \Meibuyu\Micro\Exceptions\Handler\AppExceptionHandler::class, ], ], Loading src/Exceptions/Handler/MicroExceptionHandler.php +2 −2 Original line number Diff line number Diff line Loading @@ -9,7 +9,6 @@ namespace Meibuyu\Micro\Exceptions\Handler; use Hyperf\ExceptionHandler\ExceptionHandler; use Hyperf\HttpMessage\Stream\SwooleStream; use Meibuyu\Micro\Exceptions\HttpResponseException; Loading Loading @@ -53,4 +52,5 @@ class MicroExceptionHandler extends ExceptionHandler { return true; } } src/Exceptions/Handler/PhpSpreadsheetExceptionHandler.php 0 → 100644 +51 −0 Original line number Diff line number Diff line <?php /** * Created by PhpStorm. * User: Zero * Date: 2020/8/24 * Time: 18:05 */ namespace Meibuyu\Micro\Exceptions\Handler; use Hyperf\ExceptionHandler\ExceptionHandler; use Hyperf\HttpMessage\Stream\SwooleStream; use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException; use Psr\Http\Message\ResponseInterface; use Throwable; class PhpSpreadsheetExceptionHandler extends ExceptionHandler { public function handle(Throwable $throwable, ResponseInterface $response) { $error = $throwable->getMessage(); if ($throwable instanceof PhpSpreadsheetException) { if (strpos($error, 'Formula Error') !== false) { $msg = '表格公式错误, 请检查是否引用其它表格数据'; return $this->jsonResponse($msg, $response); } } else if (strpos($error, 'PhpOffice\PhpSpreadsheet\Writer\Xls::writeSummaryProp()') !== false) { $msg = '表格格式兼容错误,请上传 xlsx 结尾的excel'; return $this->jsonResponse($msg, $response); } return $response; } public function jsonResponse($msg, ResponseInterface $response) { // 阻止异常冒泡 $this->stopPropagation(); // 格式化输出 $data = json_encode([ 'code' => 400, 'msg' => $msg, ], JSON_UNESCAPED_UNICODE); return $response->withAddedHeader('content-type', 'application/json')->withBody(new SwooleStream($data)); } public function isValid(Throwable $throwable): bool { return true; } } src/Exceptions/Handler/QueryExceptionHandler.php +2 −1 Original line number Diff line number Diff line Loading @@ -42,4 +42,5 @@ class QueryExceptionHandler extends ExceptionHandler { return $throwable instanceof QueryException; } } src/Middleware/CheckWebhookMiddleware.php 0 → 100644 +33 −0 Original line number Diff line number Diff line <?php /** * Created by PhpStorm. * User: Zero * Date: 2020/8/24 * Time: 9:33 */ namespace Meibuyu\Micro\Middleware; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; class CheckWebhookMiddleware implements MiddlewareInterface { /** * @inheritDoc */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $domain = $request->getHeader('x-shopify-shop-domain')[0] ?? null; $topic = $request->getHeader('x-shopify-topic')[0] ?? null; if ($domain && $topic) { return $handler->handle($request); } else { return response()->withStatus(500); } } } Loading
src/ConfigProvider.php +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ class ConfigProvider 'http' => [ \Meibuyu\Micro\Exceptions\Handler\MicroExceptionHandler::class, \Meibuyu\Micro\Exceptions\Handler\QueryExceptionHandler::class, \Meibuyu\Micro\Exceptions\Handler\PhpSpreadsheetExceptionHandler::class, \Meibuyu\Micro\Exceptions\Handler\AppExceptionHandler::class, ], ], Loading
src/Exceptions/Handler/MicroExceptionHandler.php +2 −2 Original line number Diff line number Diff line Loading @@ -9,7 +9,6 @@ namespace Meibuyu\Micro\Exceptions\Handler; use Hyperf\ExceptionHandler\ExceptionHandler; use Hyperf\HttpMessage\Stream\SwooleStream; use Meibuyu\Micro\Exceptions\HttpResponseException; Loading Loading @@ -53,4 +52,5 @@ class MicroExceptionHandler extends ExceptionHandler { return true; } }
src/Exceptions/Handler/PhpSpreadsheetExceptionHandler.php 0 → 100644 +51 −0 Original line number Diff line number Diff line <?php /** * Created by PhpStorm. * User: Zero * Date: 2020/8/24 * Time: 18:05 */ namespace Meibuyu\Micro\Exceptions\Handler; use Hyperf\ExceptionHandler\ExceptionHandler; use Hyperf\HttpMessage\Stream\SwooleStream; use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException; use Psr\Http\Message\ResponseInterface; use Throwable; class PhpSpreadsheetExceptionHandler extends ExceptionHandler { public function handle(Throwable $throwable, ResponseInterface $response) { $error = $throwable->getMessage(); if ($throwable instanceof PhpSpreadsheetException) { if (strpos($error, 'Formula Error') !== false) { $msg = '表格公式错误, 请检查是否引用其它表格数据'; return $this->jsonResponse($msg, $response); } } else if (strpos($error, 'PhpOffice\PhpSpreadsheet\Writer\Xls::writeSummaryProp()') !== false) { $msg = '表格格式兼容错误,请上传 xlsx 结尾的excel'; return $this->jsonResponse($msg, $response); } return $response; } public function jsonResponse($msg, ResponseInterface $response) { // 阻止异常冒泡 $this->stopPropagation(); // 格式化输出 $data = json_encode([ 'code' => 400, 'msg' => $msg, ], JSON_UNESCAPED_UNICODE); return $response->withAddedHeader('content-type', 'application/json')->withBody(new SwooleStream($data)); } public function isValid(Throwable $throwable): bool { return true; } }
src/Exceptions/Handler/QueryExceptionHandler.php +2 −1 Original line number Diff line number Diff line Loading @@ -42,4 +42,5 @@ class QueryExceptionHandler extends ExceptionHandler { return $throwable instanceof QueryException; } }
src/Middleware/CheckWebhookMiddleware.php 0 → 100644 +33 −0 Original line number Diff line number Diff line <?php /** * Created by PhpStorm. * User: Zero * Date: 2020/8/24 * Time: 9:33 */ namespace Meibuyu\Micro\Middleware; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; class CheckWebhookMiddleware implements MiddlewareInterface { /** * @inheritDoc */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $domain = $request->getHeader('x-shopify-shop-domain')[0] ?? null; $topic = $request->getHeader('x-shopify-topic')[0] ?? null; if ($domain && $topic) { return $handler->handle($request); } else { return response()->withStatus(500); } } }