그누보드 플러그인 SMS4를 이용한 SMS 발송하기 함수
Written by munilive on (Updated: )그누보드의 플러그인 SMS4를 이용할 때 사용할 수 있는 SMS 발송 함수입니다.
회원아이디를 입력하여서도 바로 발송 할 수 있도록 추가적인 함수를 만들었습니다. 더불어 회원아이디로 발송할 경우에는 22시부터 다음 날 아침 9시 이전에 발송되는 문자는 예약기능을 적용해 아침 9시에 일괄발송 되는 기능이 추가되어있습니다.
<?
// 필수 include
include_once("{$g4['path']}/sms.config.php");
include_once("{$g4['path']}/lib/sms.lib.php");
// 받는사람 아이디, 보내는 메시지, 보내는 사람 아이디
function SendSMStoID($mb_id, $mh_message, $sender_id="") {
global $g4, $member;
$rtn = Array("errcode"=>"", "errmsg"=>"");
$mb = get_member($mb_id);
// 탈퇴한 회원이면 SMS 보내지 않는다.
if($mb['mb_level'] == 1 && $mb['mb_leave_date'] != "") {
$rtn["errcode"] = "999";
$rtn["errmsg"] = "에러: 탈퇴한 회원입니다.";
return $rtn;
}
$mh_hp = $mb['mb_hp'];
$nTime = $g4['server_time'];
$time_Gmi = date("Gmi", $nTime);
if($time_Gmi < 90000) {
$booking_time = date("Y-m-d 09:00:00", $nTime); //당일 오전 9시에 문자를 일괄 발송한다.
} else if($time_Gmi > 220000) {
$booking_time = date("Y-m-d 09:00:00", strtotime("+1day", $nTime)); // 22시 이후는 자정이므로 다음날 9시에 일괄적으로 보낸다.
} else {
$booking_time = "";
}
// 보내는 사람 아이디가 있으면 해당 회원의 핸드폰번호를 입력한다.
if($sender_id) {
$sender = get_member($sender_id);
$mh_reply = $sender['mb_hp'];
} else {
$mh_reply = "";
}
$rtn = Send_SMS($mh_hp, $mh_message, $mh_reply, $booking_time);
return $rtn;
}
// SMS 보내기 함수
// 받는사람 번호, 보내는 메시지, 보내는 사람 번호,
function Send_SMS($mh_hp, $mh_message, $mh_reply="", $booking_time="") {
global $g4, $member;
$rtn = Array("errcode"=>"", "errmsg"=>"");
// SMS 설정값 배열변수
$sms4 = sql_fetch("select * from $g4[sms4_config_table]");
// 보내는사람 번호가 없으면 관리자 번호로
if(empty($mh_reply)) $mh_reply = $sms4['cf_phone'];
$mh_reply = str_replace("-", "", $mh_reply);
if (!check_string($mh_reply, _G4_NUMERIC_)) {
$rtn["errcode"] = "210";
$rtn["errmsg"] = "보내는 번호가 올바르지 않습니다.";
return $rtn;
}
$mh_hp = explode(',', $mh_hp);
// 핸드폰 번호만 걸러낸다.
$tmp = array();
for ($i=0; $i<count($mh_hp); $i++)
{
$hp = trim($mh_hp[$i]);
$hp = get_hp($hp);
if ($hp)
$tmp[][bk_hp] = get_hp($hp, 0);
}
$mh_hp = $tmp;
$total = count($mh_hp);
$minus_point = 0; // 차감할 포인트 점수
if(strtotime($booking_time)) {
$mh_booking = date("Y-m-d H:i:s", strtotime($booking_time)); // 예약 전송시간 (Y-m-d H:i:s) 형식
$booking = date("YmdHis", strtotime($booking_time)); // 예약 전송시간 (YmdHis) 형식
} else {
$mh_booking = "";
$booking = "";
}
$SMS = new SMS4;
$SMS->SMS_con($sms4[cf_ip], $sms4[cf_id], $sms4[cf_pw], $sms4[cf_port]);
$result = $SMS->Add($mh_hp, $mh_reply, '', '', $mh_message, $booking, $total);
$is_success = null;
$errcode = "";
if ($result)
{
$result = $SMS->Send();
if ($result) //SMS 서버에 접속했습니다.
{
foreach ($SMS->Result as $result)
{
list($hp, $code) = explode(":", $result);
if (substr($code,0,5) == "Error")
{
$is_success = false;
switch (substr($code,6,2)) {
case '02': // "02:형식오류"
$mh_log = "형식이 잘못되어 전송이 실패하였습니다.";
$errcode = "302";
break;
case '23': // "23:인증실패,데이터오류,전송날짜오류"
$mh_log = "데이터를 다시 확인해 주시기바랍니다.";
$errcode = "323";
break;
case '97': // "97:잔여코인부족"
$mh_log = "잔여코인이 부족합니다.";
$errcode = "397";
break;
case '98': // "98:사용기간만료"
$mh_log = "사용기간이 만료되었습니다.";
$errcode = "398";
break;
case '99': // "99:인증실패"
$mh_log = "인증 받지 못하였습니다. 계정을 다시 확인해 주세요.";
$errcode = "399";
break;
default: // "미 확인 오류"
$mh_log = "알 수 없는 오류로 전송이 실패하었습니다.";
$errcode = "400";
break;
}
}
else
{
$is_success = true;
$mh_log = "문자전송:".get_hp($hp, 1);
$errcode = "000";
}
if($member['mb_id']) $mb_id = $member['mb_id'];
else $mb_id = "admin";
$hp = get_hp($hp, 1);
$log = array_shift($SMS->Log);
sql_query("insert into $g4[sms4_member_history_table] set mb_id='{$mb_id}', mh_reply='$mh_reply', mh_hp='$hp', mh_datetime='$g4[time_ymdhis]', mh_booking='$mh_booking', mh_log='$mh_log', mh_ip='{$_SERVER['REMOTE_ADDR']}' ");
if ($is_success)
insert_point($mb_id, (-1) * $sms4[cf_point], $mh_log);
}
$SMS->Init(); // 보관하고 있던 결과값을 지웁니다.
}
else {
$rtn["errcode"] = "220";
$rtn["errmsg"] = "에러: SMS 서버와 통신이 불안정합니다.";
return $rtn;
}
}
else {
$rtn["errcode"] = "230";
$rtn["errmsg"] = "에러: SMS 데이터 입력도중 에러가 발생하였습니다.";
return $rtn;
}
if($errcode) {
// 000 전송완료
$rtn["errcode"] = $errcode;
$rtn["errmsg"] = $mh_log;
} else {
$rtn["errcode"] = "";
$rtn["errmsg"] = "에러 : SMS 발송에 문제가 발생 하였습니다. 관리자에게 문의 하세요.";
}
return $rtn;
}
?>
함수 사용에 따른 반환은 배열로 하며 error code
값이 000
일 경우에 전송 완료된 것입니다.
위 함수를 그대로 사용하기 위해서는 그누보드와 SMS4를 필히 설치하여야 합니다.