그누보드 플러그인 SMS4를 이용한 SMS 발송하기 함수

그누보드의 플러그인 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;
}
?>

함수 사용에 따른 리턴은 배열로 하며 errorcode 값이 000 일 경우에 전송 완료 된 것입니다.

위 함수를 그대로 사용하기 위해서는 그누보드와 SMS4를 필히 설치 하여야 합니다.

CC BY-NC-SA 4.0 This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.