Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

76 lines
2.0KB

  1. <?php
  2. namespace App\Http\Controllers\Web\QRService;
  3. use App\Http\Controllers\Web\WebController;
  4. use App\Logics\QRService\CreateLogic;
  5. use App\Logics\QRService\QRCryptoLogic;
  6. use App\Models\HtpmsCustomer\HtpmsCustomerConnectionSwitch;
  7. use App\Models\HtpmsCustomer\QRService\AcquisitionTicket;
  8. use App\Models\HtpmsCustomer\QRService\AcquisitionTicketToken;
  9. use Illuminate\Http\JsonResponse;
  10. use Illuminate\Http\Request;
  11. class CreateTicketController extends WebController
  12. {
  13. public function name(): string
  14. {
  15. return "サービス券取得";
  16. }
  17. public function description(): string
  18. {
  19. return "サービス券を取得する";
  20. }
  21. public function __construct(protected CreateTicketParam $param)
  22. {
  23. parent::__construct();
  24. }
  25. protected function run(Request $request): JsonResponse
  26. {
  27. $param = $this->param;
  28. $token = AcquisitionTicketToken::whereToken($param->token)->first();
  29. if ($token === null) {
  30. logger(sprintf("トークン無 (%d) %s", $param->customerId, $param->token));
  31. return $this->failedResponse();
  32. }
  33. if ($param->ticketId) {
  34. $ticket = AcquisitionTicket::find($param->ticketId);
  35. if ($ticket === null || !$ticket->canUse()) {
  36. $ticket = CreateLogic::create($param->token);
  37. }
  38. } else {
  39. $ticket = CreateLogic::create($param->token);
  40. }
  41. $res = [
  42. 'ticket_id' => $ticket->id,
  43. 'data' => $this->convertToQrStr($ticket),
  44. ];
  45. return $this->successResponse($res);
  46. }
  47. private function convertToQrStr(AcquisitionTicket $ticket): string
  48. {
  49. $body = sprintf(
  50. "%02d%s%06d%02d%02d",
  51. "01",
  52. $ticket->publishing_date->format('Ymd'),
  53. $ticket->publishing_no,
  54. $ticket->shop_no,
  55. $ticket->discount_ticket_code,
  56. );
  57. return sprintf(
  58. "HT004%s",
  59. QRCryptoLogic::encrypt($body)
  60. );
  61. }
  62. }