Files
sam-manage/app/Http/Controllers/Api/Admin/Barobill/BarobillSmsController.php
김보곤 401ac649ae feat: [sms] SMS 발송 테스트 메뉴 추가
- SmsController (WEB): 카카오톡 패턴 동일한 HX-Redirect 처리
- BarobillSmsController (API): 발송, 발신번호 조회/확인, 전송상태 조회
- SMS 발송 테스트 블레이드 뷰: 발신번호 목록, 바이트 카운터, 발송 결과 표시
- web.php: barobill/sms/send 라우트 추가
- api.php: barobill/sms API 라우트 4개 추가
2026-02-26 12:40:49 +09:00

138 lines
3.6 KiB
PHP

<?php
namespace App\Http\Controllers\Api\Admin\Barobill;
use App\Http\Controllers\Controller;
use App\Models\Barobill\BarobillMember;
use App\Services\Barobill\BarobillService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class BarobillSmsController extends Controller
{
public function __construct(
protected BarobillService $barobillService
) {}
/**
* 회원사 조회 및 서버 모드 전환 헬퍼
*/
private function resolveMember(): BarobillMember|JsonResponse
{
$tenantId = session('selected_tenant_id', 1);
$member = BarobillMember::where('tenant_id', $tenantId)->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);
}
}