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

munilive
munilive

그누보드의 플러그인 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를 필히 설치하여야 합니다.

munilive

munilive

Backend Application Developer

Share

Comments

Related Posts

그누보드 no cache header 설정 오류 수정하기

그누보드 no cache header 설정 오류 수정하기

그누보드의 no cache header 설정 오류를 수정하는 방법에 대한 글이다.

munilive munilive ·
그누보드4 아이디 변경 함수 - 모든 테이블의 아이디를 변경

그누보드4 아이디 변경 함수 - 모든 테이블의 아이디를 변경

그누보드4에서 아이디를 변경할 경우 모든 테이블에 적용하는 방법과 예제 코드이다.

munilive munilive ·
$_SERVER[QUERY_STRING] 특정 파라미터 삭제 출력하기

$_SERVER[QUERY_STRING] 특정 파라미터 삭제 출력하기

게시판의 Paging 처리 시 QueryString으로 데이터를 전달할 때 paging을 위해 추가한 변수명이 겹치지 않게 하기 위해 만든 함수에 대한 설명이다.

munilive munilive ·