PHP icode SMS 문자 자동발송 (토큰키 token key 활용)
페이지 정보
본문
아이코드 sms_module4 PHP v3.1.2 b26 을 적용하였습니다.
1. sms.db.php 디비정보 등 환경설정
<?php
$mysql_host = "localhost"; // 데이타베이스 서버 주소 (같은서버일경우 : localhost)
$mysql_user = ""; // 데이타베이스 접속 아이디
$mysql_password = ""; // 데이타베이스 접속 비밀번호
$mysql_db = ""; // 데이타베이스 명
$dbconn = mysqli_connect($mysql_host,$mysql_user,$mysql_password,$mysql_db) or die("데이터베이스 연결에 실패하였습니다.");
// 그누보드5 사용할때는 아래꺼 활용
//include_once "_common.php";
//$dbconn = mysqli_connect(G5_MYSQL_HOST,G5_MYSQL_USER,G5_MYSQL_PASSWORD,G5_MYSQL_DB) or die("데이터베이스 연결에 실패하였습니다.");
$sms_table = "sms_list"; // sms 문자발송 내역 저장 디비 테이블
$sms_admin_table = "sms_adm"; // 관리자 로그인 디비 테이블
$icode_server = "211.172.232.124"; ## SMS 서버
$icode_key = ""; // 아이코드 발송전용 토큰키
$icode_port = "9201"; // 토큰키 사용시 포트
$send_hp_mb = "010-0000-0000"; // 발신번호
$recv_hp_mb = "010-0000-0000"; // 수신번호
$client_ip = isset($_SERVER['HTTP_CLIENT_IP'])?$_SERVER['HTTP_CLIENT_IP']:isset($_SERVER['HTTP_X_FORWARDED_FOR'])?$_SERVER['HTTP_X_FORWARDED_FOR']:$_SERVER['REMOTE_ADDR'];
//echo "client_ip = ".$client_ip."<br>"; // 아이피가 어떻게 보이는지 확인
if (count(explode(',', $client_ip))==2) {
$ip0 = explode(',',$client_ip);
$client_ip = $ip0[0];
}
?>
2. sms.component.php 함수파일 icode 에서 제공
<?php
/**
* SMS 발송을 관장하는 메인 클래스이다.
*
* 접속, 발송, URL발송, 결과등의 실질적으로 쓰이는 모든 부분이 포함되어 있다.
*/
class SMS {
var $icode_key;
var $socket_host;
var $socket_port;
var $Data = array();
var $Result = array();
// SMS 서버 접속
function SMS_con($host, $port, $key) {
$this->socket_host = $host;
$this->socket_port = $port;
$this->icode_key = $key;
}
function Init() {
$this->Data = array(); // 발송하기 위한 패킷내용이 배열로 들어간다.
$this->Result = array(); // 발송결과값이 배열로 들어간다.
}
/**
* 발송 패킷 생성
* Add(수신번호목록(배열), 발신번호, 발송내용(2000자이내), 제목(옵션, 30자이내), 예약일자(옵션, 12자리)
*/
function Add($strTelList, $strCallBack, $strData, $strSubject='', $strDate='') {
// 개행치환
$strData = preg_replace("/\r\n/","\n",$strData);
$strData = preg_replace("/\r/","\n",$strData);
// 문자 타입별 Port 설정.
$sendType = strlen($strData)>90 ? 1 : 0; // 0: SMS / 1: LMS
if($sendType==0) $strSubject = "";
$strCallBack = CutChar($strCallBack, 12); // 회신번호
/** LMS 제목 **/
/*
제목필드의 값이 없을 경우 단말기 기종및 설정에 따라 표기 방법이 다름
1.설정에서 제목필드보기 설정 Disable -> 제목필드값을 넣어도 미표기
2.설정에서 제목필드보기 설정 Enable -> 제목을 넣지 않을 경우 제목없음으로 자동표시
제목의 첫글자에 "<",">", 개행문자가 있을경우 단말기종류 및 통신사에 따라 메세지 전송실패 -> 글자를 체크하거나 취환처리요망
$strSubject = str_replace("\r\n", " ", $strSubject);
$strSubject = str_replace("<", "[", $strSubject);
$strSubject = str_replace(">", "]", $strSubject);
*/
$strSubject = CutCharUtf8($strSubject,30);
$strData = CutCharUtf8($strData,2000);
/* 필수 항목에 대해 정상적인 코드인지 검사 과정.
개발 방식에 따라 활용
$Error = CheckCommonTypeDest($strTelList); // 번호 검사
$Error = IsVaildCallback($strCallBack);
$Error = CheckCommonTypeDate($strDate);
*/
foreach ($strTelList as $tel) {
if(empty($tel)) continue;
$list = array(
"key" => $this->icode_key,
"tel" => $tel,
"cb" => $strCallBack,
"msg" => $strData
);
if(!empty($strSubject)) $list['title'] = $strSubject;
if(!empty($strDate)) $list['date'] = $strDate;
$packet = json_encode($list);
$this->Data[] = '06'.str_pad(strlen($packet), 4, "0", STR_PAD_LEFT).$packet;
}
return true;
}
/**
* 문자발송 및 결과정보를 수신합니다.
*/
function Send() {
$fsocket = fsockopen($this->socket_host,$this->socket_port, $errno, $errstr, 2);
if (!$fsocket) return false;
set_time_limit(300);
foreach($this->Data as $puts) {
fputs($fsocket, $puts);
while(!$gets) { $gets = fgets($fsocket,32); }
$chk = preg_match("/\"tel\":\"([0-9]*)\"/", substr($puts,6), $matches);
$desc = $matches[1];
$resultCode = substr($gets,6,2);
if ($resultCode == '00' || $resultCode == '17') { // 17은 접수(발송)대기.
$this->Result[] = $resultCode.":".substr($gets,8,12).":".substr($gets,20,11);
} else {
$this->Result[] = $desc.":Error(".substr($gets,6,2).")";
if(substr($gets,6,2) >= "80") break;
}
$gets = "";
}
fclose($fsocket);
$this->Data = array();
return true;
}
}
/**
* 원하는 문자열의 길이를 원하는 길이만큼 공백을 넣어 맞추도록 합니다.
*
* @param text 원하는 문자열입니다.
* size 원하는 길이입니다.
* @return 변경된 문자열을 넘깁니다.
*/
function FillSpace($text,$size) {
for ($i=0; $i<$size; $i++) $text.= " ";
$text = substr($text,0,$size);
return $text;
}
/**
* 원하는 문자열을 원하는 길에 맞는지 확인해서 조정하는 기능을 합니다.
*
* @param word 원하는 문자열입니다.
* cut 원하는 길이입니다.
* @return 변경된 문자열입니다.
*/
function CutChar($word, $cut) {
$word=substr($word,0,$cut); // 필요한 길이만큼 취함.
for ($k = $cut-1; $k > 1; $k--) {
if (ord(substr($word,$k,1))<128) break; // 한글값은 160 이상.
}
$word = substr($word, 0, $cut-($cut-$k+1)%2);
return $word;
}
function CutCharUtf8($word, $cut) {
preg_match_all('/[\xE0-\xFF][\x80-\xFF]{2}|./', $word, $match); // target for BMP
$m = $match[0];
$slen = strlen($word); // length of source string
if ($slen <= $cut) return $word;
$ret = array();
$count = 0;
for ($i=0; $i < $cut; $i++) {
$count += (strlen($m[$i]) > 1)?2:1;
if ($count > $cut) break;
$ret[] = $m[$i];
}
return join('', $ret);
}
/**
* 잘못된 수신번호 목록을 리턴합니다.
*
* @param strTelList 발송번호 배열.
* @return 잘못된 수신번호 목록.
*/
function CheckCommonTypeDest($strTelList) {
$result = '';
foreach ($strTelList as $tel) {
$tel = preg_replace("/[^0-9]/","",$tel);
if(!preg_match("/^(0[173][0136789])([0-9]{3,4})([0-9]{4})$/", $tel)) $result .= $tel.',';
}
return $result;
}
/**
* 회신번호 유효성 여부조회
* 한국인터넷진흥원 권고사항
*
* @param string callback 회신번호
* @return 처리결과입니다
*/
function IsVaildCallback($callback){
$_callback = preg_replace('/[^0-9]/', '', $callback);
if (!preg_match("/^(02|0[3-6]\d|01(0|1|3|5|6|7|8|9)|070|080|007)\-?\d{3,4}\-?\d{4,5}$/", $_callback) &&
!preg_match("/^(15|16|18)\d{2}\-?\d{4,5}$/", $_callback)) return "회신번호오류";
if (preg_match("/^(02|0[3-6]\d|01(0|1|3|5|6|7|8|9)|070|080)\-?0{3,4}\-?\d{4}$/", $_callback)) return "회신번호오류";
return '';
}
/**
* 문자열을 JSON 사용가능 타입으로 변환한다.
*/
function EscapeJsonString($value) {
$escapers = array('\\', '"');
$replacements = array('\\\\', '\"');
$result = str_replace($escapers, $replacements, $value);
return $result;
}
/**
* 예약날짜의 값이 정확한 값인지 확인합니다.
*
* @param string strDate 예약시간
* @return 처리결과입니다
*/
function CheckCommonTypeDate($strDate) {
$strDate = preg_replace("/[^0-9]/", "", $strDate);
if ($strDate){
if(strlen($strDate) != 12) return '예약날짜오류';
if (!checkdate(substr($strDate,4,2),substr($strDate,6,2),substr($rsvTime,0,4))) return "예약날짜오류";
if (substr($strDate,8,2)>23 || substr($strDate,10,2)>59) return "예약시간오류";
}
return '';
}
?>
3. sms_send.php 문자발송 파일
<?php
include_once "sms.db.php"; // sms 환경설정
include "sms.component.php"; // sms 발송 함수
$send_number = str_replace("-","",$send_hp_mb); // - 제거
$recv_number = str_replace("-","",$recv_hp_mb); // - 제거
// 문자발송 Form을 사용하지 않고 자동 발송의 경우 수신번호가 1개일 경우 번호 마지막에 ";"를 붙인다
$strTelList = $strTelList.";";
$strSubject = "LMS제목"; /* LMS제목 : LMS발송에 이용되는 제목( component.php 60라인을 참고 바랍니다. */
$strData = "신청을 하셨습니다."; # 발송 메세지
$SMS = new SMS; // SMS 모듈 클래스 생성
$SMS->SMS_con($icode_server,$icode_port,$icode_key); // 아이코드 서버 접속
//$strTelList = $_POST["strTelList"]; /* 수신번호 : 01000000001;0100000002; */
//$strCallBack = $_POST["strCallBack"]; /* 발신번호 : 0317281281 */
//$strSubject = $_POST["strSubject"]; /* LMS제목 : LMS발송에 이용되는 제목( component.php 60라인을 참고 바랍니다. */
//$strData = $_POST["strData"]; /* 메세지 : 발송하실 문자 메세지 */
// 문자 받는 전화번호
$strCallBack = $recv_number;
$phone_number = $strTelList;
if(stristr($phone_number, '010') !== FALSE) {
} elseif(stristr($phone_number, '011') !== FALSE) {
} elseif(stristr($phone_number, '016') !== FALSE) {
} elseif(stristr($string, '017') !== FALSE) {
} elseif(stristr($string, '018') !== FALSE) {
} elseif(stristr($string, '019') !== FALSE) {
} elseif(stristr($string, '02') !== FALSE) {
} elseif(stristr($string, '031') !== FALSE) {
} elseif(stristr($string, '032') !== FALSE) {
} elseif(stristr($string, '033') !== FALSE) {
} elseif(stristr($string, '041') !== FALSE) {
} elseif(stristr($string, '042') !== FALSE) {
} elseif(stristr($string, '043') !== FALSE) {
} elseif(stristr($string, '044') !== FALSE) {
} elseif(stristr($string, '051') !== FALSE) {
} elseif(stristr($string, '052') !== FALSE) {
} elseif(stristr($string, '053') !== FALSE) {
} elseif(stristr($string, '054') !== FALSE) {
} elseif(stristr($string, '061') !== FALSE) {
} elseif(stristr($string, '062') !== FALSE) {
} elseif(stristr($string, '063') !== FALSE) {
} elseif(stristr($string, '070') !== FALSE) {
} else {
//echo " <script>alert('연락처가 올바르지 않아서 신청되지 않았습니다.'); document.location.href='". G5_URL ."'; </script>";
//exit;
}
$strTelList = explode(";",$strTelList);
// 예약설정을 합니다.
if ($chkSendFlag) $strDate = $R_YEAR.$R_MONTH.$R_DAY.$R_HOUR.$R_MIN;
else $strDate = "";
// 문자 발송에 필요한 항목을 배열에 추가
$result = $SMS->Add($strTelList, $strCallBack, $strData, $strSubject, $strDate);
// 패킷 정의의 결과에 따라 발송여부를 결정합니다.
if ($result) {
//echo "일반메시지 입력 성공<br />";
//echo "<hr>";
// 패킷이 정상적이라면 발송에 시도합니다.
$result = $SMS->Send();
if ($result) {
//echo "서버에 접속했습니다.<br /><br />";
$success = $fail = 0;
$isStop = 0;
foreach($SMS->Result as $result) {
list($phone,$code)=explode(":",$result);
if (substr($code,0,5)=="Error") {
echo $phone.' 발송에러('.substr($code,6,2).'): ';
switch (substr($code,6,2)) {
case '23': // "23:데이터오류, 전송날짜오류, 발신번호미등록"
echo "데이터를 다시 확인해 주시기바랍니다.<br>";
break;
// 아래의 사유들은 발송진행이 중단됨.
case '85': // "85:발송번호 미등록"
echo "등록되지 않는 발송번호 입니다.<br />";
break;
case '87': // "87:인증실패"
echo "(정액제-계약확인)인증 받지 못하였습니다.<br />";
break;
case '88': // "88:연동모듈 발송불가"
echo "연동모듈 사용이 불가능합니다. 아이코드로 문의하세요.<br />";
break;
case '96': // "96:토큰 검사 실패"
echo "사용할 수 없는 토큰키입니다.<br />";
break;
case '97': // "97:잔여코인부족"
echo "잔여코인이 부족합니다.<br />";
break;
case '98': // "98:사용기간만료"
echo "사용기간이 만료되었습니다.<br />";
break;
case '99': // "99:인증실패"
echo "서비스 사용이 불가능합니다. 아이코드로 문의하세요.<br />";
break;
default: // "미 확인 오류"
echo "알 수 없는 오류로 전송이 실패하었습니다.<br />";
break;
}
$fail++;
} else {
$resultString = '';
switch (substr($code,0,2)) {
case '17': // "17: 접수(발송)대기 처리. 지연해소시 발송됨."
echo "접수(발송)대기처리 되었습니다.";
break;
default: // "00: 전송완료."
//echo "전송되었습니다.<br />";
break;
}
//echo $phone.'로 '.$resultString.' (msg seq : '.$code.')<br />';
$success++;
}
}
//echo '<br />'.$success."건을 전송했으며 ".$fail."건을 보내지 못했습니다.<br />";
$SMS->Init(); // 보관하고 있던 결과값을 지웁니다.
}
else echo "에러: SMS 서버와 통신이 불안정합니다.<br />";
}
//exit;
//alert("정상적으로 접수되었습니다.","{$PHP_SELF}?ptype=list&{$param}");
// 문자보내기 끝
// 문자발송내역을 디비에 저장
/*
$sms_date = date('Y-m-d H:i:s');
$sql = "insert into {$sms_table} set ";
$sql .= " sms_name = '{$sms_name}' ";
$sql .= ", sms_tel = '{$sms_tel}' ";
$sql .= ", sms_memo = '{$sms_memo}' ";
$sql .= ", sms_device = '{$sms_device}' ";
$sql .= ", sms_ip = '{$client_ip}' ";
$sql .= ", sms_date = '{$sms_date}' ";
//echo "sql => $sql <br>"; // 쿼리값의 정상여부를 판단
$result = mysqli_query($dbconn,$sql);
echo mysqli_error();
mysqli_close($dbconn); // MySQL에 접속종료
*/
?>
1. sms.db.php 디비정보 등 환경설정
<?php
$mysql_host = "localhost"; // 데이타베이스 서버 주소 (같은서버일경우 : localhost)
$mysql_user = ""; // 데이타베이스 접속 아이디
$mysql_password = ""; // 데이타베이스 접속 비밀번호
$mysql_db = ""; // 데이타베이스 명
$dbconn = mysqli_connect($mysql_host,$mysql_user,$mysql_password,$mysql_db) or die("데이터베이스 연결에 실패하였습니다.");
// 그누보드5 사용할때는 아래꺼 활용
//include_once "_common.php";
//$dbconn = mysqli_connect(G5_MYSQL_HOST,G5_MYSQL_USER,G5_MYSQL_PASSWORD,G5_MYSQL_DB) or die("데이터베이스 연결에 실패하였습니다.");
$sms_table = "sms_list"; // sms 문자발송 내역 저장 디비 테이블
$sms_admin_table = "sms_adm"; // 관리자 로그인 디비 테이블
$icode_server = "211.172.232.124"; ## SMS 서버
$icode_key = ""; // 아이코드 발송전용 토큰키
$icode_port = "9201"; // 토큰키 사용시 포트
$send_hp_mb = "010-0000-0000"; // 발신번호
$recv_hp_mb = "010-0000-0000"; // 수신번호
$client_ip = isset($_SERVER['HTTP_CLIENT_IP'])?$_SERVER['HTTP_CLIENT_IP']:isset($_SERVER['HTTP_X_FORWARDED_FOR'])?$_SERVER['HTTP_X_FORWARDED_FOR']:$_SERVER['REMOTE_ADDR'];
//echo "client_ip = ".$client_ip."<br>"; // 아이피가 어떻게 보이는지 확인
if (count(explode(',', $client_ip))==2) {
$ip0 = explode(',',$client_ip);
$client_ip = $ip0[0];
}
?>
2. sms.component.php 함수파일 icode 에서 제공
<?php
/**
* SMS 발송을 관장하는 메인 클래스이다.
*
* 접속, 발송, URL발송, 결과등의 실질적으로 쓰이는 모든 부분이 포함되어 있다.
*/
class SMS {
var $icode_key;
var $socket_host;
var $socket_port;
var $Data = array();
var $Result = array();
// SMS 서버 접속
function SMS_con($host, $port, $key) {
$this->socket_host = $host;
$this->socket_port = $port;
$this->icode_key = $key;
}
function Init() {
$this->Data = array(); // 발송하기 위한 패킷내용이 배열로 들어간다.
$this->Result = array(); // 발송결과값이 배열로 들어간다.
}
/**
* 발송 패킷 생성
* Add(수신번호목록(배열), 발신번호, 발송내용(2000자이내), 제목(옵션, 30자이내), 예약일자(옵션, 12자리)
*/
function Add($strTelList, $strCallBack, $strData, $strSubject='', $strDate='') {
// 개행치환
$strData = preg_replace("/\r\n/","\n",$strData);
$strData = preg_replace("/\r/","\n",$strData);
// 문자 타입별 Port 설정.
$sendType = strlen($strData)>90 ? 1 : 0; // 0: SMS / 1: LMS
if($sendType==0) $strSubject = "";
$strCallBack = CutChar($strCallBack, 12); // 회신번호
/** LMS 제목 **/
/*
제목필드의 값이 없을 경우 단말기 기종및 설정에 따라 표기 방법이 다름
1.설정에서 제목필드보기 설정 Disable -> 제목필드값을 넣어도 미표기
2.설정에서 제목필드보기 설정 Enable -> 제목을 넣지 않을 경우 제목없음으로 자동표시
제목의 첫글자에 "<",">", 개행문자가 있을경우 단말기종류 및 통신사에 따라 메세지 전송실패 -> 글자를 체크하거나 취환처리요망
$strSubject = str_replace("\r\n", " ", $strSubject);
$strSubject = str_replace("<", "[", $strSubject);
$strSubject = str_replace(">", "]", $strSubject);
*/
$strSubject = CutCharUtf8($strSubject,30);
$strData = CutCharUtf8($strData,2000);
/* 필수 항목에 대해 정상적인 코드인지 검사 과정.
개발 방식에 따라 활용
$Error = CheckCommonTypeDest($strTelList); // 번호 검사
$Error = IsVaildCallback($strCallBack);
$Error = CheckCommonTypeDate($strDate);
*/
foreach ($strTelList as $tel) {
if(empty($tel)) continue;
$list = array(
"key" => $this->icode_key,
"tel" => $tel,
"cb" => $strCallBack,
"msg" => $strData
);
if(!empty($strSubject)) $list['title'] = $strSubject;
if(!empty($strDate)) $list['date'] = $strDate;
$packet = json_encode($list);
$this->Data[] = '06'.str_pad(strlen($packet), 4, "0", STR_PAD_LEFT).$packet;
}
return true;
}
/**
* 문자발송 및 결과정보를 수신합니다.
*/
function Send() {
$fsocket = fsockopen($this->socket_host,$this->socket_port, $errno, $errstr, 2);
if (!$fsocket) return false;
set_time_limit(300);
foreach($this->Data as $puts) {
fputs($fsocket, $puts);
while(!$gets) { $gets = fgets($fsocket,32); }
$chk = preg_match("/\"tel\":\"([0-9]*)\"/", substr($puts,6), $matches);
$desc = $matches[1];
$resultCode = substr($gets,6,2);
if ($resultCode == '00' || $resultCode == '17') { // 17은 접수(발송)대기.
$this->Result[] = $resultCode.":".substr($gets,8,12).":".substr($gets,20,11);
} else {
$this->Result[] = $desc.":Error(".substr($gets,6,2).")";
if(substr($gets,6,2) >= "80") break;
}
$gets = "";
}
fclose($fsocket);
$this->Data = array();
return true;
}
}
/**
* 원하는 문자열의 길이를 원하는 길이만큼 공백을 넣어 맞추도록 합니다.
*
* @param text 원하는 문자열입니다.
* size 원하는 길이입니다.
* @return 변경된 문자열을 넘깁니다.
*/
function FillSpace($text,$size) {
for ($i=0; $i<$size; $i++) $text.= " ";
$text = substr($text,0,$size);
return $text;
}
/**
* 원하는 문자열을 원하는 길에 맞는지 확인해서 조정하는 기능을 합니다.
*
* @param word 원하는 문자열입니다.
* cut 원하는 길이입니다.
* @return 변경된 문자열입니다.
*/
function CutChar($word, $cut) {
$word=substr($word,0,$cut); // 필요한 길이만큼 취함.
for ($k = $cut-1; $k > 1; $k--) {
if (ord(substr($word,$k,1))<128) break; // 한글값은 160 이상.
}
$word = substr($word, 0, $cut-($cut-$k+1)%2);
return $word;
}
function CutCharUtf8($word, $cut) {
preg_match_all('/[\xE0-\xFF][\x80-\xFF]{2}|./', $word, $match); // target for BMP
$m = $match[0];
$slen = strlen($word); // length of source string
if ($slen <= $cut) return $word;
$ret = array();
$count = 0;
for ($i=0; $i < $cut; $i++) {
$count += (strlen($m[$i]) > 1)?2:1;
if ($count > $cut) break;
$ret[] = $m[$i];
}
return join('', $ret);
}
/**
* 잘못된 수신번호 목록을 리턴합니다.
*
* @param strTelList 발송번호 배열.
* @return 잘못된 수신번호 목록.
*/
function CheckCommonTypeDest($strTelList) {
$result = '';
foreach ($strTelList as $tel) {
$tel = preg_replace("/[^0-9]/","",$tel);
if(!preg_match("/^(0[173][0136789])([0-9]{3,4})([0-9]{4})$/", $tel)) $result .= $tel.',';
}
return $result;
}
/**
* 회신번호 유효성 여부조회
* 한국인터넷진흥원 권고사항
*
* @param string callback 회신번호
* @return 처리결과입니다
*/
function IsVaildCallback($callback){
$_callback = preg_replace('/[^0-9]/', '', $callback);
if (!preg_match("/^(02|0[3-6]\d|01(0|1|3|5|6|7|8|9)|070|080|007)\-?\d{3,4}\-?\d{4,5}$/", $_callback) &&
!preg_match("/^(15|16|18)\d{2}\-?\d{4,5}$/", $_callback)) return "회신번호오류";
if (preg_match("/^(02|0[3-6]\d|01(0|1|3|5|6|7|8|9)|070|080)\-?0{3,4}\-?\d{4}$/", $_callback)) return "회신번호오류";
return '';
}
/**
* 문자열을 JSON 사용가능 타입으로 변환한다.
*/
function EscapeJsonString($value) {
$escapers = array('\\', '"');
$replacements = array('\\\\', '\"');
$result = str_replace($escapers, $replacements, $value);
return $result;
}
/**
* 예약날짜의 값이 정확한 값인지 확인합니다.
*
* @param string strDate 예약시간
* @return 처리결과입니다
*/
function CheckCommonTypeDate($strDate) {
$strDate = preg_replace("/[^0-9]/", "", $strDate);
if ($strDate){
if(strlen($strDate) != 12) return '예약날짜오류';
if (!checkdate(substr($strDate,4,2),substr($strDate,6,2),substr($rsvTime,0,4))) return "예약날짜오류";
if (substr($strDate,8,2)>23 || substr($strDate,10,2)>59) return "예약시간오류";
}
return '';
}
?>
3. sms_send.php 문자발송 파일
<?php
include_once "sms.db.php"; // sms 환경설정
include "sms.component.php"; // sms 발송 함수
$send_number = str_replace("-","",$send_hp_mb); // - 제거
$recv_number = str_replace("-","",$recv_hp_mb); // - 제거
// 문자발송 Form을 사용하지 않고 자동 발송의 경우 수신번호가 1개일 경우 번호 마지막에 ";"를 붙인다
$strTelList = $strTelList.";";
$strSubject = "LMS제목"; /* LMS제목 : LMS발송에 이용되는 제목( component.php 60라인을 참고 바랍니다. */
$strData = "신청을 하셨습니다."; # 발송 메세지
$SMS = new SMS; // SMS 모듈 클래스 생성
$SMS->SMS_con($icode_server,$icode_port,$icode_key); // 아이코드 서버 접속
//$strTelList = $_POST["strTelList"]; /* 수신번호 : 01000000001;0100000002; */
//$strCallBack = $_POST["strCallBack"]; /* 발신번호 : 0317281281 */
//$strSubject = $_POST["strSubject"]; /* LMS제목 : LMS발송에 이용되는 제목( component.php 60라인을 참고 바랍니다. */
//$strData = $_POST["strData"]; /* 메세지 : 발송하실 문자 메세지 */
// 문자 받는 전화번호
$strCallBack = $recv_number;
$phone_number = $strTelList;
if(stristr($phone_number, '010') !== FALSE) {
} elseif(stristr($phone_number, '011') !== FALSE) {
} elseif(stristr($phone_number, '016') !== FALSE) {
} elseif(stristr($string, '017') !== FALSE) {
} elseif(stristr($string, '018') !== FALSE) {
} elseif(stristr($string, '019') !== FALSE) {
} elseif(stristr($string, '02') !== FALSE) {
} elseif(stristr($string, '031') !== FALSE) {
} elseif(stristr($string, '032') !== FALSE) {
} elseif(stristr($string, '033') !== FALSE) {
} elseif(stristr($string, '041') !== FALSE) {
} elseif(stristr($string, '042') !== FALSE) {
} elseif(stristr($string, '043') !== FALSE) {
} elseif(stristr($string, '044') !== FALSE) {
} elseif(stristr($string, '051') !== FALSE) {
} elseif(stristr($string, '052') !== FALSE) {
} elseif(stristr($string, '053') !== FALSE) {
} elseif(stristr($string, '054') !== FALSE) {
} elseif(stristr($string, '061') !== FALSE) {
} elseif(stristr($string, '062') !== FALSE) {
} elseif(stristr($string, '063') !== FALSE) {
} elseif(stristr($string, '070') !== FALSE) {
} else {
//echo " <script>alert('연락처가 올바르지 않아서 신청되지 않았습니다.'); document.location.href='". G5_URL ."'; </script>";
//exit;
}
$strTelList = explode(";",$strTelList);
// 예약설정을 합니다.
if ($chkSendFlag) $strDate = $R_YEAR.$R_MONTH.$R_DAY.$R_HOUR.$R_MIN;
else $strDate = "";
// 문자 발송에 필요한 항목을 배열에 추가
$result = $SMS->Add($strTelList, $strCallBack, $strData, $strSubject, $strDate);
// 패킷 정의의 결과에 따라 발송여부를 결정합니다.
if ($result) {
//echo "일반메시지 입력 성공<br />";
//echo "<hr>";
// 패킷이 정상적이라면 발송에 시도합니다.
$result = $SMS->Send();
if ($result) {
//echo "서버에 접속했습니다.<br /><br />";
$success = $fail = 0;
$isStop = 0;
foreach($SMS->Result as $result) {
list($phone,$code)=explode(":",$result);
if (substr($code,0,5)=="Error") {
echo $phone.' 발송에러('.substr($code,6,2).'): ';
switch (substr($code,6,2)) {
case '23': // "23:데이터오류, 전송날짜오류, 발신번호미등록"
echo "데이터를 다시 확인해 주시기바랍니다.<br>";
break;
// 아래의 사유들은 발송진행이 중단됨.
case '85': // "85:발송번호 미등록"
echo "등록되지 않는 발송번호 입니다.<br />";
break;
case '87': // "87:인증실패"
echo "(정액제-계약확인)인증 받지 못하였습니다.<br />";
break;
case '88': // "88:연동모듈 발송불가"
echo "연동모듈 사용이 불가능합니다. 아이코드로 문의하세요.<br />";
break;
case '96': // "96:토큰 검사 실패"
echo "사용할 수 없는 토큰키입니다.<br />";
break;
case '97': // "97:잔여코인부족"
echo "잔여코인이 부족합니다.<br />";
break;
case '98': // "98:사용기간만료"
echo "사용기간이 만료되었습니다.<br />";
break;
case '99': // "99:인증실패"
echo "서비스 사용이 불가능합니다. 아이코드로 문의하세요.<br />";
break;
default: // "미 확인 오류"
echo "알 수 없는 오류로 전송이 실패하었습니다.<br />";
break;
}
$fail++;
} else {
$resultString = '';
switch (substr($code,0,2)) {
case '17': // "17: 접수(발송)대기 처리. 지연해소시 발송됨."
echo "접수(발송)대기처리 되었습니다.";
break;
default: // "00: 전송완료."
//echo "전송되었습니다.<br />";
break;
}
//echo $phone.'로 '.$resultString.' (msg seq : '.$code.')<br />';
$success++;
}
}
//echo '<br />'.$success."건을 전송했으며 ".$fail."건을 보내지 못했습니다.<br />";
$SMS->Init(); // 보관하고 있던 결과값을 지웁니다.
}
else echo "에러: SMS 서버와 통신이 불안정합니다.<br />";
}
//exit;
//alert("정상적으로 접수되었습니다.","{$PHP_SELF}?ptype=list&{$param}");
// 문자보내기 끝
// 문자발송내역을 디비에 저장
/*
$sms_date = date('Y-m-d H:i:s');
$sql = "insert into {$sms_table} set ";
$sql .= " sms_name = '{$sms_name}' ";
$sql .= ", sms_tel = '{$sms_tel}' ";
$sql .= ", sms_memo = '{$sms_memo}' ";
$sql .= ", sms_device = '{$sms_device}' ";
$sql .= ", sms_ip = '{$client_ip}' ";
$sql .= ", sms_date = '{$sms_date}' ";
//echo "sql => $sql <br>"; // 쿼리값의 정상여부를 판단
$result = mysqli_query($dbconn,$sql);
echo mysqli_error();
mysqli_close($dbconn); // MySQL에 접속종료
*/
?>
댓글목록
등록된 댓글이 없습니다.