[카테고리:] GnuBoard

  • PHP 알리고 SMS 라이브러리 사용 가이드

    이 포스팅에서는 PHP로 구현된 알리고(Ailgo) SMS 라이브러리의 사용법을 설명하겠습니다.

    알리고 SMS API를 손쉽게 사용하여 다양한 SMS 발송, 예약, 취소 기능을 구현할 수 있습니다.

    이 라이브러리는 다중 수신자 발송(Mass SMS), 메시지 상태 조회 등 주요 SMS 관련 기능을 제공하며, 이를 통해 PHP 개발자가 쉽게 통합할 수 있습니다.

    1. 클래스 개요

    AligoSMS 클래스는 알리고 API를 활용하여 SMS 발송, 대량 SMS 발송, 예약된 메시지 취소, 전송 내역 조회 등의 작업을 수행합니다.

    이 클래스는 다음과 같은 주요 기능을 제공합니다:

    • 단일/대량 SMS 발송
    • 예약된 SMS 취소
    • 최근 메시지 내역 조회
    • 남은 메시지 건수 조회
    • 메시지 상세 내역 조회

    클래스 인스턴스화

    이 클래스는 다음과 같은 형태로 인스턴스화됩니다.

    <?php
    require_once 'AligoSMS.php';
    
    $user_id = '사용자의 알리고 계정 아이디';
    $key = '발급받은 API 키';
    
    $aligo = new AligoSMS($user_id, $key);
    ?>

    2. 주요 함수와 사용 예제

    2.1 sendSMS(): 단일 메시지 발송

    단일 수신자에게 SMS 또는 MMS 메시지를 보낼 때 사용합니다.

    사용법

    $aligo->sendSMS($message, $receiver, $sender, $subject, $msg_type, $testmode_yn);

    매개변수

    • $message (문자열): 전송할 메시지 내용
    • $receiver (문자열): 수신자 전화번호
    • $sender (문자열): 발신자 전화번호
    • $subject (문자열, 선택): 메시지 제목 (MMS인 경우 필수)
    • $msg_type (문자열, 선택): 메시지 유형 (SMS 또는 MMS)
    • $testmode_yn (문자열, 선택): 테스트 모드 여부 ('Y' 또는 'N')

    예제

    $message = '안녕하세요, 알리고 SMS 테스트입니다.';
    $receiver = '01012345678';
    $sender = '0298765432';
    
    $response = $aligo->sendSMS($message, $receiver, $sender);
    print_r($response);

    반환 값

    • API 응답 데이터를 배열 형태로 반환합니다. 성공/실패 여부 및 상세 정보가 포함됩니다.

    2.2 sendMassSMS(): 대량 메시지 발송

    여러 수신자에게 동일하거나 다른 메시지를 보낼 때 사용합니다.

    사용법

    $aligo->sendMassSMS($sender, $messages, $rdate, $rtime, $msg_type, $testmode_yn);

    매개변수

    • $sender (문자열): 발신자 전화번호
    • $messages (배열): 여러 메시지를 포함하는 배열 (각 요소는 ['receiver' => 수신자, 'message' => 메시지 내용, 'subject' => 제목] 형식)
    • $rdate$rtime (문자열, 선택): 예약 발송 날짜 및 시간
    • $msg_type (문자열, 선택): 메시지 유형 (SMS 또는 MMS)
    • $testmode_yn (문자열, 선택): 테스트 모드 여부 ('Y' 또는 'N')

    예제

    $sender = '0298765432';
    $messages = [
        ['receiver' => '01011112222', 'message' => '첫 번째 메시지', 'subject' => '제목 1'],
        ['receiver' => '01033334444', 'message' => '두 번째 메시지', 'subject' => '제목 2'],
    ];
    
    $response = $aligo->sendMassSMS($sender, $messages);
    print_r($response);

    반환 값

    • 전송 결과가 포함된 배열을 반환합니다. 최대 500명까지 한 번에 전송 가능합니다.

    2.3 cancelSMS(): 예약 메시지 취소

    예약된 SMS 발송을 취소할 수 있습니다.

    사용법

    $aligo->cancelSMS($mid);

    매개변수

    • $mid (문자열): 메시지 고유 ID (예약 발송시 부여받은 ID)

    예제

    $mid = '메시지 고유 ID';
    $response = $aligo->cancelSMS($mid);
    print_r($response);

    반환 값

    • 취소 요청 결과를 배열로 반환합니다.

    2.4 getRecentMessages(): 최근 메시지 내역 조회

    최근 발송된 메시지의 내역을 조회합니다.

    사용법

    $aligo->getRecentMessages($page, $page_size, $start_date, $limit_day);

    매개변수

    • $page (정수, 선택): 조회할 페이지 번호 (기본값: 1)
    • $page_size (정수, 선택): 한 페이지에 표시할 메시지 수 (기본값: 10)
    • $start_date (문자열, 선택): 조회 시작 날짜 (YYYY-MM-DD 형식)
    • $limit_day (정수, 선택): 조회 기간 제한 (최대 조회 가능 일수)

    예제

    $response = $aligo->getRecentMessages(1, 10);
    print_r($response);

    반환 값

    • 최근 발송된 메시지 내역을 배열 형태로 반환합니다.

    2.5 getRemainingCount(): 남은 메시지 건수 조회

    현재 계정에 남아있는 메시지 발송 가능 건수를 조회합니다.

    사용법

    $aligo->getRemainingCount();

    예제

    $response = $aligo->getRemainingCount();
    print_r($response);

    반환 값

    • 남아있는 건수 정보를 배열 형태로 반환합니다.

    2.6 getSMSDetail(): SMS 상세 내역 조회

    특정 메시지의 발송 상세 내역을 조회합니다.

    사용법

    $aligo->getSMSDetail($mid, $page, $page_size);

    매개변수

    • $mid (문자열): 메시지 고유 ID
    • $page$page_size (정수, 선택): 조회할 페이지와 페이지 크기

    예제

    $mid = '메시지 고유 ID';
    $response = $aligo->getSMSDetail($mid);
    print_r($response);

    반환 값

    • 메시지의 상세 내역을 배열로 반환합니다.

    3. 주의사항 및 테스트 모드

    테스트 모드 사용

    테스트 모드를 사용하여 실제 메시지를 보내지 않고 API의 기능을 테스트할 수 있습니다. 함수 호출 시 testmode_yn을 'Y'로 설정하여 사용합니다. 테스트 모드에서는 실제 메시지가 발송되지 않으며, API 호출의 성공/실패 응답을 테스트할 수 있습니다.

    최대 발송 가능 수

    • 대량 메시지 발송의 경우 최대 500명까지 한 번에 발송할 수 있습니다. 그 이상의 경우 여러 요청으로 나누어야 합니다.

    결론

    이 PHP 클래스는 알리고 SMS API를 쉽게 사용할 수 있도록 만들어졌습니다.

    위에서 소개한 주요 기능들을 통해 단일/대량 SMS 발송, 예약 취소, 남은 건수 조회 등의 기능을 구현할 수 있습니다.

    배포 및 사용시 주의사항을 잘 확인하고, 필요에 따라 테스트 모드를 활용하여 효율적인 메시지 발송 시스템을 구축해 보세요.

    알리고 SMS 문자발송 라이브러리(https://sir.kr/cmall/1732015631)

  • [그누보드5] 회원정보 여분 필드 추가 하는 방법

    그누보드5에서 기본적으로 회원정보 테이블에 여분의 필드가 10개 제공되고 있습니다.

    그런데 개발을 하다보면 여분 필드가 10개 이상 필요로 할 때가 있는데 이때 여분 필드를 추가하는 방법을 알려드리도록 하겠습니다.

    DB 컬럼 추가

    기존 g5_member 테이블의 여분 필드는 mb_1에서 mb_10까지입니다.

    여분 필드를 11~20까지 추가하기 위해 회원정보 수정 페이지(/adm/member_form.php) 나 별도의 PHP 파일에 아래의 코드를 추가하여 실행해줍니다.

    for ($i = 11; $i <= 20; $i++) {
        $columnName = 'mb_' . $i;
        $previousColumnName = 'mb_' . ($i - 1);
    
        $sql = "SHOW COLUMNS FROM `{$g5['member_table']}` LIKE '{$columnName}'";
        $res = sql_fetch($sql);
    
        if (strpos($res['Type'], 'varchar') === false) {
            $sql = "ALTER TABLE `{$g5['member_table']}` 
                    ADD COLUMN `{$columnName}` VARCHAR(255) NOT NULL DEFAULT '' AFTER `{$previousColumnName}`;";
            sql_query($sql, false);
        }
    }

    “SHOW COLUMNS”를 통해 해당 컬럼이 없을 경우에만 새로 추가하는 코드를 만들었습니다.

    쿼리가 자주 수행되는 것이 마음에 걸릴 경우 컬럼 생성 후 해당 코드를 제거하셔도 무방합니다.

    관리자 회원정보 수정

    회원정보 수정 페이지 수정

    회원정보 입력/수정 페이지는 “/adm/member_form.php”입니다.

    해당 파일 7줄을 보면 아래와 같은 코드가 있습니다.

    $mb = array(
        /* 생략 */
        'mb_8' => null,
        'mb_9' => null,
        'mb_10' => null,
    );

    mb_10 컬럼 밑으로 mb_11에서 mb_20까지 추가하겠습니다.

    $mb = array(
        /* 생략 */
        'mb_8' => null,
        'mb_9' => null,
        'mb_10' => null,
        'mb_11' => null,
        'mb_12' => null,
        'mb_13' => null,
        'mb_14' => null,
        'mb_15' => null,
        'mb_16' => null,
        'mb_17' => null,
        'mb_18' => null,
        'mb_19' => null,
        'mb_20' => null,
    );

    그리고 568번줄(위의 코드를 추가한 후에는 578번줄)을 보면 for문에 $i <= 10으로 되어있는 코드가 있는데 아래와 같이 $i <= 20으로 변경해주면 이 파일에서 수정해야할 사항은 끝입니다.

    <?php for ($i = 1; $i <= 20; $i++) { ?>
        <tr>
            <th scope="row"><label for="mb_<?php echo $i ?>">여분 필드 <?php echo $i ?></label></th>
            <td colspan="3"><input type="text" name="mb_<?php echo $i ?>" value="<?php echo $mb['mb_' . $i] ?>" id="mb_<?php echo $i ?>" class="frm_input" size="30" maxlength="255"></td>
        </tr>
    <?php } ?>

    회원정보 저장 페이지 수정

    회원정보를 입력하고 정보를 저장하는 페이지는 “/adm/member_form_update.php”입니다.

    해당 파일 91줄을 보면 아래와 같은 코드가 있습니다.

    $sql_common = "  mb_name = '{$posts['mb_name']}',
                     /* 생략 */
                     mb_9 = '{$posts['mb_9']}',
                     mb_10 = '{$posts['mb_10']}' ";

    mb_10 부분 밑에 아래와 같이 mb_11부터 mb_20까지 추가해주면 됩니다.

    $sql_common = "  mb_name = '{$posts['mb_name']}',
                     /* 생략 */
                     mb_9 = '{$posts['mb_9']}',
                     mb_10 = '{$posts['mb_10']}',
                     mb_11 = '{$posts['mb_11']}',
                     mb_12 = '{$posts['mb_12']}',
                     mb_13 = '{$posts['mb_13']}',
                     mb_14 = '{$posts['mb_14']}',
                     mb_15 = '{$posts['mb_15']}',
                     mb_16 = '{$posts['mb_16']}',
                     mb_17 = '{$posts['mb_17']}',
                     mb_18 = '{$posts['mb_18']}',
                     mb_19 = '{$posts['mb_19']}',
                     mb_20 = '{$posts['mb_20']}' ";

    테스트

    이제 회원정보 수정 페이지에서 여분 필드가 11~20까지 출력되는지 확인하고 데이터도 정상적으로 저장이 되는지 테스트 해보시면 된 답니다.


  • [그누보드5] 회원관리페이지 여분필드 HOOK 이용해 명칭 변경 방법

    그누보드5를 이용할 때 회원정보 여분필드를 사용하다가 추후에 사용용도를 잊어먹는 경우가 많는데 이럴 때 회원관리 관리자 페이지에서 여분필드의 명칭을 변경하는 방법을 알려드리겠습니다.

    2가지 방법이 있는데 내부코어를 수정하는 방법과 내부코어를 변경하지 않고 그누보드 5.4부터 지원하는 HOOK(훅)을 통해 필드명칭을 변경하는 방법이 있습니다.

    1. 관리자페이지 수정 방법

    “/adm/member_form.php”파일을 열어서 568번째 줄을 보면 아래와 같은 코드가 있습니다.

    <?php for ($i = 1; $i <= 10; $i++) { ?>
        <tr>
            <th scope="row"><label for="mb_<?php echo $i ?>">여분 필드 <?php echo $i ?></label></th>
            <td colspan="3"><input type="text" name="mb_<?php echo $i ?>" value="<?php echo $mb['mb_' . $i] ?>" id="mb_<?php echo $i ?>" class="frm_input" size="30" maxlength="255"></td>
        </tr>
    <?php } ?>

    for문을 이용해 총 10개의 여분 필드를 표시해주고 있는데 이 코드를 아래와 같이 고쳐주면 여분 필드의 이름을 수동으로 설정할 수 있습니다.

    <tr>
        <th scope="row"><label for="mb_1">사원번호</label></th>
        <td colspan="3"><input type="text" name="mb_1" value="<?php echo $mb['mb_1'] ?>" id="mb_1" class="frm_input" size="30" maxlength="255"></td>
    </tr>
    <tr>
        <th scope="row"><label for="mb_2">입사일</label></th>
        <td colspan="3"><input type="text" name="mb_2" value="<?php echo $mb['mb_2'] ?>" id="mb_2" class="frm_input" size="30" maxlength="255"></td>
    </tr>
    <tr>
        <th scope="row"><label for="mb_3">소속부서</label></th>
        <td colspan="3"><input type="text" name="mb_3" value="<?php echo $mb['mb_3'] ?>" id="mb_3" class="frm_input" size="30" maxlength="255"></td>
    </tr>
    <!-- 중간 생략 -->
    <tr>
        <th scope="row"><label for="mb_10">여분 필드 10</label></th>
        <td colspan="3"><input type="text" name="mb_10" value="<?php echo $mb['mb_10'] ?>" id="mb_10" class="frm_input" size="30" maxlength="255"></td>
    </tr>

    위와 같은 방법으로 여분 필드의 이름을 직접 수정할 수 있답니다.

    2. HOOK으로 수정 방법

    이번에는 adm 폴더의 member_form.php 파일을 직접 수정하지 않고 add_event(HOOK)을 이용해 여분 필드의 이름을 바꿔보는 방법을 알아보겠습니다.

    “/adm/member_form.php” 파일 맨 하단에 보면 아래와 같은 코드가 있습니다.

    <?php
    run_event('admin_member_form_after', $mb, $w);

    여기서 “run_event” 함수가 HOOK이며, “admin_member_form_after” 함수가 호출되는 지점입니다.

    “admin_member_form_after” 이 이벤트가 실행될 때 회원 정보 여분 필드를 출력할 “member_add_column” 함수를 연결 시켜줄 것입니다.

    add_event('admin_member_form_after', 'member_add_column', 10, 2);

    위와 같은 코드를 수행하면 “admin_member_form_after” 이벤트가 실행될 때 “member_add_column”함수를 실행하게 됩니다.

    숫자 10은 이벤트의 우선순위인데 기본값은 10입니다.

    숫자 2는 “member_add_column” 함수에 들어가는 매개변수의 갯수입니다. “$mb”와 “$w” 이렇게 2개가 전달되고 있어서 2라는 값을 넣어줬습니다.

    이제 “member_add_column”함수를 구현하면 됩니다.

    function member_add_column($mb, $w)
    {
        echo @"<script>
                 $('label[for=mb_1]').text('사원번호');
                 $('label[for=mb_2]').text('입사일');
                 $('label[for=mb_3]').text('소속부서');
                 $('label[for=mb_4]').text('직책');
                 $('label[for=mb_5]').text('직위');
                 $('label[for=mb_6]').text('여분6');
                 $('label[for=mb_7]').text('여분7');
                 $('label[for=mb_8]').text('여분8');
                 $('label[for=mb_9]').text('여분9');
                 $('label[for=mb_10]').text('여분10');
               </script>";
    }

    JQuery를 통해 각 레이블의 텍스트를 변경하는 방식으로 처리하였습니다.

    아래의 코드는 위의 HOOK 코드를 extend 폴더안에 넣어서 내부코드를 건드리지 않고 작동하도록 구현해봤습니다.

    <?php
    if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
    
    add_event('admin_member_form_after', 'member_add_column', 10, 2);
    
    function member_add_column($mb, $w)
    {
        echo @"<script>
                 $('label[for=mb_1]').text('사원번호');
                 $('label[for=mb_2]').text('입사일');
                 $('label[for=mb_3]').text('소속부서');
                 $('label[for=mb_4]').text('직책');
                 $('label[for=mb_5]').text('직위');
                 $('label[for=mb_6]').text('여분6');
                 $('label[for=mb_7]').text('여분7');
                 $('label[for=mb_8]').text('여분8');
                 $('label[for=mb_9]').text('여분9');
                 $('label[for=mb_10]').text('여분10');
               </script>";
    }
    ?>

    위의 내용을 “member.extend.php”라는 이름으로 저장하고(파일 이름은 마음대로 지정하셔도 됩니다.) “/extend” 폴더에 넣어두면 됩니다.

    참고

    (그누보드 공식 홈페이지) Hook 개념 소개