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 VeSendSMS(String receiver, String msg) throws Exception { String result = ""; Map 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 sms = new HashMap(); sms.put("user_id", "copy0723"); // SMS 아이디 sms.put("key", "ny3v5te9d8131byxllc8c0v7cmx7jqo1"); //인증키 /******************** 인증정보 ********************/ /******************** 전송정보 ********************/ //msg_type - SMS, LMS, MMS 미지정 시 자동 전환 sms.put("msg", msg); // 메세지 내용 sms.put("receiver", receiver); // 수신번호 //sms.put("destination", "01111111111|담당자,01111111112|홍길동"); // 수신인 %고객명% 치환 sms.put("sender", "055-792-0233"); // 발신번호 //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 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().getClass()); System.out.println(result); }catch(Exception e){ System.out.println(e.getMessage()); } return resultMap; } }