package itn.let.kakao.kakaoComm.kakaoApi; import java.awt.Image; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.ListIterator; import java.util.Map; import javax.annotation.Resource; import javax.swing.ImageIcon; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import egovframework.rte.fdl.property.EgovPropertyService; import itn.let.kakao.kakaoComm.KakaoButtonVO; import itn.let.kakao.kakaoComm.KakaoCommentVO; import itn.let.kakao.kakaoComm.KakaoItemVO; import itn.let.kakao.kakaoComm.KakaoReturnVO; import itn.let.kakao.kakaoComm.KakaoVO; import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService; import itn.let.utl.fcc.service.EgovStringUtil; import lombok.extern.slf4j.Slf4j; /** * @FileName : KakaoApiTemplate.java * @Project : mjon * @Date : 2023. 1. 31. * @작성자 : WYH * @프로그램 설명 : */ @Slf4j @Component public class KakaoApiTemplate { /** 비즈 회원 아이디 */ @Value("#{globalSettings['Globals.mjon.biz.url']}") private String mjonBizUrl; /** 비즈 회원 아이디 */ @Value("#{globalSettings['Globals.mjon.biz.id']}") private String mjonBizId; /** 비즈 회원 API 키*/ @Value("#{globalSettings['Globals.mjon.biz.kakao.apiKey']}") private String mjonBizKakaoApiKey; @Resource(name = "kakaoApiService") private KakaoApiService kakaoApiService; @Resource(name = "propertiesService") protected EgovPropertyService propertyService; /** * @Method Name : insertKakaoApiTemplate * @작성일 : 2023. 1. 4. * @작성자 : WYH * @Method 설명 : 발신프로필 템플릿 등록 */ @SuppressWarnings("unchecked") public KakaoReturnVO insertKakaoApiTemplate(KakaoVO kakaoVO) { KakaoReturnVO kakaoReturnVO = new KakaoReturnVO(); try { String sendUrl = mjonBizUrl + "/v3/kakao/template/add"; JSONObject jsonObject = new JSONObject(); //버튼 추가를 위한 배열 변수 선언 JSONArray btnJsonArr = new JSONArray(); JSONObject btnJsonObj = new JSONObject(); jsonObject.put("bizId", mjonBizId); jsonObject.put("apiKey", mjonBizKakaoApiKey); jsonObject.put("senderKey", kakaoVO.getSenderKey()); jsonObject.put("templateName", kakaoVO.getTemplateName()); jsonObject.put("templateMessageType", kakaoVO.getTemplateMessageType()); jsonObject.put("templateEmphasizeType", kakaoVO.getTemplateEmphasizeType()); jsonObject.put("templateContent", kakaoVO.getTemplateContent()); jsonObject.put("categoryCode", kakaoVO.getCategoryCode()); if(kakaoVO.getTemplateMessageType().equals("EX")) { jsonObject.put("templateExtra", kakaoVO.getTemplateExtra() ); }else if(kakaoVO.getTemplateMessageType().equals("AD")) { //jsonObject.put("templateAd", kakaoVO.getTamplateAd()); //메세지 유형 채널추가형인 경우 채널추가 버튼 생성해주기 btnJsonObj.put("name", "채널추가"); btnJsonObj.put("linkType", "AC"); btnJsonArr.add(btnJsonObj); }else if(kakaoVO.getTemplateMessageType().equals("MI")) { jsonObject.put("templateExtra", kakaoVO.getTemplateExtra() ); //jsonObject.put("templateAd", kakaoVO.getTamplateAd()); //메세지 유형 채널추가형인 경우 채널추가 버튼 생성해주기 btnJsonObj.put("name", "채널추가"); btnJsonObj.put("linkType", "AC"); btnJsonArr.add(btnJsonObj); } if(kakaoVO.getTemplateEmphasizeType().equals("TEXT")){ jsonObject.put("templateTitle", kakaoVO.getTemplateTitle()); jsonObject.put("templateSubtitle", kakaoVO.getTemplateSubtitle()); }else if(kakaoVO.getTemplateEmphasizeType().equals("IMAGE")){ jsonObject.put("templateImageUrl", kakaoVO.getTemplateImageUrl()); jsonObject.put("templateImageName", kakaoVO.getTemplateImageName()); }else if(kakaoVO.getTemplateEmphasizeType().equals("ITEM_LIST")){ } List buttonVOList = new ArrayList(); buttonVOList = kakaoVO.getButtonVOList(); for(KakaoButtonVO buttonInfo : buttonVOList) { JSONObject btnTmpObj = new JSONObject(); String linkType = buttonInfo.getLinkType(); String name = buttonInfo.getName(); String linkAnd = ""; String linkIos = ""; String linkMo = ""; String linkPc = ""; if(linkType.equals("WL")) { linkMo = buttonInfo.getLinkMo(); linkPc = buttonInfo.getLinkPc(); btnTmpObj.put("linkMo", linkMo); btnTmpObj.put("linkPc", linkPc); }else if(linkType.equals("AL")) { linkAnd = buttonInfo.getLinkAnd(); linkIos = buttonInfo.getLinkIos(); btnTmpObj.put("linkAnd", linkAnd); btnTmpObj.put("linkIos", linkIos); } if(!linkType.equals("") && !name.equals("")) { btnTmpObj.put("name", name); btnTmpObj.put("linkType", linkType); btnJsonArr.add(btnTmpObj); } } for(int i=0; i 0) { jsonObject.put("buttons", btnJsonArr); } HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost(sendUrl); httpPost.setEntity(new StringEntity(jsonObject.toString(), "UTF-8")); httpPost.addHeader("Content-type", "application/json"); httpPost.addHeader("Accept", "application/json"); HttpResponse response = httpClient.execute(httpPost); String result = ""; String statusCode = Integer.toString(response.getStatusLine().getStatusCode()); if(statusCode.equals("200")) { result = EntityUtils.toString(response.getEntity()); result = new String(result.getBytes("iso-8859-1"));//한글 깨짐 현상이 있어서 변환 해줌. System.out.println(result); JSONParser parser = new JSONParser(); Object obj = parser.parse(result); JSONObject object = (JSONObject) obj; String code = object.get("code").toString(); String msg = object.get("message").toString(); kakaoReturnVO.setBizReturnCode(code); kakaoReturnVO.setBizReturnMsg(msg); }else { kakaoReturnVO.setBizReturnMsg("400 : 명령을 실행 오류"); } } catch (Exception e) { e.printStackTrace(); } return kakaoReturnVO; } /** * @Method Name : updateKakaoApiTemplate * @작성일 : 2023. 2. 17. * @작성자 : 우영두 * @Method 설명 : 발신프로필 템플릿 수정 */ @SuppressWarnings("unchecked") public KakaoReturnVO updateKakaoApiTemplate(KakaoVO kakaoVO) { KakaoReturnVO kakaoReturnVO = new KakaoReturnVO(); try { String sendUrl = mjonBizUrl + "/v3/kakao/template/update"; JSONObject jsonObject = new JSONObject(); //버튼 추가를 위한 배열 변수 선언 JSONArray btnJsonArr = new JSONArray(); JSONObject btnJsonObj = new JSONObject(); jsonObject.put("bizId", mjonBizId); jsonObject.put("apiKey", mjonBizKakaoApiKey); jsonObject.put("senderKey", kakaoVO.getSenderKey()); jsonObject.put("templateCode", kakaoVO.getTemplateCode()); jsonObject.put("newTemplateCode", kakaoVO.getNewTemplateCode()); jsonObject.put("templateName", kakaoVO.getTemplateName()); jsonObject.put("templateMessageType", kakaoVO.getTemplateMessageType()); jsonObject.put("templateEmphasizeType", kakaoVO.getTemplateEmphasizeType()); jsonObject.put("templateContent", kakaoVO.getTemplateContent()); jsonObject.put("categoryCode", kakaoVO.getCategoryCode()); if(kakaoVO.getTemplateMessageType().equals("EX")) { jsonObject.put("templateExtra", kakaoVO.getTemplateExtra() ); }else if(kakaoVO.getTemplateMessageType().equals("AD")) { //jsonObject.put("templateAd", kakaoVO.getTamplateAd()); //메세지 유형 채널추가형인 경우 채널추가 버튼 생성해주기 btnJsonObj.put("name", "채널추가"); btnJsonObj.put("linkType", "AC"); btnJsonArr.add(btnJsonObj); }else if(kakaoVO.getTemplateMessageType().equals("MI")) { jsonObject.put("templateExtra", kakaoVO.getTemplateExtra() ); //jsonObject.put("templateAd", kakaoVO.getTamplateAd()); //메세지 유형 채널추가형인 경우 채널추가 버튼 생성해주기 btnJsonObj.put("name", "채널추가"); btnJsonObj.put("linkType", "AC"); btnJsonArr.add(btnJsonObj); } if(kakaoVO.getTemplateEmphasizeType().equals("TEXT")){ jsonObject.put("templateTitle", kakaoVO.getTemplateTitle()); jsonObject.put("templateSubtitle", kakaoVO.getTemplateSubtitle()); }else if(kakaoVO.getTemplateEmphasizeType().equals("IMAGE")){ jsonObject.put("templateImageUrl", kakaoVO.getTemplateImageUrl()); jsonObject.put("templateImageName", kakaoVO.getTemplateImageName()); }else if(kakaoVO.getTemplateEmphasizeType().equals("ITEM_LIST")){ } List buttonVOList = new ArrayList(); buttonVOList = kakaoVO.getButtonVOList(); for(KakaoButtonVO buttonInfo : buttonVOList) { JSONObject btnTmpObj = new JSONObject(); String linkType = buttonInfo.getLinkType(); String name = buttonInfo.getName(); String linkAnd = ""; String linkIos = ""; String linkMo = ""; String linkPc = ""; if(linkType.equals("WL")) { linkMo = buttonInfo.getLinkMo(); linkPc = buttonInfo.getLinkPc(); btnTmpObj.put("linkMo", linkMo); btnTmpObj.put("linkPc", linkPc); }else if(linkType.equals("AL")) { linkAnd = buttonInfo.getLinkAnd(); linkIos = buttonInfo.getLinkIos(); btnTmpObj.put("linkAnd", linkAnd); btnTmpObj.put("linkIos", linkIos); } if(!linkType.equals("") && !name.equals("")) { btnTmpObj.put("name", name); btnTmpObj.put("linkType", linkType); btnJsonArr.add(btnTmpObj); } } for(int i=0; i 0) { jsonObject.put("buttons", btnJsonArr); } HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost(sendUrl); httpPost.setEntity(new StringEntity(jsonObject.toString(), "UTF-8")); httpPost.addHeader("Content-type", "application/json"); httpPost.addHeader("Accept", "application/json"); HttpResponse response = httpClient.execute(httpPost); String result = ""; String statusCode = Integer.toString(response.getStatusLine().getStatusCode()); if(statusCode.equals("200")) { result = EntityUtils.toString(response.getEntity()); result = new String(result.getBytes("iso-8859-1"));//한글 깨짐 현상이 있어서 변환 해줌. JSONParser parser = new JSONParser(); Object obj = parser.parse(result); JSONObject object = (JSONObject) obj; String code = object.get("code").toString(); String msg = object.get("message").toString(); kakaoReturnVO.setBizReturnCode(code); kakaoReturnVO.setBizReturnMsg(msg); }else { kakaoReturnVO.setBizReturnMsg("400 : 명령을 실행 오류"); } } catch (Exception e) { e.printStackTrace(); } return kakaoReturnVO; } /** * @Method Name : selectKakaoApiTemplate * @작성일 : 2023. 1. 25. * @작성자 : WYH * @Method 설명 : 발신프로필 템플릿 조회 */ @SuppressWarnings("unchecked") public KakaoReturnVO selectKakaoApiTemplate(KakaoVO kakaoVO) { KakaoReturnVO kakaoReturnVO = new KakaoReturnVO(); try { String sendUrl = mjonBizUrl + "/v3/kakao/template/list"; log.info(" + kakaoVO.getCategoryCode() :: [{}]", kakaoVO.getCategoryCode()); JSONObject jsonObject = new JSONObject(); jsonObject.put("bizId", mjonBizId); jsonObject.put("apiKey", mjonBizKakaoApiKey); jsonObject.put("senderKey", kakaoVO.getSenderKey()); jsonObject.put("categoryCode", kakaoVO.getCategoryCode()); //템플릿 페이징 처리 if(!"".equals(kakaoVO.getCount())) { //페이지 별 템플릿 개수. 디폴트 30 jsonObject.put("count", kakaoVO.getCount()); } if(!"".equals(kakaoVO.getPage())) { //요청 페이지. 디폴트 1 jsonObject.put("page", kakaoVO.getPage()); } // 알림톡 화면 템플릿 조회(승인난 템플릿만 조회) if(kakaoVO.getPageType().equals("notityTalk")) { // jsonObject.put("templateStatus", "ACT"); }else if(!kakaoVO.getTemplateStatus().equals("")) {//템플릿 조회시 상태값이 넘어오면 해당 데이터만 조회, 없으면 전체 조회 jsonObject.put("templateStatus", kakaoVO.getTemplateStatus()); } if(!kakaoVO.getKeyword().equals("")) { jsonObject.put("keyword", kakaoVO.getKeyword()); } HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost(sendUrl); httpPost.setEntity(new StringEntity(jsonObject.toString(), "UTF-8")); httpPost.addHeader("Content-type", "application/json"); httpPost.addHeader("Accept", "application/json"); HttpResponse response = httpClient.execute(httpPost); String result = ""; String statusCode = Integer.toString(response.getStatusLine().getStatusCode()); if(statusCode.equals("200")) { result = EntityUtils.toString(response.getEntity()); result = new String(result.getBytes("iso-8859-1"));//한글 깨짐 현상이 있어서 변환 해줌. JSONParser parser = new JSONParser(); Object obj = parser.parse(result); JSONObject object = (JSONObject) obj; log.info(" + object [{}]",object.toJSONString()); String code = object.get("code").toString(); String msg = object.get("message").toString(); kakaoReturnVO.setBizReturnCode(code); kakaoReturnVO.setBizReturnMsg(msg); if(code.equals("200")) {//kakao api 결과가 성공 코드이면 리턴 데이터 파싱 시작 kakaoReturnVO.setTotalCount(object.get("totalCount").toString()); kakaoReturnVO.setTotalPage(object.get("totalPage").toString()); kakaoReturnVO.setCurrentPage(object.get("currentPage").toString()); JSONObject data = (JSONObject) object.get("data"); //String type으로 리턴 됨. JSONArray tempJSONList = (JSONArray) data.get("list"); List templatList = new ArrayList() ; for(int i=0; i < tempJSONList.size(); i++) { JSONObject templateInfo = (JSONObject)tempJSONList.get(i); log.info(" + templateInfo [{}]",templateInfo.toJSONString()); KakaoReturnVO templateInfoVO = new KakaoReturnVO(); String senderKey = templateInfo.get("senderKey").toString(); String senderKeyType = templateInfo.get("senderKeyType").toString(); String templateCode = templateInfo.get("templateCode").toString(); String templateName = templateInfo.get("templateName").toString(); String categoryCode = templateInfo.get("categoryCode").toString(); String createdAt = templateInfo.get("createdAt").toString(); String modifiedAt = templateInfo.get("modifiedAt").toString(); String serviceStatus = templateInfo.get("serviceStatus").toString(); templateInfoVO.setSenderKey(senderKey); templateInfoVO.setSenderKeyType(senderKeyType); templateInfoVO.setTemplateCode(templateCode); templateInfoVO.setTemplateName(templateName); templateInfoVO.setCategoryCode(categoryCode); templateInfoVO.setCreatedAt(createdAt); templateInfoVO.setModifiedAt(modifiedAt); if(serviceStatus.equals("REG")) { templateInfoVO.setServiceStatus("등록"); }else if(serviceStatus.equals("REQ")) { templateInfoVO.setServiceStatus("검수요청"); }else if(serviceStatus.equals("REJ")) { templateInfoVO.setServiceStatus("반려"); }else if(serviceStatus.equals("STP")) { templateInfoVO.setServiceStatus("차단"); }else if(serviceStatus.equals("RDY")) { templateInfoVO.setServiceStatus("발송전"); }else if(serviceStatus.equals("ACT")) { templateInfoVO.setServiceStatus("정상"); }else if(serviceStatus.equals("DMT")) { templateInfoVO.setServiceStatus("휴면"); }else if(serviceStatus.equals("BLK")) { templateInfoVO.setServiceStatus("차단"); } templatList.add(templateInfoVO); } kakaoReturnVO.setTemplatList(templatList); } }else { kakaoReturnVO.setBizReturnMsg("400 : 명령을 실행 오류"); } } catch (Exception e) { e.printStackTrace(); } return kakaoReturnVO; } /** * @Method Name : requestKakaoApiTemplate * @작성일 : 2023. 1. 30. * @작성자 : WYH * @Method 설명 : 템플릿 검수 요청 */ public KakaoReturnVO requestKakaoApiTemplate(KakaoVO kakaoVO) { KakaoReturnVO kakaoReturnVO = new KakaoReturnVO(); try { String sendUrl = mjonBizUrl + "/v3/kakao/template/request"; JSONObject jsonObject = new JSONObject(); jsonObject.put("bizId", mjonBizId); jsonObject.put("apiKey", mjonBizKakaoApiKey); jsonObject.put("senderKey", kakaoVO.getSenderKey()); // jsonObject.put("senderKeyType", kakaoVO.getSenderKeyType()); jsonObject.put("templateCode", kakaoVO.getTemplateCode()); HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost(sendUrl); httpPost.setEntity(new StringEntity(jsonObject.toString(), "UTF-8")); httpPost.addHeader("Content-type", "application/json"); httpPost.addHeader("Accept", "application/json"); HttpResponse response = httpClient.execute(httpPost); String result = ""; String statusCode = Integer.toString(response.getStatusLine().getStatusCode()); if(statusCode.equals("200")) { result = EntityUtils.toString(response.getEntity()); result = new String(result.getBytes("iso-8859-1"));//한글 깨짐 현상이 있어서 변환 해줌. JSONParser parser = new JSONParser(); Object obj = parser.parse(result); JSONObject object = (JSONObject) obj; String code = object.get("code").toString(); String msg = object.get("message").toString(); kakaoReturnVO.setBizReturnCode(code); kakaoReturnVO.setBizReturnMsg(msg); }else { kakaoReturnVO.setBizReturnMsg("400 : 명령을 실행 오류"); } } catch (Exception e) { e.printStackTrace(); } return kakaoReturnVO; } /** * @Method Name : requestCancelKakaoApiTemplate * @작성일 : 2023. 3. 10. * @작성자 : 우영두 * @Method 설명 : 템플릿 검수 요청 취소 */ public KakaoReturnVO requestCancelKakaoApiTemplate(KakaoVO kakaoVO) { KakaoReturnVO kakaoReturnVO = new KakaoReturnVO(); try { String sendUrl = mjonBizUrl + "/v3/kakao/template/cancel_request"; JSONObject jsonObject = new JSONObject(); jsonObject.put("bizId", mjonBizId); jsonObject.put("apiKey", mjonBizKakaoApiKey); jsonObject.put("senderKey", kakaoVO.getSenderKey()); jsonObject.put("templateCode", kakaoVO.getTemplateCode()); HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost(sendUrl); httpPost.setEntity(new StringEntity(jsonObject.toString(), "UTF-8")); httpPost.addHeader("Content-type", "application/json"); httpPost.addHeader("Accept", "application/json"); HttpResponse response = httpClient.execute(httpPost); String result = ""; String statusCode = Integer.toString(response.getStatusLine().getStatusCode()); if(statusCode.equals("200")) { result = EntityUtils.toString(response.getEntity()); result = new String(result.getBytes("iso-8859-1"));//한글 깨짐 현상이 있어서 변환 해줌. JSONParser parser = new JSONParser(); Object obj = parser.parse(result); JSONObject object = (JSONObject) obj; String code = object.get("code").toString(); String msg = object.get("message").toString(); kakaoReturnVO.setBizReturnCode(code); kakaoReturnVO.setBizReturnMsg(msg); }else { kakaoReturnVO.setBizReturnMsg("400 : 명령을 실행 오류"); } } catch (Exception e) { e.printStackTrace(); } return kakaoReturnVO; } /** * @Method Name : selectKakaoApiTemplateDetail * @작성일 : 2023. 1. 31. * @작성자 : WYH * @Method 설명 : 템플릿 상세 정보 */ public KakaoReturnVO selectKakaoApiTemplateDetail(KakaoVO kakaoVO) { KakaoReturnVO kakaoReturnVO = new KakaoReturnVO(); try { String sendUrl = mjonBizUrl + "/v3/kakao/template/detail"; JSONObject jsonObject = new JSONObject(); jsonObject.put("bizId", mjonBizId); jsonObject.put("apiKey", mjonBizKakaoApiKey); jsonObject.put("senderKey", kakaoVO.getSenderKey()); jsonObject.put("templateCode", kakaoVO.getTemplateCode()); HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost(sendUrl); httpPost.setEntity(new StringEntity(jsonObject.toString(), "UTF-8")); httpPost.addHeader("Content-type", "application/json"); httpPost.addHeader("Accept", "application/json"); HttpResponse response = httpClient.execute(httpPost); String result = ""; String statusCode = Integer.toString(response.getStatusLine().getStatusCode()); if(statusCode.equals("200")) { result = EntityUtils.toString(response.getEntity()); result = new String(result.getBytes("iso-8859-1"));//한글 깨짐 현상이 있어서 변환 해줌. JSONParser parser = new JSONParser(); Object obj = parser.parse(result); JSONObject object = (JSONObject) obj; String code = object.get("code").toString(); String msg = object.get("message").toString(); kakaoReturnVO.setBizReturnCode(code); kakaoReturnVO.setBizReturnMsg(msg); if(code.equals("200")) {//kakao api 결과가 성공 코드이면 리턴 데이터 파싱 시작 JSONObject templateInfo = (JSONObject) object.get("data"); String templateCode = (templateInfo.get("templateCode") == null) ? null : templateInfo.get("templateCode").toString(); kakaoReturnVO.setTemplateCode(templateCode); String templateName = (templateInfo.get("templateName") == null) ? null : templateInfo.get("templateName").toString(); kakaoReturnVO.setTemplateName(templateName); String templateMessageType = (templateInfo.get("templateMessageType") == null) ? null : templateInfo.get("templateMessageType").toString(); kakaoReturnVO.setTemplateMessageType(templateMessageType); String templateEmphasizeType = (templateInfo.get("templateEmphasizeType") == null) ? null : templateInfo.get("templateEmphasizeType").toString(); kakaoReturnVO.setTemplateEmphasizeType(templateEmphasizeType); String templateContent = (templateInfo.get("templateContent") == null) ? null : templateInfo.get("templateContent").toString(); kakaoReturnVO.setTemplateContent(templateContent); String templateExtra = (templateInfo.get("templateExtra") == null) ? null : templateInfo.get("templateExtra").toString(); kakaoReturnVO.setTemplateExtra(templateExtra); String templateAd = (templateInfo.get("templateAd") == null) ? null : templateInfo.get("templateAd").toString(); kakaoReturnVO.setTemplateAd(templateAd); String templateImageName = (templateInfo.get("templateImageName") == null) ? null : templateInfo.get("templateImageName").toString(); kakaoReturnVO.setTemplateImageName(templateImageName); String templateImageUrl = (templateInfo.get("templateImageUrl") == null) ? null : templateInfo.get("templateImageUrl").toString(); kakaoReturnVO.setTemplateImageUrl(templateImageUrl); String templateTitle = (templateInfo.get("templateTitle") == null) ? null : templateInfo.get("templateTitle").toString(); kakaoReturnVO.setTemplateTitle(templateTitle); String templateSubtitle = (templateInfo.get("templateSubtitle") == null) ? null : templateInfo.get("templateSubtitle").toString(); kakaoReturnVO.setTemplateSubtitle(templateSubtitle); String templateHeader = (templateInfo.get("templateHeader") == null) ? null : templateInfo.get("templateHeader").toString(); kakaoReturnVO.setTemplateHeader(templateHeader); String categoryCode = (templateInfo.get("categoryCode") == null) ? null : templateInfo.get("categoryCode").toString(); kakaoReturnVO.setCategoryCode(categoryCode); Boolean securityFlag = (Boolean) templateInfo.get("securityFlag"); kakaoReturnVO.setSecurityFlag(securityFlag); String inspectionStatus = (templateInfo.get("inspectionStatus") == null) ? null : templateInfo.get("inspectionStatus").toString(); kakaoReturnVO.setInspectionStatus(inspectionStatus); String createdAt = (templateInfo.get("createdAt") == null) ? null : templateInfo.get("createdAt").toString(); kakaoReturnVO.setCreatedAt(createdAt); String modifiedAt = (templateInfo.get("modifiedAt") == null) ? null : templateInfo.get("modifiedAt").toString(); kakaoReturnVO.setModifiedAt(modifiedAt); String status = (templateInfo.get("status") == null) ? null : templateInfo.get("status").toString(); kakaoReturnVO.setStatus(status); boolean block = (boolean) templateInfo.get("block"); kakaoReturnVO.setBlock(block); boolean dormant = (boolean) templateInfo.get("dormant"); kakaoReturnVO.setDormant(dormant); // @@ 아이탬 하이라이트 및 아이탬 정보 파싱 관련 문의 //아이템 하이라이트(강조형) if(templateInfo.get("templateItemHighlight") != null) { JSONObject templateItemHighlight = (JSONObject) templateInfo.get("templateItemHighlight"); String higtLightTitle = (templateItemHighlight.get("title") == null) ? null : templateItemHighlight.get("title").toString(); String higtLightDesc = (templateItemHighlight.get("description") == null) ? null : templateItemHighlight.get("description").toString(); String higtLightImgUrl = (templateItemHighlight.get("imageUrl") == null) ? null : templateItemHighlight.get("imageUrl").toString(); kakaoReturnVO.setTitle(higtLightTitle); kakaoReturnVO.setDescription(higtLightDesc); kakaoReturnVO.setImageUrl(higtLightImgUrl); } //템플릿 아이템 정보 처리 해주기 if(templateInfo.get("templateItem") != null) { JSONObject templateItemInfo = (JSONObject) templateInfo.get("templateItem"); if(templateItemInfo.get("list") != null) {//아이템 리스트의 정보가 있으면 JSONArray itemList = (JSONArray) templateItemInfo.get("list"); if(itemList.size() != 0) { List itemVOList = new ArrayList(); for(int i=0; i < itemList.size(); i++) { JSONObject itemInfo = (JSONObject)itemList.get(i); KakaoItemVO itemVO = new KakaoItemVO(); String title = (itemInfo.get("title") == null) ? null : itemInfo.get("title").toString(); //타이틀 String description = (itemInfo.get("description") == null) ? null : itemInfo.get("description").toString(); //디스크립션 itemVO.setTitle(title); itemVO.setDescription(description); itemVOList.add(itemVO); } if(itemVOList != null) { kakaoReturnVO.setItemList(itemVOList); } } } if(templateItemInfo.get("summary") != null) {//아이템 요약정보 정보 처리해주기 JSONObject templateItemSummary = (JSONObject) templateItemInfo.get("summary"); String sumTitle = (templateItemSummary.get("title") == null) ? null : templateItemSummary.get("title").toString(); String sumDescription = (templateItemSummary.get("description") == null) ? null : templateItemSummary.get("description").toString(); kakaoReturnVO.setSumTitle(sumTitle); kakaoReturnVO.setSumDescription(sumDescription); } } //버튼 정보 처리 해주기 if(templateInfo.get("buttons") != null) { JSONArray buttonList = (JSONArray) templateInfo.get("buttons"); if(buttonList.size() != 0) { List buttonVOList = new ArrayList(); for(int i=0; i < buttonList.size(); i++) { JSONObject buttonInfo = (JSONObject)buttonList.get(i); KakaoButtonVO buttonVO = new KakaoButtonVO(); String name = (buttonInfo.get("name") == null) ? null : buttonInfo.get("name").toString(); //버튼명 String linkType = (buttonInfo.get("linkType") == null) ? null : buttonInfo.get("linkType").toString(); //버튼 일크타입 String linkAnd = (buttonInfo.get("linkAnd") == null) ? null : buttonInfo.get("linkAnd").toString(); //Android 앱 링크 주소 String linkIos = (buttonInfo.get("linkIos") == null) ? null : buttonInfo.get("linkIos").toString(); //ios 앱 링크 주소 String linkMo = (buttonInfo.get("linkMo") == null) ? null : buttonInfo.get("linkMo").toString(); //모바일 웹 링크 주소 String linkPc = (buttonInfo.get("linkPc") == null) ? null : buttonInfo.get("linkPc").toString(); //PC 웹 링크 주소 String pluginId = (buttonInfo.get("pluginId") == null) ? null : buttonInfo.get("pluginId").toString(); //플러그인 ID buttonVO.setName(name); buttonVO.setLinkType(linkType); buttonVO.setLinkAnd(linkAnd); buttonVO.setLinkIos(linkIos); buttonVO.setLinkMo(linkMo); buttonVO.setLinkPc(linkPc); buttonVO.setPluginId(pluginId); buttonVOList.add(buttonVO); } if(buttonVOList != null) { kakaoReturnVO.setButtonList(buttonVOList); } } } //바로연결 정보 처리 if(templateInfo.get("quickReplies") != null) { JSONArray quickReplyList = (JSONArray) templateInfo.get("quickReplies"); if(quickReplyList.size() != 0) { List quickReplyVOList = new ArrayList(); for(int i=0; i < quickReplyList.size(); i++) { JSONObject quickReplyInfo = (JSONObject)quickReplyList.get(i); KakaoButtonVO quickReplyVO = new KakaoButtonVO(); String quickName = (quickReplyInfo.get("name") == null) ? null : quickReplyInfo.get("name").toString(); //버튼명 String quickLinkType = (quickReplyInfo.get("linkType") == null) ? null : quickReplyInfo.get("linkType").toString(); //버튼 일크타입 String quickLinkAnd = (quickReplyInfo.get("linkAnd") == null) ? null : quickReplyInfo.get("linkAnd").toString(); //Android 앱 링크 주소 String quickLinkIos = (quickReplyInfo.get("linkIos") == null) ? null : quickReplyInfo.get("linkIos").toString(); //ios 앱 링크 주소 String quickLinkMo = (quickReplyInfo.get("linkMo") == null) ? null : quickReplyInfo.get("linkMo").toString(); //모바일 웹 링크 주소 String quickLinkPc = (quickReplyInfo.get("linkPc") == null) ? null : quickReplyInfo.get("linkPc").toString(); //PC 웹 링크 주소 quickReplyVO.setName(quickName); quickReplyVO.setLinkType(quickLinkType); quickReplyVO.setLinkAnd(quickLinkAnd); quickReplyVO.setLinkIos(quickLinkIos); quickReplyVO.setLinkMo(quickLinkMo); quickReplyVO.setLinkPc(quickLinkPc); quickReplyVOList.add(quickReplyVO); } if(quickReplyVOList != null) { kakaoReturnVO.setQuickReplyList(quickReplyVOList); } } } //댓글 목록 정보 if(templateInfo.get("comments") != null) { JSONArray commentList = (JSONArray) templateInfo.get("comments"); if(commentList.size() != 0) { List commentVOList = new ArrayList(); for(int i=0; i < commentList.size(); i++) { JSONObject commentInfo = (JSONObject)commentList.get(i); KakaoCommentVO kakaoCommentVO = new KakaoCommentVO(); String content = (commentInfo.get("content") == null) ? null : commentInfo.get("content").toString(); String commentInfoCreatedAt = (commentInfo.get("createdAt") == null) ? null : commentInfo.get("createdAt").toString(); String commentInfoStatus = (commentInfo.get("status") == null) ? null : commentInfo.get("status").toString(); String userName = (commentInfo.get("userName") == null) ? null : commentInfo.get("userName").toString(); kakaoCommentVO.setContent(content); kakaoCommentVO.setCreatedAt(commentInfoCreatedAt); kakaoCommentVO.setStatus(commentInfoStatus); kakaoCommentVO.setUserName(userName); if(commentInfo.get("attachment") != null) { List attachVOList = new ArrayList(); JSONArray attachList = (JSONArray) commentInfo.get("attachment"); for(int j=0; j < attachList.size(); j++) { JSONObject attachmentInfo = (JSONObject)attachList.get(i); KakaoCommentVO attachVO = new KakaoCommentVO(); String fileName = (attachmentInfo.get("originalFileName") == null) ? null : attachmentInfo.get("originalFileName").toString(); String filePath = (attachmentInfo.get("filePath") == null) ? null : attachmentInfo.get("filePath").toString(); attachVO.setOriginalFileName(fileName); attachVO.setFilePath(filePath); attachVOList.add(attachVO); } if(attachVOList != null) { kakaoCommentVO.setAttachFileList(attachVOList); } } commentVOList.add(kakaoCommentVO); } if(commentVOList != null) { kakaoReturnVO.setCommentList(commentVOList); } } } } }else { kakaoReturnVO.setBizReturnMsg("400 : 명령을 실행 오류"); } } catch (Exception e) { e.printStackTrace(); } return kakaoReturnVO; } /** * @Method Name : selectKakaoApiSimpleTemplateDetail * @작성일 : 2023. 2. 17. * @작성자 : 우영두 * @Method 설명 : 템플릿 상세 정보(필수 항목만 결과를 Parsing 처리함) * , 템플릿 리스트의 내용 상세정보 표시를 위해 사용 * , 기존 상세정보는 결과 처리에 시간이 많이 걸려서 별도로 만들었음 */ @SuppressWarnings("unchecked") public KakaoReturnVO selectKakaoApiSimpleTemplateDetail(KakaoVO kakaoVO) { KakaoReturnVO kakaoReturnVO = new KakaoReturnVO(); try { String sendUrl = mjonBizUrl + "/v3/kakao/template/detail"; JSONObject jsonObject = new JSONObject(); jsonObject.put("bizId", mjonBizId); jsonObject.put("apiKey", mjonBizKakaoApiKey); jsonObject.put("senderKey", kakaoVO.getSenderKey()); jsonObject.put("templateCode", kakaoVO.getTemplateCode()); HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost(sendUrl); httpPost.setEntity(new StringEntity(jsonObject.toString(), "UTF-8")); httpPost.addHeader("Content-type", "application/json"); httpPost.addHeader("Accept", "application/json"); HttpResponse response = httpClient.execute(httpPost); String result = ""; String statusCode = Integer.toString(response.getStatusLine().getStatusCode()); Date startDate = new Date(); System.out.println(startDate); if(statusCode.equals("200")) { result = EntityUtils.toString(response.getEntity()); result = new String(result.getBytes("iso-8859-1"));//한글 깨짐 현상이 있어서 변환 해줌. JSONParser parser = new JSONParser(); Object obj = parser.parse(result); JSONObject object = (JSONObject) obj; String code = object.get("code").toString(); String msg = object.get("message").toString(); kakaoReturnVO.setBizReturnCode(code); kakaoReturnVO.setBizReturnMsg(msg); if(code.equals("200")) {//kakao api 결과가 성공 코드이면 리턴 데이터 파싱 시작 JSONObject templateInfo = (JSONObject) object.get("data"); String templateCode = (templateInfo.get("templateCode") == null) ? null : templateInfo.get("templateCode").toString(); kakaoReturnVO.setTemplateCode(templateCode); String templateName = (templateInfo.get("templateName") == null) ? null : templateInfo.get("templateName").toString(); kakaoReturnVO.setTemplateName(templateName); String templateMessageType = (templateInfo.get("templateMessageType") == null) ? null : templateInfo.get("templateMessageType").toString(); kakaoReturnVO.setTemplateMessageType(templateMessageType); String templateEmphasizeType = (templateInfo.get("templateEmphasizeType") == null) ? null : templateInfo.get("templateEmphasizeType").toString(); kakaoReturnVO.setTemplateEmphasizeType(templateEmphasizeType); String templateContent = (templateInfo.get("templateContent") == null) ? null : templateInfo.get("templateContent").toString(); kakaoReturnVO.setTemplateContent(templateContent); String templateExtra = (templateInfo.get("templateExtra") == null) ? null : templateInfo.get("templateExtra").toString(); kakaoReturnVO.setTemplateExtra(templateExtra); String templateAd = (templateInfo.get("templateAd") == null) ? null : templateInfo.get("templateAd").toString(); kakaoReturnVO.setTemplateAd(templateAd); String templateImageName = (templateInfo.get("templateImageName") == null) ? null : templateInfo.get("templateImageName").toString(); kakaoReturnVO.setTemplateImageName(templateImageName); String templateImageUrl = (templateInfo.get("templateImageUrl") == null) ? null : templateInfo.get("templateImageUrl").toString(); kakaoReturnVO.setTemplateImageUrl(templateImageUrl); String templateTitle = (templateInfo.get("templateTitle") == null) ? null : templateInfo.get("templateTitle").toString(); kakaoReturnVO.setTemplateTitle(templateTitle); String templateSubtitle = (templateInfo.get("templateSubtitle") == null) ? null : templateInfo.get("templateSubtitle").toString(); kakaoReturnVO.setTemplateSubtitle(templateSubtitle); //String templateHeader = (templateInfo.get("templateHeader") == null) ? null : templateInfo.get("templateHeader").toString(); //kakaoReturnVO.setTemplateHeader(templateHeader); String categoryCode = (templateInfo.get("categoryCode") == null) ? null : templateInfo.get("categoryCode").toString(); kakaoReturnVO.setCategoryCode(categoryCode); //Boolean securityFlag = (Boolean) templateInfo.get("securityFlag"); //kakaoReturnVO.setSecurityFlag(securityFlag); //템플릿 검수상태값 String inspectionStatus = (templateInfo.get("inspectionStatus") == null) ? null : templateInfo.get("inspectionStatus").toString(); kakaoReturnVO.setInspectionStatus(inspectionStatus); //템플릿 등록일자 String createdAt = (templateInfo.get("createdAt") == null) ? null : templateInfo.get("createdAt").toString(); kakaoReturnVO.setCreatedAt(createdAt); //템플릿 수정일자 String modifiedAt = (templateInfo.get("modifiedAt") == null) ? null : templateInfo.get("modifiedAt").toString(); kakaoReturnVO.setModifiedAt(modifiedAt); //템플릿 상태 - S: 중지, A: 정상, R: 대기(발송전) String status = (templateInfo.get("status") == null) ? null : templateInfo.get("status").toString(); kakaoReturnVO.setStatus(status); //템플릿 차단 여부 (true:차단, false: 해제) boolean block = (boolean) templateInfo.get("block"); kakaoReturnVO.setBlock(block); //템플릿 휴면 여부 (true:휴면, false: 해제) boolean dormant = (boolean) templateInfo.get("dormant"); kakaoReturnVO.setDormant(dormant); // @@ 아이탬 하이라이트 및 아이탬 정보 파싱 관련 문의 //아이템 하이라이트(강조형) /*if(templateInfo.get("templateItemHighlight") != null) { JSONObject templateItemHighlight = (JSONObject) templateInfo.get("templateItemHighlight"); String higtLightTitle = (templateItemHighlight.get("title") == null) ? null : templateItemHighlight.get("title").toString(); String higtLightDesc = (templateItemHighlight.get("description") == null) ? null : templateItemHighlight.get("description").toString(); String higtLightImgUrl = (templateItemHighlight.get("imageUrl") == null) ? null : templateItemHighlight.get("imageUrl").toString(); kakaoReturnVO.setTitle(higtLightTitle); kakaoReturnVO.setDescription(higtLightDesc); kakaoReturnVO.setImageUrl(higtLightImgUrl); }*/ //템플릿 아이템 정보 처리 해주기 /*if(templateInfo.get("templateItem") != null) { JSONObject templateItemInfo = (JSONObject) templateInfo.get("templateItem"); if(templateItemInfo.get("list") != null) {//아이템 리스트의 정보가 있으면 JSONArray itemList = (JSONArray) templateItemInfo.get("list"); if(itemList.size() != 0) { List itemVOList = new ArrayList(); for(int i=0; i < itemList.size(); i++) { JSONObject itemInfo = (JSONObject)itemList.get(i); KakaoItemVO itemVO = new KakaoItemVO(); String title = (itemInfo.get("title") == null) ? null : itemInfo.get("title").toString(); //타이틀 String description = (itemInfo.get("description") == null) ? null : itemInfo.get("description").toString(); //디스크립션 itemVO.setTitle(title); itemVO.setDescription(description); itemVOList.add(itemVO); } if(itemVOList != null) { kakaoReturnVO.setItemList(itemVOList); } } } if(templateItemInfo.get("summary") != null) {//아이템 요약정보 정보 처리해주기 JSONObject templateItemSummary = (JSONObject) templateItemInfo.get("summary"); String sumTitle = (templateItemSummary.get("title") == null) ? null : templateItemSummary.get("title").toString(); String sumDescription = (templateItemSummary.get("description") == null) ? null : templateItemSummary.get("description").toString(); kakaoReturnVO.setSumTitle(sumTitle); kakaoReturnVO.setSumDescription(sumDescription); } }*/ //버튼 정보 처리 해주기 if(templateInfo.get("buttons") != null) { JSONArray buttonList = (JSONArray) templateInfo.get("buttons"); if(buttonList.size() != 0) { List buttonVOList = new ArrayList(); for(int i=0; i < buttonList.size(); i++) { JSONObject buttonInfo = (JSONObject)buttonList.get(i); KakaoButtonVO buttonVO = new KakaoButtonVO(); String name = (buttonInfo.get("name") == null) ? null : buttonInfo.get("name").toString(); //버튼명 String linkType = (buttonInfo.get("linkType") == null) ? null : buttonInfo.get("linkType").toString(); //버튼 일크타입 String linkAnd = (buttonInfo.get("linkAnd") == null) ? null : buttonInfo.get("linkAnd").toString(); //Android 앱 링크 주소 String linkIos = (buttonInfo.get("linkIos") == null) ? null : buttonInfo.get("linkIos").toString(); //ios 앱 링크 주소 String linkMo = (buttonInfo.get("linkMo") == null) ? null : buttonInfo.get("linkMo").toString(); //모바일 웹 링크 주소 String linkPc = (buttonInfo.get("linkPc") == null) ? null : buttonInfo.get("linkPc").toString(); //PC 웹 링크 주소 String pluginId = (buttonInfo.get("pluginId") == null) ? null : buttonInfo.get("pluginId").toString(); //플러그인 ID buttonVO.setName(name); buttonVO.setLinkType(linkType); buttonVO.setLinkAnd(linkAnd); buttonVO.setLinkIos(linkIos); buttonVO.setLinkMo(linkMo); buttonVO.setLinkPc(linkPc); buttonVO.setPluginId(pluginId); buttonVOList.add(buttonVO); } if(buttonVOList != null) { kakaoReturnVO.setButtonList(buttonVOList); } } } //바로연결 정보 처리 /*if(templateInfo.get("quickReplies") != null) { JSONArray quickReplyList = (JSONArray) templateInfo.get("quickReplies"); if(quickReplyList.size() != 0) { List quickReplyVOList = new ArrayList(); for(int i=0; i < quickReplyList.size(); i++) { JSONObject quickReplyInfo = (JSONObject)quickReplyList.get(i); KakaoButtonVO quickReplyVO = new KakaoButtonVO(); String quickName = (quickReplyInfo.get("name") == null) ? null : quickReplyInfo.get("name").toString(); //버튼명 String quickLinkType = (quickReplyInfo.get("linkType") == null) ? null : quickReplyInfo.get("linkType").toString(); //버튼 일크타입 String quickLinkAnd = (quickReplyInfo.get("linkAnd") == null) ? null : quickReplyInfo.get("linkAnd").toString(); //Android 앱 링크 주소 String quickLinkIos = (quickReplyInfo.get("linkIos") == null) ? null : quickReplyInfo.get("linkIos").toString(); //ios 앱 링크 주소 String quickLinkMo = (quickReplyInfo.get("linkMo") == null) ? null : quickReplyInfo.get("linkMo").toString(); //모바일 웹 링크 주소 String quickLinkPc = (quickReplyInfo.get("linkPc") == null) ? null : quickReplyInfo.get("linkPc").toString(); //PC 웹 링크 주소 quickReplyVO.setName(quickName); quickReplyVO.setLinkType(quickLinkType); quickReplyVO.setLinkAnd(quickLinkAnd); quickReplyVO.setLinkIos(quickLinkIos); quickReplyVO.setLinkMo(quickLinkMo); quickReplyVO.setLinkPc(quickLinkPc); quickReplyVOList.add(quickReplyVO); } if(quickReplyVOList != null) { kakaoReturnVO.setQuickReplyList(quickReplyVOList); } } }*/ //댓글 목록 정보 /*if(templateInfo.get("comments") != null) { JSONArray commentList = (JSONArray) templateInfo.get("comments"); if(commentList.size() != 0) { List commentVOList = new ArrayList(); for(int i=0; i < commentList.size(); i++) { JSONObject commentInfo = (JSONObject)commentList.get(i); KakaoCommentVO kakaoCommentVO = new KakaoCommentVO(); String content = (commentInfo.get("content") == null) ? null : commentInfo.get("content").toString(); String commentInfoCreatedAt = (commentInfo.get("createdAt") == null) ? null : commentInfo.get("createdAt").toString(); String commentInfoStatus = (commentInfo.get("status") == null) ? null : commentInfo.get("status").toString(); String userName = (commentInfo.get("userName") == null) ? null : commentInfo.get("userName").toString(); kakaoCommentVO.setContent(content); kakaoCommentVO.setCreatedAt(commentInfoCreatedAt); kakaoCommentVO.setStatus(commentInfoStatus); kakaoCommentVO.setUserName(userName); if(commentInfo.get("attachment") != null) { List attachVOList = new ArrayList(); JSONArray attachList = (JSONArray) commentInfo.get("attachment"); for(int j=0; j < attachList.size(); j++) { JSONObject attachmentInfo = (JSONObject)attachList.get(i); KakaoCommentVO attachVO = new KakaoCommentVO(); String fileName = (attachmentInfo.get("originalFileName") == null) ? null : attachmentInfo.get("originalFileName").toString(); String filePath = (attachmentInfo.get("filePath") == null) ? null : attachmentInfo.get("filePath").toString(); attachVO.setOriginalFileName(fileName); attachVO.setFilePath(filePath); attachVOList.add(attachVO); } if(attachVOList != null) { kakaoCommentVO.setAttachFileList(attachVOList); } } commentVOList.add(kakaoCommentVO); } if(commentVOList != null) { kakaoReturnVO.setCommentList(commentVOList); } } }*/ } }else { kakaoReturnVO.setBizReturnMsg("400 : 명령을 실행 오류"); } } catch (Exception e) { e.printStackTrace(); } Date endDate = new Date(); System.out.println("++++++++++++++++++++++ end ::: "+endDate); return kakaoReturnVO; } /** * @Method Name : deleteKakaoApiTemplate * @작성일 : 2023. 2. 14. * @작성자 : WYH * @Method 설명 : 등록 템플릿 삭제 */ @SuppressWarnings("unchecked") public KakaoReturnVO deleteKakaoApiTemplate(KakaoVO kakaoVO) { KakaoReturnVO kakaoReturnVO = new KakaoReturnVO(); try { String sendUrl = mjonBizUrl + "/v3/kakao/template/delete"; JSONObject jsonObject = new JSONObject(); jsonObject.put("bizId", mjonBizId); jsonObject.put("apiKey", mjonBizKakaoApiKey); jsonObject.put("senderKey", kakaoVO.getSenderKey()); jsonObject.put("templateCode", kakaoVO.getTemplateCode()); HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost(sendUrl); httpPost.setEntity(new StringEntity(jsonObject.toString(), "UTF-8")); httpPost.addHeader("Content-type", "application/json"); httpPost.addHeader("Accept", "application/json"); HttpResponse response = httpClient.execute(httpPost); String result = ""; String statusCode = Integer.toString(response.getStatusLine().getStatusCode()); if(statusCode.equals("200")) { result = EntityUtils.toString(response.getEntity()); result = new String(result.getBytes("iso-8859-1"));//한글 깨짐 현상이 있어서 변환 해줌. JSONParser parser = new JSONParser(); Object obj = parser.parse(result); JSONObject object = (JSONObject) obj; String code = object.get("code").toString(); String msg = object.get("message").toString(); kakaoReturnVO.setBizReturnCode(code); kakaoReturnVO.setBizReturnMsg(msg); }else { kakaoReturnVO.setBizReturnMsg("400 : 명령을 실행 오류"); } } catch (Exception e) { e.printStackTrace(); } return kakaoReturnVO; } /** * @Method Name : insertKakaoApiTemplateWithImage * @작성일 : 2023. 2. 16. * @작성자 : 우영두 * @Method 설명 : 알림톡 이미지 포함 등록하기 */ @SuppressWarnings("unchecked") public Map insertKakaoApiTemplateWithImage(KakaoVO kakaoVO, Map files, int fileKeyParam) throws Exception { Map resultMap = new HashMap(); try { int fileKey = fileKeyParam; String storePathString = propertyService.getString("Globals.fileStorePath"); File saveFolder = new File(storePathString); if (!saveFolder.exists() || saveFolder.isFile()) { saveFolder.mkdirs(); } List tmp = new ArrayList(files.values()); ListIterator itr = tmp.listIterator(tmp.size()); MultipartFile file; String filePath = ""; File imgFile = null; String newName = ""; String fileExt = ""; while (itr.hasPrevious()) { file = itr.previous(); String orginFileName = file.getOriginalFilename(); //-------------------------------------- // 원 파일명이 없는 경우 처리 // (첨부가 되지 않은 input file type) //-------------------------------------- if ("".equals(orginFileName)) { continue; } ////------------------------------------ int index = orginFileName.lastIndexOf("."); fileExt = orginFileName.substring(index + 1); newName = EgovStringUtil.getTimeStamp() + fileKey; long _size = file.getSize(); //이미지 파일 처리라서 확장자까지 모두 붙여서 파일 생성 함 if (!"".equals(orginFileName)) { filePath = saveFolder + File.separator + newName + "." + fileExt; file.transferTo(new File(filePath)); File newFile = new File(filePath); InputStream inputStream = new FileInputStream(newFile); Image img = new ImageIcon(newFile.toString()).getImage(); // 파일 정보 추출 int orgWidth = img.getWidth(null); int orgHeight = img.getHeight(null); long bytes = file.getSize(); long kilobyte = bytes / 1024; long megabyte = kilobyte / 1024; /* * ! 이미지 파일규격 : JPG, JPEG, PNG 만 가능/ 용량 최대 500KB 권장 사이즈 : 800px X 400px(가로 500px 미만, 가로:세로 비율이 2:1 미만 또는 3:4 초과 시 업로드 불가) * * */ //일반 이미지 최대 크기는 500KB를 넘을 수 없다. 실제 498KB여도 500이 넘었다고 등록이 안됨. ㅋ if(kilobyte > 497) { resultMap.put("code", "405"); resultMap.put("msg", "파일 최대 용량은 초과하였습니다. 이미지 최대 용량은 500KB를 초과할 수 없습니다."); return resultMap; }else if(orgWidth < 500) {//가로 사이즈가 500px 미만이면 안됨 resultMap.put("code", "405"); resultMap.put("msg", "일반 이미지의 최소 가로 사이즈는 500px 이상이어야 합니다."); return resultMap; } //일반 이미지 권장사이즈 초과시 리사이즈 처리 후 저장 //이미지를 강제로 800 / 400 으로 리사이즈 처리하면 이미지가 깨지는 부분이 있어서 처리 안하고 Fail 메세지를 보여주기로 함. //이미지 규격이 안맞으면 비즈 뿌리오 api에서 실패 메세지를 전달해줌. /*int MAX_WIDTH = 800; int MAX_HEIGHT = 400; if(orgWidth > 800 || orgHeight > 400) { if (orgWidth > MAX_WIDTH) { orgHeight = (int) (orgHeight * (MAX_WIDTH / (float) orgWidth)); orgWidth = MAX_WIDTH; } if (orgHeight > MAX_HEIGHT) { orgWidth = (int) (orgWidth * (MAX_HEIGHT / (float) orgHeight)); orgHeight = MAX_HEIGHT; } //이미지 리사이징 요청 EgovFileMngUtil fileMngUtil = new EgovFileMngUtil(); BufferedImage resizedImage = fileMngUtil.resize(inputStream ,orgWidth , orgHeight ); //리사이징된 파일 덮어쓰기 ImageIO.write(resizedImage, "jpg", new File(filePath)); }*/ imgFile = new File(filePath); } } if(imgFile.exists()) {//파일이 존재하면 카카오로 전송 처리 //첨부파일 등록 API 전송 요청 String apiUrl = "/v3/kakao/template/create_with_image"; String sendUrl = mjonBizUrl+ apiUrl; String fullFileName = newName + "." + fileExt; JSONObject jsonObject = new JSONObject(); //버튼 추가를 위한 배열 변수 선언 JSONArray btnJsonArr = new JSONArray(); JSONObject btnJsonObj = new JSONObject(); jsonObject.put("bizId", mjonBizId); jsonObject.put("apiKey", mjonBizKakaoApiKey); jsonObject.put("senderKey", kakaoVO.getSenderKey()); jsonObject.put("templateName", kakaoVO.getTemplateName()); jsonObject.put("templateMessageType", kakaoVO.getTemplateMessageType()); jsonObject.put("templateEmphasizeType", kakaoVO.getTemplateEmphasizeType()); jsonObject.put("templateContent", kakaoVO.getTemplateContent()); jsonObject.put("categoryCode", kakaoVO.getCategoryCode()); if(kakaoVO.getTemplateMessageType().equals("EX")) { jsonObject.put("templateExtra", kakaoVO.getTemplateExtra() ); }else if(kakaoVO.getTemplateMessageType().equals("AD")) { jsonObject.put("templateAd", kakaoVO.getTamplateAd()); //메세지 유형 채널추가형인 경우 채널추가 버튼 생성해주기 btnJsonObj.put("name", "채널추가"); btnJsonObj.put("linkType", "AC"); btnJsonArr.add(btnJsonObj); } if(kakaoVO.getTemplateEmphasizeType().equals("TEXT")){ jsonObject.put("templateTitle", kakaoVO.getTemplateTitle()); jsonObject.put("templateSubtitle", kakaoVO.getTemplateSubtitle()); }else if(kakaoVO.getTemplateEmphasizeType().equals("IMAGE")){ jsonObject.put("templateImageUrl", kakaoVO.getTemplateImageUrl()); jsonObject.put("templateImageName", kakaoVO.getTemplateImageName()); }else if(kakaoVO.getTemplateEmphasizeType().equals("ITEM_LIST")){ } List buttonVOList = new ArrayList(); buttonVOList = kakaoVO.getButtonVOList(); for(KakaoButtonVO buttonInfo : buttonVOList) { JSONObject btnTmpObj = new JSONObject(); String linkType = buttonInfo.getLinkType(); String name = buttonInfo.getName(); String linkAnd = ""; String linkIos = ""; String linkMo = ""; String linkPc = ""; if(linkType.equals("WL")) { linkMo = buttonInfo.getLinkMo(); linkPc = buttonInfo.getLinkPc(); btnTmpObj.put("linkMo", linkMo); btnTmpObj.put("linkPc", linkPc); }else if(linkType.equals("AL")) { linkAnd = buttonInfo.getLinkAnd(); linkIos = buttonInfo.getLinkIos(); btnTmpObj.put("linkAnd", linkAnd); btnTmpObj.put("linkIos", linkIos); } btnTmpObj.put("name", name); btnTmpObj.put("linkType", linkType); btnJsonArr.add(btnTmpObj); } for(int i=0; i 0) { jsonObject.put("buttons", btnJsonArr); } CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(sendUrl); HttpEntity httpEntity = MultipartEntityBuilder.create() .addTextBody("bizId", mjonBizId) .addTextBody("apiKey", mjonBizKakaoApiKey) .addTextBody("senderKey", kakaoVO.getSenderKey()) .addTextBody("templateName", kakaoVO.getTemplateName()) .addTextBody("templateMessageType", kakaoVO.getTemplateMessageType()) .addTextBody("templateEmphasizeType", kakaoVO.getTemplateEmphasizeType()) .addTextBody("templateContent", kakaoVO.getTemplateContent()) .addTextBody("categoryCode", kakaoVO.getCategoryCode()) .addTextBody("templateExtra", kakaoVO.getTemplateExtra()) .addTextBody("templateAd", kakaoVO.getTamplateAd()) .addTextBody("buttons", btnJsonArr.toString()) .addTextBody("templateTitle", kakaoVO.getTemplateTitle()) .addTextBody("templateSubtitle", kakaoVO.getTemplateSubtitle()) .addTextBody("templateImageUrl", kakaoVO.getTemplateImageUrl()) .addTextBody("templateImageName", kakaoVO.getTemplateImageName()) .addBinaryBody("image", new File(filePath),ContentType.MULTIPART_FORM_DATA,fullFileName) .build(); httpPost.setEntity(httpEntity); CloseableHttpResponse response = httpClient.execute(httpPost); String result = ""; String statusCode = Integer.toString(response.getStatusLine().getStatusCode()); if(statusCode.equals("200")) { result = EntityUtils.toString(response.getEntity()); result = new String(result.getBytes("iso-8859-1"));//한글 깨짐 현상이 있어서 변환 해줌. JSONParser parser = new JSONParser(); Object obj = parser.parse(result); JSONObject object = (JSONObject) obj; String code = object.get("code").toString(); String msg = object.get("message").toString(); resultMap.put("code", code); resultMap.put("msg", msg); }else { result = EntityUtils.toString(response.getEntity()); result = new String(result.getBytes("iso-8859-1"));//한글 깨짐 현상이 있어서 변환 해줌. JSONParser parser = new JSONParser(); Object obj = parser.parse(result); JSONObject object = (JSONObject) obj; String code = object.get("status").toString(); String msg = object.get("error").toString(); resultMap.put("code", code); resultMap.put("msg", msg); } httpClient.close(); } }catch (Exception e) { System.out.println("insertKakaoApiTemplateWithImage API Error !!! "+e); resultMap.put("code", "error"); resultMap.put("msg", "Exception 오류가 발생하였습니다."); return resultMap; } return resultMap; } }