feat: [sms] SMS 발송 테스트 메뉴 추가
- SmsController (WEB): 카카오톡 패턴 동일한 HX-Redirect 처리 - BarobillSmsController (API): 발송, 발신번호 조회/확인, 전송상태 조회 - SMS 발송 테스트 블레이드 뷰: 발신번호 목록, 바이트 카운터, 발송 결과 표시 - web.php: barobill/sms/send 라우트 추가 - api.php: barobill/sms API 라우트 4개 추가
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
29
app/Http/Controllers/Barobill/SmsController.php
Normal file
29
app/Http/Controllers/Barobill/SmsController.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Barobill;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Barobill\BarobillMember;
|
||||
use App\Models\Tenants\Tenant;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class SmsController extends Controller
|
||||
{
|
||||
/**
|
||||
* SMS 발송 테스트
|
||||
*/
|
||||
public function send(Request $request): View|Response
|
||||
{
|
||||
if ($request->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'));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user