Loading...

설치기록

문자 무제한을 이용해서 만들어봤습니다

페이지 정보

작성자 운영자
작성일 20:36
19 조회

본문

클로드 ai 도움을 받아 집에서 운영중인
미니피시(아파치 웹서버)를 이용해서
만들어봤습니다

간단히 말해서
내 문자메세지를 가지고
문자를 보낼수 있는 프로그램

그누보드를 비교해서 말하지만
그누보드 문자를 업체를 이용하지 않고
내 스마트폰 문자로 이용 가능

문제 무제한인경우
통신사마다 다르지만
당일 발송건수 대략 150-170건전후
가능한걸로 알고 있습니다
(별도 요금없음)

kt- lms 긴문자 가능
lg - 단문문자만 가능


*적용내용*
국내전화번호로만
문자발송/국제번호 문자 차단

문자건수 제한/차단/삭제가능
실시간 등록기기 확인

앱에서 부여한 복잡한
아이디와 비번말고 쉽고편한
아이디와 비번으로 이용가능
(비번은 본인이 변경가능)

발송되는 문자 내용은
볼수가 없으며 본인만 확인가능


발송 파일

/**
* 이 파일은 더 이상 로그인 ID/비밀번호를 직접 포함하지 않습니다.
* 자격증명은 같은 디렉토리의 .env 파일에서 읽어옵니다.
* .env 파일은 절대 외부(깃허브, 웹 등)에 노출되지 않도록 주의하세요.
*/

function loadEnv(string $filePath): bool
{
if (!file_exists($filePath)) {
error_log("환경설정 파일(.env)을 찾을 수 없습니다: {$filePath}");
return false;
}

$lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
$trimmed = trim($line);
if ($trimmed === '' || strpos($trimmed, '#') === 0) {
continue;
}
if (strpos($line, '=') !== false) {
[$key, $value] = explode('=', $line, 2);
$key = trim($key);
$value = trim($value);
// 값 양쪽에 따옴표가 있으면 제거
$value = trim($value, "\"'");
putenv(sprintf('%s=%s', $key, $value));
$_ENV[$key] = $value;
}
}
return true;
}

// .env 로드
loadEnv(__DIR__ . '/.env');

// 필수 환경변수 상수 정의 (오타 수정: USER_PASS로 통일)
define('SMS_API_URL', getenv('SMS_API_URL') ?: '');
define('USER_NAME', getenv('USER_NAME') ?: '');
define('USER_PASS', getenv('USER_PASS') ?: '');
define('DEFAULT_PHONE', getenv('DEFAULT_PHONE') ?: '');

/**
* 필수 환경변수가 제대로 설정되었는지 검증합니다.
*/
function assertEnvLoaded(): void
{
$missing = [];
if (SMS_API_URL === '') $missing[] = 'SMS_API_URL';
if (USER_NAME === '') $missing[] = 'USER_NAME';
if (USER_PASS === '') $missing[] = 'USER_PASS';

if (!empty($missing)) {
$msg = '필수 환경변수가 누락되었습니다: ' . implode(', ', $missing);
error_log($msg);
throw new RuntimeException($msg);
}
}

function sendSms(string $phoneNumber, string $text): array
{
assertEnvLoaded();

$payload = json_encode([
'username' => USER_NAME,
'password' => USER_PASS,
'phoneNumber' => $phoneNumber,
'text' => $text,
]);

$ch = curl_init(SMS_API_URL);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_TIMEOUT => 15,
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);

return [
'status' => $httpCode,
'error' => $error,
'body' => json_decode($response, true),
];
}

try {
$result = sendSms(DEFAULT_PHONE ?: '+발송전화번호', '테스트중입니다');
echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
} catch (RuntimeException $e) {
http_response_code(500);
echo json_encode(['error' => $e->getMessage()], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
}




아래앱을 사용해서 구성했습니다

https://github.com/capcom6/android-sms-gateway
댓글 0
홈으로 전체메뉴 마이메뉴 새글/새댓글
전체 검색
회원가입