koipa_edu_2025-1/src/main/java/kcc/ve/cmm/VeSendSMS.java

181 lines
6.5 KiB
Java

package kcc.ve.cmm;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.HttpClients;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.databind.ObjectMapper;
import kcc.com.cmm.service.EgovFileMngUtil;
public class VeSendSMS {
private static final Logger LOGGER = LoggerFactory.getLogger(EgovFileMngUtil.class);
//================================================================
//찾교 관리자 SMS 발송 - 알리고 API
//사용자 ID : Identifier
//발급 키 : ny3v5te9d8131byxllc8c0v7cmx7jqo1
//*Request
// POST /send/ HTTP/1.1
// Host: apis.aligo.in
// Service Port: 443
//key |인증용 API Key |필수 |String
//user_id |사용자id |필수 |String
//sender |발신자 전화번호 (최대 16bytes) |필수 |String
//receiver |수신자 전화번호 - 컴마(,)분기 입력 |필수 |String
//msg |메시지 내용 |필수 |String (1~2,000Byte)
//msg_type |SMS(단문) , LMS(장문), MMS(그림문자) 구분 |X |String
//title |문자제목(LMS,MMS만 허용) |X |String (1~44Byte)
//destination |%고객명% 치환용 입력 |X |String
//rdate |예약일 (현재일이상) |X |YYYYMMDD
//rtime |예약시간 - 현재시간기준 10분이후 |X |HHII
//image1 |첨부이미지 (image 또는 image1) |X |JPEG,PNG,GIF
//image2 |첨부이미지 |X |JPEG,PNG,GIF
//image3 |첨부이미지 |X |JPEG,PNG,GIF
//testmode_yn |연동테스트시 Y 적용 |X |String
//*Response
//result_code |결과코드(API 수신유무) |Integer
//message |결과 메시지( result_code 가 0 보다 작은경우 실패사유 표기) |String
//msg_id |메시지 고유 ID |Integer
//success_cnt |요청성공 건수 |Integer
//error_cnt |요청실패 건수 |Integer
//msg_type |메시지 타입 (1. SMS, 2.LMS, 3. MMS) |String
//================================================================
public Map<String, Object> VeSendSMS(String receiver, String msg, String sndFlag) throws Exception {
String result = "";
Map<String, Object> resultMap = new HashMap<>();
try{
final String encodingType = "utf-8";
final String boundary = "____boundary____";
/**************** 문자전송하기 예제 ******************/
/* "result_code":결과코드,"message":결과문구, */
/* "msg_id":메세지ID,"error_cnt":에러갯수,"success_cnt":성공갯수 */
/* 동일내용 > 전송용 입니다.
/******************** 인증정보 ********************/
String sms_url = "https://apis.aligo.in/send/"; // 전송요청 URL
Map<String, String> sms = new HashMap<String, String>();
sms.put("user_id", "copy0723"); // SMS 아이디
sms.put("key", "ny3v5te9d8131byxllc8c0v7cmx7jqo1"); //인증키
/******************** 인증정보 ********************/
/******************** 전송정보 ********************/
//msg_type - SMS, LMS, MMS 미지정 시 자동 전환
//성인교육 기본 템플릿 제공
if("S".equals(sndFlag)) {
msg = "안녕하세요. 저작권배움터 찾아가는 교육 담당자입니다.\n" + msg + "\n감사합니다.";
}
sms.put("msg", msg); // 메세지 내용
sms.put("receiver", receiver); // 수신번호
//sms.put("destination", "01111111111|담당자,01111111112|홍길동"); // 수신인 %고객명% 치환
/*24.01.18 메뉴별 발신번호 처리ㅏ*/
String sender = "055-792-0233";
if("C".equals(sndFlag)) { // 청소년
sender = "055-792-0233";
sender ="055-792-0224";// 폰번호
}else if("S".equals(sndFlag)) { //성인
sender = "02-2669-0083";
sender = "055-792-0233";
}else if("G".equals(sndFlag)) { //체험교실
sender = "055-792-0234";
}else if("A".equals(sndFlag)) { //기반강화
sender = "02-2669-0082";
}else if("B".equals(sndFlag)) { // 기소유예
sender = "055-792-0223";
}
sms.put("sender", sender); // 발신번호
//sms.put("rdate", ""); // 예약일자 - 20161004 : 2016-10-04일기준
//sms.put("rtime", ""); // 예약시간 - 1930 : 오후 7시30분
//sms.put("testmode_yn", "Y"); // Y 인경우 실제문자 전송X , 자동취소(환불) 처리
sms.put("title", "교육운영관리시스템"); // LMS, MMS 제목 (미입력시 본문중 44Byte 또는 엔터 구분자 첫라인)
String image = "";
//image = "/tmp/pic_57f358af08cf7_sms_.jpg"; // MMS 이미지 파일 위치
/******************** 전송정보 ********************/
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setBoundary(boundary);
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.setCharset(Charset.forName(encodingType));
for(Iterator<String> i = sms.keySet().iterator(); i.hasNext();){
String key = i.next();
builder.addTextBody(key, sms.get(key)
, ContentType.create("Multipart/related", encodingType));
}
File imageFile = new File(image);
if(image!=null && image.length()>0 && imageFile.exists()){
builder.addPart("image",
new FileBody(imageFile, ContentType.create("application/octet-stream"),
URLEncoder.encode(imageFile.getName(), encodingType)));
}
HttpEntity entity = builder.build();
HttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost(sms_url);
post.setEntity(entity);
HttpResponse res = client.execute(post);
if(res != null){
BufferedReader in = new BufferedReader(new InputStreamReader(res.getEntity().getContent(), encodingType));
String buffer = null;
while((buffer = in.readLine())!=null){
result += buffer;
}
in.close();
}
ObjectMapper objectMapper = new ObjectMapper();
resultMap = objectMapper.readValue(result, new HashMap<String, Object>().getClass());
System.out.println(result);
}catch(Exception e){
System.out.println(e.getMessage());
}
return resultMap;
}
}