diff --git a/app/Http/Controllers/Api/Admin/Barobill/BarobillSmsController.php b/app/Http/Controllers/Api/Admin/Barobill/BarobillSmsController.php new file mode 100644 index 00000000..bf6ed06d --- /dev/null +++ b/app/Http/Controllers/Api/Admin/Barobill/BarobillSmsController.php @@ -0,0 +1,137 @@ +first(); + + if (! $member) { + return response()->json([ + 'success' => false, + 'message' => '바로빌 회원사가 등록되어 있지 않습니다.', + ], 404); + } + + $this->barobillService->setServerMode($member->server_mode ?? 'test'); + + return $member; + } + + /** + * SMS 발송 + */ + public function sendSms(Request $request): JsonResponse + { + $validated = $request->validate([ + 'from_number' => 'required|string', + 'to_name' => 'required|string', + 'to_number' => 'required|string', + 'contents' => 'required|string', + 'send_dt' => 'nullable|string', + 'ref_key' => 'nullable|string', + ]); + + $member = $this->resolveMember(); + if ($member instanceof JsonResponse) { + return $member; + } + + $result = $this->barobillService->sendSMSMessage( + corpNum: $member->biz_no, + senderId: $member->barobill_id, + fromNumber: $validated['from_number'], + toName: $validated['to_name'], + toNumber: $validated['to_number'], + contents: $validated['contents'], + sendDT: $validated['send_dt'] ?? '', + refKey: $validated['ref_key'] ?? '' + ); + + if (! $result['success']) { + return response()->json($result, 422); + } + + return response()->json($result); + } + + /** + * 등록된 발신번호 목록 조회 + */ + public function getFromNumbers(): JsonResponse + { + $member = $this->resolveMember(); + if ($member instanceof JsonResponse) { + return $member; + } + + $result = $this->barobillService->getSMSFromNumbers($member->biz_no); + + if (! $result['success']) { + return response()->json($result, 422); + } + + return response()->json($result); + } + + /** + * 발신번호 등록 여부 확인 + */ + public function checkFromNumber(Request $request): JsonResponse + { + $validated = $request->validate([ + 'from_number' => 'required|string', + ]); + + $member = $this->resolveMember(); + if ($member instanceof JsonResponse) { + return $member; + } + + $result = $this->barobillService->checkSMSFromNumber( + $member->biz_no, + $validated['from_number'] + ); + + if (! $result['success']) { + return response()->json($result, 422); + } + + return response()->json($result); + } + + /** + * SMS 전송 상태 조회 + */ + public function getSendState(string $sendKey): JsonResponse + { + $member = $this->resolveMember(); + if ($member instanceof JsonResponse) { + return $member; + } + + $result = $this->barobillService->getSMSSendState($member->biz_no, $sendKey); + + if (! $result['success']) { + return response()->json($result, 422); + } + + return response()->json($result); + } +} diff --git a/app/Http/Controllers/Barobill/SmsController.php b/app/Http/Controllers/Barobill/SmsController.php new file mode 100644 index 00000000..1f127767 --- /dev/null +++ b/app/Http/Controllers/Barobill/SmsController.php @@ -0,0 +1,29 @@ +header('HX-Request')) { + return response('', 200)->header('HX-Redirect', route('barobill.sms.send')); + } + + $tenantId = session('selected_tenant_id', 1); + $currentTenant = Tenant::find($tenantId); + $barobillMember = BarobillMember::where('tenant_id', $tenantId)->first(); + + return view('barobill.sms.send.index', compact('currentTenant', 'barobillMember')); + } +} diff --git a/resources/views/barobill/sms/send/index.blade.php b/resources/views/barobill/sms/send/index.blade.php new file mode 100644 index 00000000..3ba545bd --- /dev/null +++ b/resources/views/barobill/sms/send/index.blade.php @@ -0,0 +1,304 @@ +@extends('layouts.app') + +@section('title', 'SMS 발송 테스트') + +@section('content') +
바로빌 SMS 서비스 연동 테스트 (단문 16.5원/건)
+SMS 발송을 위해 먼저 바로빌 회원사를 등록해주세요.
+