Language/Java, Jsp

JSP cafe24 SMS send

__bo0o_ 2022. 3. 24. 22:10

사용 방법

나의 서비스 관리(카카오 알림톡/SMS 비즈니스형의 경우) - SMS 관리 - 소스 예제 - JSP 소스 예제를 보면

 

소스 예제가 여러 개 있긴한데 SMS 보내려면 아래 세 예제 코드만 보면 되는데요.

문자전송 - 발송 폼 소스 예제

문자전송 - 발송요청 처리 소스예제1

문자전송 - 발송요청 처리(발신번호 목록 조회) 소스예제2


sms 폴더를 하나 만들어서 차례대로 복사 붙여넣기 해줍니다.

/sms/sms_test.do

/sms/calljson.do

/sms/sms_sender.do

 

1. sms_test.do

...

    var data_file = "./calljson.do";

...

loadJSON() 함수 안에 calljson 파일 위치에 맞게 코드 수정해주고

 

위와 같이 폼 형식을 자신에게 필요한 테스트 형태로 수정해줍니다.

 

이 때 문서에 적혀있는 대로

요청 값에 필수로 되어있는 것들은 아주 당연하게도 무조건 보내줘야하고

 

여기 폼에서는 필수 요청 데이터가 input name이 action, rphone, msg 정도가 되겠습니다.

name="action" value="go" 값은 요청 값에서 필수가 아니긴 한데

sms_sender.do 코드 수정하면 빼도 됩니다. (저는 폼 요청 확인 용도로 그냥 넣어줬습니다)

 

제 폼 예시 코드는 아래와 같습니다(제목, 메시지 전송 폼만 필요하신 분들은 저 부분만 복사해서 쓰시길!)

<form method="post" name="sms" action="./sms_sender.do">
    <h2>[ Fix ]</h2>
    <p>Action : go</p>
    <input name="action" type="hidden" value="go">

    <h2>[ Test ]</h2>
    <p>Test Flag : <input type="text" name="testflag" maxlength="1"> 예) 테스트시: Y</p>
    <p>
        Alert : <input type="text" name="nointeractive" maxlength="1"> 예) 사용할 경우 : 1<br/>
        - 성공 시, 대화상자(alert) 생략
    </p>
    <p>
        메시지 타입 : <input name="smsType" value="S"> 예) S or L<br/>
        - 단문(SMS) : 최대 90byte까지 전송할 수 있으며, 잔여건수 1건이 차감됩니다.<br />
        - 장문(LMS) : 한번에 최대 2,000byte까지 전송할 수 있으며 1회 발송당 잔여건수 3건이 차감됩니다.<br/>
    </p>
    <p>Return url :	<input name="returnurl" type="text" maxlength="64" value="./sms_ok.do"></p>

    <h2>[ Request ]</h2>
    <p>받는 번호 : <input name="rphone" type="text" value="010-2998-6238"> 예) 011-011-111 , '-' 포함해서 입력.</p>
    <p>제목 :	<input type="text" name="subject" value="테스트 제목"></p>
    <p>메시지 : <input type="text" name="msg" value="테스트입니다."></p>

    <input type="submit" value="전송">
</form>

 

2. calljson.do

...

    String postParams = "userId=신청한아이디&passwd=인증후사용하세요";

...

이 파일에서는 postParams 부분만 알맞게 수정해주시면 됩니다.

 

3. sms_sender.do

<%
  /**==============================================================
    Description        : 캐릭터셋 정의
    EUC-KR: @ page contentType="text/html;charset=EUC-KR
    UTF-8: @ page contentType="text/html;charset=UTF-8
  ==============================================================**/
%>
<%@ page contentType="text/html;charset=UTF-8"%>
<%
  /**==============================================================
    Description        :  사용자 샘플코드
  ==============================================================**/
  String charsetType = "UTF-8"; // EUC-KR 또는 UTF-8
  
  ...

한글 사용하실거면 위에 친절하게 나와있는대로 UTF-8로 바꿔주시고

 

...

    // Default
    String user_id = base64Encode("SMS 아이디"); 
    String secure = base64Encode("인증키"); 
    String sphone1 = base64Encode("02"); // 보내는 번호
    String sphone2 = base64Encode("1111");
    String sphone3 = base64Encode("1111");
    String mode = base64Encode("1");

    // Get via request
    String rphone = base64Encode(nullcheck(request.getParameter("rphone"), "")); // 받는 번호
    String subject = ""; // 제목
    String msg = base64Encode(nullcheck(request.getParameter("msg"), "")); // 메세지
    String smsType = base64Encode(nullcheck(request.getParameter("smsType"), ""));
    if(nullcheck(request.getParameter("smsType"), "").equals("L")) {
      // SMSType이 있으면 SMS, LMS를 구분해서 발송 처리
      // - value : S or L
      // - 단문(SMS) : 최대 90byte까지 전송할 수 있으며, 잔여건수 1건이 차감
      // - 장문(LMS) : 한번에 최대 2,000byte까지 전송할 수 있으며 1회 발송당 잔여건수 3건 차감
      subject = base64Encode(nullcheck(request.getParameter("subject"), ""));
    }
    // System.out.println("smsType"+smsType);

    // Etc
    String testflag = base64Encode(nullcheck(request.getParameter("testflag"), "")); // 테스트 시, Y
    String returnurl = nullcheck(request.getParameter("returnurl"), "./sms_ok.do");
    String nointeractive = nullcheck(request.getParameter("nointeractive"), ""); // 결과 alert

...

마찬가지로 아이디와 인증키, 보내는 번호 넣어주세요

필요없는거 제거하다보니까 응답 코드 -101(변수 부족 에러) 에러가 떴었는데

문서에는 필수라고 안나와있는데 mode 부분도 필수더라고요

Etc 주석 부분은 필요 없다면 안넣으셔도 되는데 저는 테스트 용도로 넣어뒀습니다.

 

...

    // 데이터 맵핑 변수 정의
    String arrKey[]
        = new String[] {"mode", "user_id","secure","sphone1","sphone2","sphone3",
                      "rphone","subject","msg","testflag", "smsType"};
    String valKey[]= new String[arrKey.length] ;
    valKey[0] = mode;
    valKey[1] = user_id;
    valKey[2] = secure;
    valKey[3] = sphone1;
    valKey[4] = sphone2;
    valKey[5] = sphone3;
    valKey[6] = rphone;
    valKey[7] = subject;
    valKey[8] = msg;
    valKey[9] = testflag;
    valKey[10] = smsType;

...

필요한 부분만 알맞게 넣어주신 다음에

 

제대로 메시지가 가는지 확인해주시면 됩니다.

 

추가적으로

제가 처음에 폼 action 부분에 .do 파일이 아니라

sms_sender.jsp로 보냈었는데 자꾸 403 forbidden 에러가 나서

cors 오류인가 권한 문제인가 뭔가 한참 검색하고 헤맸었는데

 

.jsp 파일을 웹에서 접근 불가하게 한 것 같고

실제로 지금처럼 jsp 파일이 웹에서 접근되면 안되는게 맞다. 라고 알려주셨습니다.

 

저는 단순하게 php처럼 그냥 접근되는 줄 알았는데 아니었네용....ㅎ

혹시 저처럼 조금 삽질하시는 분이 계시다면 도움이 되셨길 바랍니다 ㅎ.ㅎ,.~!~

반응형