Compare commits
64 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3a3867558e | ||
|
|
89aa2f99ab | ||
|
|
3341a8ce51 | ||
|
|
5da092f832 | ||
|
|
d9ee601c42 | ||
|
|
4fdb8c7811 | ||
|
|
60af9f69dc | ||
|
|
dc441de569 | ||
|
|
b1a75f98ec | ||
|
|
9ee68ddb1b | ||
|
|
d95ee87570 | ||
|
|
e0ac062274 | ||
|
|
f1f610d0e8 | ||
|
|
dfa0306189 | ||
|
|
11c9136f56 | ||
|
|
7663b6f082 | ||
|
|
3f68d808b4 | ||
|
|
419c13528c | ||
|
|
324767d86d | ||
|
|
aee4527d18 | ||
|
|
21e0d52168 | ||
|
|
321bb9adeb | ||
|
|
523522cdd9 | ||
|
|
9764781c22 | ||
|
|
31df8725ef | ||
|
|
ef7d42b187 | ||
|
|
d41c503de7 | ||
|
|
0b384934e5 | ||
|
|
5d6934e311 | ||
|
|
d201592372 | ||
| 94c13d02ea | |||
|
|
f4c137a8c7 | ||
|
|
715ec569d1 | ||
|
|
c1defb3498 | ||
|
|
add6ea80b1 | ||
|
|
054ee00b6d | ||
|
|
64818ff86d | ||
|
|
3611dc59f0 | ||
|
|
93cb46a69e | ||
|
|
314a9421e5 | ||
|
|
ce5f79fa34 | ||
|
|
9bb130f3df | ||
|
|
591dfcbf52 | ||
|
|
786ddecd14 | ||
|
|
95707e8965 | ||
|
|
60602a31bc | ||
|
|
f7e96648a8 | ||
|
|
1a3088e5f5 | ||
|
|
179c22e6a8 | ||
|
|
1a5ecf869b | ||
|
|
bc3ded5541 | ||
|
|
7c5b5889c3 | ||
|
|
141d8146ce | ||
|
|
c8a27be581 | ||
|
|
8c9d292d56 | ||
|
|
39add051ec | ||
|
|
986fa3b4b9 | ||
|
|
6fc8b8cd09 | ||
|
|
c3c686e918 | ||
|
|
115630d4fb | ||
|
|
fcd1644355 | ||
|
|
1a7d676483 | ||
|
|
0e4377908a | ||
|
|
a45140a60d |
BIN
.claude/etc1.png
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
.claude/etc2.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
1
.gitignore
vendored
@ -201,6 +201,7 @@ fabric.properties
|
|||||||
rebel.xml
|
rebel.xml
|
||||||
/mvnw
|
/mvnw
|
||||||
/mvnw.cmd
|
/mvnw.cmd
|
||||||
|
/.gemini
|
||||||
/.gemini.zip
|
/.gemini.zip
|
||||||
/CLAUDE.md
|
/CLAUDE.md
|
||||||
|
|
||||||
|
|||||||
@ -259,7 +259,8 @@ public final class MsgSendUtils {
|
|||||||
String value = entry.getValue().apply(sendVO);
|
String value = entry.getValue().apply(sendVO);
|
||||||
if (smsTxt.contains(placeholder)) {
|
if (smsTxt.contains(placeholder)) {
|
||||||
if (StringUtils.isEmpty(value)) {
|
if (StringUtils.isEmpty(value)) {
|
||||||
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다.");
|
// statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다.");
|
||||||
|
StatusResponse.statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다.", "STAT_1040");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
smsTxt = smsTxt.replace(placeholder, value);
|
smsTxt = smsTxt.replace(placeholder, value);
|
||||||
@ -289,7 +290,8 @@ public final class MsgSendUtils {
|
|||||||
if (!hasPerformedMsgType) {
|
if (!hasPerformedMsgType) {
|
||||||
msgTypeResult = getMsgTypeWithByteValidation(sendVO, smsTxt);
|
msgTypeResult = getMsgTypeWithByteValidation(sendVO, smsTxt);
|
||||||
if ("INVALID".equals(msgTypeResult)) {
|
if ("INVALID".equals(msgTypeResult)) {
|
||||||
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.");
|
// statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.");
|
||||||
|
StatusResponse.statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.", "STAT_1050");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
hasPerformedMsgType = true;
|
hasPerformedMsgType = true;
|
||||||
@ -306,7 +308,8 @@ public final class MsgSendUtils {
|
|||||||
// 메시지 타입 체크는 매번 수행
|
// 메시지 타입 체크는 매번 수행
|
||||||
msgTypeResult = getMsgTypeWithByteValidation(sendVO, smsTxt);
|
msgTypeResult = getMsgTypeWithByteValidation(sendVO, smsTxt);
|
||||||
if ("INVALID".equals(msgTypeResult)) {
|
if ("INVALID".equals(msgTypeResult)) {
|
||||||
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.");
|
// statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.");
|
||||||
|
StatusResponse.statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.", "STAT_1050");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -539,6 +542,7 @@ public final class MsgSendUtils {
|
|||||||
statusResponse.setMessage(msg);
|
statusResponse.setMessage(msg);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static StatusResponse validateFilesForMessageSending(int fileCount, MjonMsgVO mjonMsgVO) {
|
public static StatusResponse validateFilesForMessageSending(int fileCount, MjonMsgVO mjonMsgVO) {
|
||||||
if (fileCount > 0) {
|
if (fileCount > 0) {
|
||||||
|
|||||||
@ -53,6 +53,7 @@ public class KakaoSendAdvcVO implements Serializable {
|
|||||||
|
|
||||||
private String adFlag; //친구톡 광고성 정보 사용 유무(Y:사용 , N:미사용)
|
private String adFlag; //친구톡 광고성 정보 사용 유무(Y:사용 , N:미사용)
|
||||||
|
|
||||||
|
private String sendKind; //문자전송 타입(H:홈페이지, A:API)
|
||||||
// =====
|
// =====
|
||||||
// =====
|
// =====
|
||||||
|
|
||||||
@ -102,6 +103,7 @@ public class KakaoSendAdvcVO implements Serializable {
|
|||||||
"\n , subMsgType=[" + subMsgType + "]" +
|
"\n , subMsgType=[" + subMsgType + "]" +
|
||||||
"\n , reqDate=[" + reqDate + "]" +
|
"\n , reqDate=[" + reqDate + "]" +
|
||||||
"\n , jsonStr=[" + jsonStr + "]" +
|
"\n , jsonStr=[" + jsonStr + "]" +
|
||||||
|
"\n , sendKind=[" + sendKind + "]" +
|
||||||
"\n , ==== MJ_MSG_DATA INSERT DATA END =======" +
|
"\n , ==== MJ_MSG_DATA INSERT DATA END =======" +
|
||||||
"\n " +
|
"\n " +
|
||||||
"\n , eachPrice=[" + eachPrice + "]" +
|
"\n , eachPrice=[" + eachPrice + "]" +
|
||||||
|
|||||||
@ -112,6 +112,9 @@ public class KakaoSendUtil {
|
|||||||
// log.info(" + templateDetail :: [{}]", templateDetail);
|
// log.info(" + templateDetail :: [{}]", templateDetail);
|
||||||
// templateDetail.getButtonList().forEach(t->log.info(" + ButtonList :: [{}]", t.toString()));
|
// templateDetail.getButtonList().forEach(t->log.info(" + ButtonList :: [{}]", t.toString()));
|
||||||
|
|
||||||
|
// API인지 확인하는 Boolean
|
||||||
|
Boolean isApiData = "A".equals(kakaoVO.getSendKind());
|
||||||
|
|
||||||
Boolean hasContentReplacement = this.replBooleanStrChecker(templateContent);
|
Boolean hasContentReplacement = this.replBooleanStrChecker(templateContent);
|
||||||
Boolean hasTitleReplacement = this.replBooleanStrChecker(templateTitle);
|
Boolean hasTitleReplacement = this.replBooleanStrChecker(templateTitle);
|
||||||
Boolean hasButtonReplacement = this.needsButtonReplacement(templateDetail.getButtonList());
|
Boolean hasButtonReplacement = this.needsButtonReplacement(templateDetail.getButtonList());
|
||||||
@ -132,8 +135,17 @@ public class KakaoSendUtil {
|
|||||||
// 사용자 개인 단가 정보 불러오기
|
// 사용자 개인 단가 정보 불러오기
|
||||||
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId());
|
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId());
|
||||||
|
|
||||||
|
kakaoVO.setAtSmishingYn(mberManageVO.getAtSmishingYn());
|
||||||
|
|
||||||
|
float shortPrice = getValidPrice(mberManageVO.getShortPrice(), sysJoinSetVO.getShortPrice());
|
||||||
|
float longPrice = getValidPrice(mberManageVO.getLongPrice(), sysJoinSetVO.getLongPrice());
|
||||||
|
float kakaoAtPrice = getValidPrice(mberManageVO.getKakaoAtPrice(), sysJoinSetVO.getKakaoAtPrice());
|
||||||
|
|
||||||
|
|
||||||
|
String shortPStr = Float.toString(shortPrice);
|
||||||
|
String mmsPStr = Float.toString(longPrice);
|
||||||
|
String kakaoAtPStr = Float.toString(kakaoAtPrice);
|
||||||
|
|
||||||
|
|
||||||
/** @MSGID KEY값 */
|
/** @MSGID KEY값 */
|
||||||
List<String> idList = mjonCommon.getNextCustomMsgCId(kakaoVO.getVarListMap().size());
|
List<String> idList = mjonCommon.getNextCustomMsgCId(kakaoVO.getVarListMap().size());
|
||||||
@ -149,6 +161,7 @@ public class KakaoSendUtil {
|
|||||||
int counter = 0;
|
int counter = 0;
|
||||||
/** @Map에 총 갯수가 수신자 갯수와 동일함 */
|
/** @Map에 총 갯수가 수신자 갯수와 동일함 */
|
||||||
List<Map<String, String>> varList = kakaoVO.getVarListMap();
|
List<Map<String, String>> varList = kakaoVO.getVarListMap();
|
||||||
|
|
||||||
for (int i = 0; i < varList.size(); i++) {
|
for (int i = 0; i < varList.size(); i++) {
|
||||||
// for(Map<String, String> variables : kakaoVO.getVarListMap()) {
|
// for(Map<String, String> variables : kakaoVO.getVarListMap()) {
|
||||||
// 치환 데이터
|
// 치환 데이터
|
||||||
@ -157,6 +170,12 @@ public class KakaoSendUtil {
|
|||||||
|
|
||||||
/** @공통 기본값 */
|
/** @공통 기본값 */
|
||||||
KakaoSendAdvcVO sendVO = createATSendVO(kakaoVO);
|
KakaoSendAdvcVO sendVO = createATSendVO(kakaoVO);
|
||||||
|
// 공통 가격 설정
|
||||||
|
sendVO.setSmsPrice(shortPStr);
|
||||||
|
sendVO.setMmsPrice(mmsPStr);
|
||||||
|
sendVO.setKakaoAtPrice(kakaoAtPStr);
|
||||||
|
|
||||||
|
|
||||||
String msgId = idList.get(i);
|
String msgId = idList.get(i);
|
||||||
sendVO.setMsgId(msgId);
|
sendVO.setMsgId(msgId);
|
||||||
|
|
||||||
@ -171,12 +190,21 @@ public class KakaoSendUtil {
|
|||||||
/** @Step1-3: 템플릿 치환데이터 설정 */
|
/** @Step1-3: 템플릿 치환데이터 설정 */
|
||||||
String templateContentTemp = templateContent;
|
String templateContentTemp = templateContent;
|
||||||
String templateTitleTemp = templateTitle;
|
String templateTitleTemp = templateTitle;
|
||||||
if (hasContentReplacement) {
|
|
||||||
templateContentTemp = mjonCommon.ATReplaceTemplateVariables(templateContent, variables);
|
// api가 아니면
|
||||||
if(hasTitleReplacement) {
|
if(!isApiData) {
|
||||||
templateTitleTemp = mjonCommon.ATReplaceTemplateVariables(templateTitle, variables);
|
if (hasContentReplacement) {
|
||||||
|
templateContentTemp = mjonCommon.ATReplaceTemplateVariables(templateContent, variables);
|
||||||
|
if(hasTitleReplacement) {
|
||||||
|
templateTitleTemp = mjonCommon.ATReplaceTemplateVariables(templateTitle, variables);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}else {
|
||||||
|
templateContentTemp = variables.get("templateContent");
|
||||||
|
templateTitleTemp = variables.get("templateTitle");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** @버튼 치환 */ // 버튼 리스트가 있으면 치환 수행, 항상 sendVO에 설정
|
/** @버튼 치환 */ // 버튼 리스트가 있으면 치환 수행, 항상 sendVO에 설정
|
||||||
List<KakaoButtonVO> buttonList = templateDetail.getButtonList();
|
List<KakaoButtonVO> buttonList = templateDetail.getButtonList();
|
||||||
if(hasButtonReplacement) {
|
if(hasButtonReplacement) {
|
||||||
@ -191,44 +219,19 @@ public class KakaoSendUtil {
|
|||||||
String subMsgTxtTemp = subMsgTxt;
|
String subMsgTxtTemp = subMsgTxt;
|
||||||
// Step 1-4: 실패 대체 문자 치환데이터 설정
|
// Step 1-4: 실패 대체 문자 치환데이터 설정
|
||||||
if("Y".equals(kakaoVO.getSubMsgSendYn())) { // 대체문자가 있나?
|
if("Y".equals(kakaoVO.getSubMsgSendYn())) { // 대체문자가 있나?
|
||||||
if ("Y".equals(kakaoVO.getSubMsgTxtReplYn())) { // 치환데이터가 있나?
|
// api가 아니면
|
||||||
subMsgTxtTemp = mjonCommon.ATReplaceTemplateVariables(subMsgTxt, variables);
|
if(!isApiData) {
|
||||||
|
if ("Y".equals(kakaoVO.getSubMsgTxtReplYn())) { // 치환데이터가 있나?
|
||||||
|
subMsgTxtTemp = mjonCommon.ATReplaceTemplateVariables(subMsgTxt, variables);
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
subMsgTxtTemp = variables.get("subMsgTxt");
|
||||||
}
|
}
|
||||||
sendVO.setSubMsgTxt(subMsgTxtTemp);// 실패
|
sendVO.setSubMsgTxt(subMsgTxtTemp);// 실패
|
||||||
}
|
}
|
||||||
sendVO.setSubMsgSendYn(kakaoVO.getSubMsgSendYn());
|
sendVO.setSubMsgSendYn(kakaoVO.getSubMsgSendYn());
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
log.info("kakaoSendAdvcVO Details: [callTo={}\n, templateContent=\n{}\n, subMsgTxt=\n{}]\n\n\n\n",
|
|
||||||
kakaoSendAdvcVO.getCallTo(),
|
|
||||||
kakaoSendAdvcVO.getTemplateContent(),
|
|
||||||
kakaoSendAdvcVO.getSubMsgTxt()
|
|
||||||
);
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Step1 END
|
|
||||||
|
|
||||||
|
|
||||||
// step3
|
|
||||||
// 바이트 수 체크 및 금액설정
|
|
||||||
|
|
||||||
|
|
||||||
// 유효한 단가 계산
|
|
||||||
float shortPrice = getValidPrice(mberManageVO.getShortPrice(), sysJoinSetVO.getShortPrice());
|
|
||||||
float longPrice = getValidPrice(mberManageVO.getLongPrice(), sysJoinSetVO.getLongPrice());
|
|
||||||
float kakaoAtPrice = getValidPrice(mberManageVO.getKakaoAtPrice(), sysJoinSetVO.getKakaoAtPrice());
|
|
||||||
|
|
||||||
|
|
||||||
String shortPStr = Float.toString(shortPrice);
|
|
||||||
String mmsPStr = Float.toString(longPrice);
|
|
||||||
String kakaoAtPStr = Float.toString(kakaoAtPrice);
|
|
||||||
|
|
||||||
// 공통 가격 설정
|
|
||||||
sendVO.setSmsPrice(shortPStr);
|
|
||||||
sendVO.setMmsPrice(mmsPStr);
|
|
||||||
sendVO.setKakaoAtPrice(kakaoAtPStr);
|
|
||||||
|
|
||||||
|
|
||||||
if("Y".equals(kakaoVO.getSubMsgSendYn())) {
|
if("Y".equals(kakaoVO.getSubMsgSendYn())) {
|
||||||
int smsTxtByte = mjonCommon.getSmsTxtBytes(sendVO.getSubMsgTxt());
|
int smsTxtByte = mjonCommon.getSmsTxtBytes(sendVO.getSubMsgTxt());
|
||||||
@ -236,7 +239,8 @@ public class KakaoSendUtil {
|
|||||||
sendVO.setSubMsgType(sendType);
|
sendVO.setSubMsgType(sendType);
|
||||||
|
|
||||||
if ("INVALID".equals(sendType)) {
|
if ("INVALID".equals(sendType)) {
|
||||||
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다.");return kakaoSendAdvcListVO;
|
// statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다.");return kakaoSendAdvcListVO;
|
||||||
|
StatusResponse.statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다.", "STAT_1080");return kakaoSendAdvcListVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean isMms = "MMS".equals(sendType);
|
boolean isMms = "MMS".equals(sendType);
|
||||||
@ -351,7 +355,8 @@ public class KakaoSendUtil {
|
|||||||
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId());
|
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId());
|
||||||
// 시스템 기본 단가 정보 불러오기
|
// 시스템 기본 단가 정보 불러오기
|
||||||
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
|
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
|
||||||
|
|
||||||
|
kakaoVO.setAtSmishingYn(mberManageVO.getAtSmishingYn());
|
||||||
|
|
||||||
// 치환 문구가 있는지 확인
|
// 치환 문구가 있는지 확인
|
||||||
Boolean replaceYN = MsgSendUtils.getReplaceYN(templateContent);
|
Boolean replaceYN = MsgSendUtils.getReplaceYN(templateContent);
|
||||||
@ -828,7 +833,7 @@ public class KakaoSendUtil {
|
|||||||
sendVO.setReqDate(DATE_FORMATTER.format(calendar.getTime()));
|
sendVO.setReqDate(DATE_FORMATTER.format(calendar.getTime()));
|
||||||
|
|
||||||
sendVO.setSenderKey(kakaoVO.getSenderKey());
|
sendVO.setSenderKey(kakaoVO.getSenderKey());
|
||||||
sendVO.setTemplateCode(kakaoVO.getTemplateCode());
|
// sendVO.setTemplateCode(kakaoVO.getTemplateCode());
|
||||||
sendVO.setUserId(kakaoVO.getUserId());
|
sendVO.setUserId(kakaoVO.getUserId());
|
||||||
sendVO.setCallFrom(kakaoVO.getCallFrom());
|
sendVO.setCallFrom(kakaoVO.getCallFrom());
|
||||||
sendVO.setSubMsgSendYn(kakaoVO.getSubMsgSendYn());
|
sendVO.setSubMsgSendYn(kakaoVO.getSubMsgSendYn());
|
||||||
@ -1882,6 +1887,8 @@ public class KakaoSendUtil {
|
|||||||
sendVO.setBefPoint(priceAndPoint.getBefPoint(sendVO.getUserId()));
|
sendVO.setBefPoint(priceAndPoint.getBefPoint(sendVO.getUserId()));
|
||||||
sendVO.setAdFlag(kakaoVO.getAdFlag());
|
sendVO.setAdFlag(kakaoVO.getAdFlag());
|
||||||
|
|
||||||
|
sendVO.setSendKind(kakaoVO.getSendKind());
|
||||||
|
|
||||||
Float eachPrice = Float.parseFloat(sendVO.getEachPrice());
|
Float eachPrice = Float.parseFloat(sendVO.getEachPrice());
|
||||||
|
|
||||||
Float totPrice = eachPrice * instCnt;
|
Float totPrice = eachPrice * instCnt;
|
||||||
|
|||||||
@ -336,29 +336,33 @@ public class KakaoVO extends MjonMsgVO{
|
|||||||
|
|
||||||
public String ftToString() {
|
public String ftToString() {
|
||||||
StringBuilder sb = new StringBuilder("KakaoFTSendVO[");
|
StringBuilder sb = new StringBuilder("KakaoFTSendVO[");
|
||||||
sb.append("\n senderKey=[").append(senderKey).append("]");
|
sb.append("\n sendKind=[").append(getSendKind()).append("]");
|
||||||
|
sb.append("\n , senderKey=[").append(senderKey).append("]");
|
||||||
sb.append("\n , imageFileName=[").append(imageFileName).append("]");
|
sb.append("\n , imageFileName=[").append(imageFileName).append("]");
|
||||||
sb.append("\n , imageType=[").append(imageType).append("]");
|
sb.append("\n , imageType=[").append(imageType).append("]");
|
||||||
sb.append("\n , imgTitle=[").append(imgTitle).append("]");
|
sb.append("\n , atchFileId=[").append(atchFileId).append("]");
|
||||||
sb.append("\n , imgLink=[").append(imgLink).append("]");
|
// sb.append("\n , imgTitle=[").append(imgTitle).append("]");
|
||||||
|
// sb.append("\n , imgLink=[").append(imgLink).append("]");
|
||||||
sb.append("\n , templateContent=[").append(templateContent).append("]");
|
sb.append("\n , templateContent=[").append(templateContent).append("]");
|
||||||
sb.append("\n , templateImageUrl=[").append(templateImageUrl).append("]");
|
sb.append("\n , templateImageUrl=[").append(templateImageUrl).append("]");
|
||||||
sb.append("\n , smsTxtArea=[").append(getSubMsgTxt()).append("]");
|
// sb.append("\n , imgLink=[").append(imgLink).append("]");
|
||||||
sb.append("\n , subMsgSendYn=[").append(subMsgSendYn).append("]");
|
// sb.append("\n , smsTxtArea=[").append(getSubMsgTxt()).append("]");
|
||||||
sb.append("\n , subMsgTxtReplYn=[").append(subMsgTxtReplYn).append("]");
|
// sb.append("\n , subMsgSendYn=[").append(subMsgSendYn).append("]");
|
||||||
sb.append("\n , subMsgType=[").append(subMsgType).append("]");
|
// sb.append("\n , subMsgTxtReplYn=[").append(subMsgTxtReplYn).append("]");
|
||||||
|
// sb.append("\n , subMsgType=[").append(subMsgType).append("]");
|
||||||
sb.append("\n , subMsgTxt=[").append(subMsgTxt).append("]");
|
sb.append("\n , subMsgTxt=[").append(subMsgTxt).append("]");
|
||||||
|
sb.append("\n , subMsgSendYn=[").append(subMsgSendYn).append("]");
|
||||||
sb.append("\n , reserveYn=[").append(getReserveYn()).append("]");
|
sb.append("\n , reserveYn=[").append(getReserveYn()).append("]");
|
||||||
sb.append("\n , menuTopTab=[").append(menuTopTab).append("]");
|
// sb.append("\n , menuTopTab=[").append(menuTopTab).append("]");
|
||||||
sb.append("\n , bizJsonYn=[").append(bizJsonYn).append("]");
|
// sb.append("\n , bizJsonYn=[").append(bizJsonYn).append("]");
|
||||||
sb.append("\n , senderKey=[").append(senderKey).append("]");
|
|
||||||
sb.append("\n , callFrom=[").append(getCallFrom()).append("]");
|
sb.append("\n , callFrom=[").append(getCallFrom()).append("]");
|
||||||
sb.append("\n , kakaoFtPrice=[").append(getEachPrice()).append("]");
|
// sb.append("\n , kakaoFtPrice=[").append(getEachPrice()).append("]");
|
||||||
sb.append("\n , reqDate=[").append(getReqDate()).append("]");
|
sb.append("\n , reqDate=[").append(getReqDate()).append("]");
|
||||||
sb.append("\n , spamStatus=[").append(getSpamStatus()).append("]");
|
// sb.append("\n , spamStatus=[").append(getSpamStatus()).append("]");
|
||||||
sb.append("\n , txtReplYn=[").append(getTxtReplYn()).append("]");
|
// sb.append("\n , txtReplYn=[").append(getTxtReplYn()).append("]");
|
||||||
sb.append("\n , atSmishingYn=[").append(getAtSmishingYn()).append("]");
|
// sb.append("\n , atSmishingYn=[").append(getAtSmishingYn()).append("]");
|
||||||
sb.append("\n , atDelayYn=[").append(getAtDelayYn()).append("]");
|
// sb.append("\n , atDelayYn=[").append(getAtDelayYn()).append("]");
|
||||||
|
// sb.append("\n , filePath1=[").append(getFilePath1()).append("]");
|
||||||
// sb.append("\n , tmpBtnSelect=[").append(getTmpBtnSelect()).append("]");
|
// sb.append("\n , tmpBtnSelect=[").append(getTmpBtnSelect()).append("]");
|
||||||
StringBuilder btnListSb = new StringBuilder("[");
|
StringBuilder btnListSb = new StringBuilder("[");
|
||||||
if (buttonVOList != null && !buttonVOList.isEmpty()) {
|
if (buttonVOList != null && !buttonVOList.isEmpty()) {
|
||||||
@ -388,4 +392,7 @@ public class KakaoVO extends MjonMsgVO{
|
|||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,7 @@ import javax.imageio.ImageIO;
|
|||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
|
|
||||||
import org.apache.commons.io.FilenameUtils;
|
import org.apache.commons.io.FilenameUtils;
|
||||||
|
import org.apache.commons.io.output.ByteArrayOutputStream;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.http.HttpEntity;
|
import org.apache.http.HttpEntity;
|
||||||
import org.apache.http.HttpResponse;
|
import org.apache.http.HttpResponse;
|
||||||
@ -395,6 +396,7 @@ public class KakaoApiImageUpload {
|
|||||||
.addTextBody("senderKey", kakaoVO.getSenderKey())
|
.addTextBody("senderKey", kakaoVO.getSenderKey())
|
||||||
.addBinaryBody("image", new File(filePath), ContentType.MULTIPART_FORM_DATA, newName + "." + ext)
|
.addBinaryBody("image", new File(filePath), ContentType.MULTIPART_FORM_DATA, newName + "." + ext)
|
||||||
.build();
|
.build();
|
||||||
|
;
|
||||||
|
|
||||||
httpPost.setEntity(httpEntity);
|
httpPost.setEntity(httpEntity);
|
||||||
|
|
||||||
@ -407,7 +409,8 @@ public class KakaoApiImageUpload {
|
|||||||
String result = EntityUtils.toString(response.getEntity(), "UTF-8");
|
String result = EntityUtils.toString(response.getEntity(), "UTF-8");
|
||||||
JSONParser parser = new JSONParser();
|
JSONParser parser = new JSONParser();
|
||||||
JSONObject object = (JSONObject) parser.parse(result);
|
JSONObject object = (JSONObject) parser.parse(result);
|
||||||
|
log.info("object + :: [{}]", object.toJSONString());
|
||||||
|
|
||||||
String code = object.get("code").toString();
|
String code = object.get("code").toString();
|
||||||
if ("200".equals(code)) {
|
if ("200".equals(code)) {
|
||||||
Map<String, Object> returnMap = new HashMap<>();
|
Map<String, Object> returnMap = new HashMap<>();
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package itn.let.kakao.user.kakaoAt.service.impl;
|
package itn.let.kakao.user.kakaoAt.service.impl;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
@ -870,7 +871,7 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
@Override
|
@Override
|
||||||
public StatusResponse insertKakaoAtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception {
|
public StatusResponse insertKakaoAtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception {
|
||||||
|
|
||||||
// log.info(" :: [{}]", kakaoVO.toString());
|
log.info(" :: [{}]", kakaoVO.toString());
|
||||||
|
|
||||||
|
|
||||||
// 측정할 메소드 호출 전 시간 기록
|
// 측정할 메소드 호출 전 시간 기록
|
||||||
@ -878,17 +879,25 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
// KakaoSendAdvcVO
|
// KakaoSendAdvcVO
|
||||||
|
|
||||||
Map<String, Object> returnMap = new HashMap<>();
|
Map<String, Object> returnMap = new HashMap<>();
|
||||||
|
Map<String, Object> apiReturnMap = new HashMap<>();
|
||||||
|
|
||||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()
|
String userId = "";
|
||||||
? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser()
|
if("A".equals(kakaoVO.getSendKind()))
|
||||||
: null;
|
{
|
||||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
userId = kakaoVO.getMberId();
|
||||||
|
}else {
|
||||||
|
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()
|
||||||
|
? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser()
|
||||||
|
: null;
|
||||||
|
userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||||
|
|
||||||
|
if (userId.equals("")) {
|
||||||
|
return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다.");
|
||||||
|
}
|
||||||
|
|
||||||
if (userId.equals("")) {
|
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kakaoVO.setUserId(userId);
|
kakaoVO.setUserId(userId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 회원 정지된 상태이면 문자 발송이 안되도록 처리함 현재 로그인 세션도 만료 처리함
|
* 회원 정지된 상태이면 문자 발송이 안되도록 처리함 현재 로그인 세션도 만료 처리함
|
||||||
@ -898,7 +907,7 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
request.getSession().invalidate();
|
request.getSession().invalidate();
|
||||||
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
|
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
|
||||||
return new StatusResponse(HttpStatus.UNAUTHORIZED,
|
return new StatusResponse(HttpStatus.UNAUTHORIZED,
|
||||||
"현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 알림톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
|
"현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 알림톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.", "STAT_1070");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -923,7 +932,7 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
/** @전송금액 확인 --------------------------------------------------*/
|
/** @전송금액 확인 --------------------------------------------------*/
|
||||||
if (!kakaoSendUtil.isCashSufficient(userId, kakaoSendAdvcListVO)) {
|
if (!kakaoSendUtil.isCashSufficient(userId, kakaoSendAdvcListVO)) {
|
||||||
log.error("Insufficient balance for message sending.");
|
log.error("Insufficient balance for message sending.");
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 발송에 필요한 보유 잔액이 부족 합니다.");
|
return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 발송에 필요한 보유 잔액이 부족 합니다.", "STAT_1060");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -940,6 +949,8 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
// 임시
|
// 임시
|
||||||
List<String> nextMsgGroupIdA = new ArrayList<>();
|
List<String> nextMsgGroupIdA = new ArrayList<>();
|
||||||
// 대안: entrySet() 직접 사용
|
// 대안: entrySet() 직접 사용
|
||||||
|
String apiMsgGroupId = "";
|
||||||
|
String apiMsgType = "";
|
||||||
for (Map.Entry<String, List<KakaoSendAdvcVO>> entry : priceGroupedMessages.entrySet()) {
|
for (Map.Entry<String, List<KakaoSendAdvcVO>> entry : priceGroupedMessages.entrySet()) {
|
||||||
// entry 사용
|
// entry 사용
|
||||||
|
|
||||||
@ -949,6 +960,29 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
groupedMsgList.forEach(t -> t.setMsgGroupId(nextMsgGroupId));
|
groupedMsgList.forEach(t -> t.setMsgGroupId(nextMsgGroupId));
|
||||||
|
|
||||||
|
|
||||||
|
// api 전달 값
|
||||||
|
apiMsgGroupId = StringUtils.isNotEmpty(apiMsgGroupId)
|
||||||
|
? apiMsgGroupId + "," + nextMsgGroupId
|
||||||
|
: nextMsgGroupId;
|
||||||
|
|
||||||
|
apiMsgType = StringUtils.isNotEmpty(apiMsgType)
|
||||||
|
? apiMsgType + "," + kakaoSendAdvcListVO.get(0).getMsgType()
|
||||||
|
: kakaoSendAdvcListVO.get(0).getMsgType();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
groupedMsgList.stream().forEach(t-> log.info("t.toString() [{}]", t.toString()));
|
||||||
|
|
||||||
|
//
|
||||||
|
// if(1==1) {
|
||||||
|
//
|
||||||
|
// // 강제로 예외 발생
|
||||||
|
// throw new RuntimeException("강제 예외 발생 테스트");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
// 발송 데이터 삽입
|
// 발송 데이터 삽입
|
||||||
int instCnt = kakaoSendUtil.insertKakaoData_advc(groupedMsgList);
|
int instCnt = kakaoSendUtil.insertKakaoData_advc(groupedMsgList);
|
||||||
// int instCnt = 6;
|
// int instCnt = 6;
|
||||||
@ -1006,7 +1040,14 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
apiReturnMap.put("resultSts", instTotalCnt);
|
||||||
|
// 그룹 ID
|
||||||
|
apiReturnMap.put("msgGroupId", apiMsgGroupId);
|
||||||
|
// 메세지 타입
|
||||||
|
apiReturnMap.put("msgType", apiMsgType);
|
||||||
|
|
||||||
returnMap.put("resultSts", instTotalCnt);
|
returnMap.put("resultSts", instTotalCnt);
|
||||||
|
|
||||||
returnMap.put("reserYn", kakaoVO.getReserveYn());
|
returnMap.put("reserYn", kakaoVO.getReserveYn());
|
||||||
returnMap.put("groupIds", nextMsgGroupIdA);
|
returnMap.put("groupIds", nextMsgGroupIdA);
|
||||||
|
|
||||||
@ -1036,10 +1077,12 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
|
|
||||||
statusResponse.setStatus(HttpStatus.OK);
|
statusResponse.setStatus(HttpStatus.OK);
|
||||||
statusResponse.setObject(returnMap);
|
statusResponse.setObject(returnMap);
|
||||||
|
apiReturnMap.put("result", HttpStatus.OK);
|
||||||
|
apiReturnMap.put("message", "전송이 완료되었습니다.");
|
||||||
|
statusResponse.setApiReturn(apiReturnMap);
|
||||||
|
|
||||||
return statusResponse;
|
return statusResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<KakaoVO> selectKakaoSentRefundListForSingle() throws Exception{
|
public List<KakaoVO> selectKakaoSentRefundListForSingle() throws Exception{
|
||||||
return kakaoAlimTalkDAO.selectKakaoSentRefundList();
|
return kakaoAlimTalkDAO.selectKakaoSentRefundList();
|
||||||
@ -1068,26 +1111,150 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
mjonMsgDAO.updateRefundY(kakaoVO);
|
mjonMsgDAO.updateRefundY(kakaoVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
// // 보유 금액이 충분한지 확인하는 메서드
|
private void insertKakaoAtDataJsonInfo_advc(List<KakaoSendAdvcVO> kakaoSendAdvcListVO) {
|
||||||
// private boolean isCashSufficient(String userId, List<KakaoSendAdvcVO> kakaoSendAdvcListVO) throws Exception {
|
// TODO Auto-generated method stub
|
||||||
//
|
|
||||||
//
|
// 측정할 메소드 호출 전 시간 기록
|
||||||
// String userMoney = priceAndPoint.getBefCash(userId);
|
List<KakaoSendAdvcVO> jsonInfoData = new ArrayList<>(kakaoSendAdvcListVO);
|
||||||
// // 쉼표 제거
|
jsonInfoData.removeIf(t -> StringUtils.isBlank(t.getJsonStr()));
|
||||||
// userMoney = userMoney.replace(",", "");
|
log.info(" + jsonInfoData Insert :: [{}]", jsonInfoData.size());
|
||||||
//
|
if(jsonInfoData.size() > 0) {
|
||||||
// // 사용자 보유 금액 BigDecimal 변환 (HALF_EVEN 적용)
|
kakaoAlimTalkDAO.insertKakaoAtDataJsonInfo_advc(jsonInfoData);
|
||||||
// BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN);
|
}
|
||||||
//
|
|
||||||
// // 총 메시지 금액 계산 (HALF_EVEN 적용)
|
}
|
||||||
// BigDecimal totalEachPrice = kakaoSendAdvcListVO.stream()
|
|
||||||
// .map(msg -> new BigDecimal(String.valueOf(msg.getEachPrice()))) // 변환 오류 방지
|
private void insertKakaoGroupDataTb_advc(int instCnt, KakaoVO kakaoVO, KakaoSendAdvcVO sendVO) throws Exception {
|
||||||
// .reduce(BigDecimal.ZERO, BigDecimal::add)
|
// TODO Auto-generated method stub
|
||||||
// .setScale(2, RoundingMode.HALF_EVEN); // 일관성 유지
|
|
||||||
//
|
// log.info(" + insertKakaoGroupDataTb_advc kakaoVO :: \n[{}]", kakaoVO.toString());;
|
||||||
// // 비교 수행
|
// log.info(" + insertKakaoGroupDataTb_advc kakaoSendAdvcVOList :: \n[{}]", sendVO.toString());
|
||||||
// return befCash.compareTo(totalEachPrice) >= 0;
|
|
||||||
// }
|
sendVO.setMsgGroupCnt(Integer.toString(instCnt));
|
||||||
|
sendVO.setReserveYn(kakaoVO.getReserveYn());
|
||||||
|
sendVO.setBefCash(priceAndPoint.getBefCash(sendVO.getUserId()));
|
||||||
|
sendVO.setBefPoint(priceAndPoint.getBefPoint(sendVO.getUserId()));
|
||||||
|
|
||||||
|
Float eachPrice = Float.parseFloat(sendVO.getEachPrice());
|
||||||
|
|
||||||
|
Float totPrice = eachPrice * instCnt;
|
||||||
|
sendVO.setTotPrice(String.format("%.1f", totPrice));
|
||||||
|
|
||||||
|
sendVO.setAtDelayYn(StringUtils.isEmpty(kakaoVO.getAtSmishingYn()) ? "N" : kakaoVO.getAtSmishingYn());
|
||||||
|
sendVO.setSendKind(StringUtils.isEmpty(kakaoVO.getSendKind()) ? "H" : kakaoVO.getSendKind());
|
||||||
|
sendVO.setBizKakaoResendOrgnlTxt(kakaoVO.getSubMsgTxt());
|
||||||
|
sendVO.setBizKakaoResendType(sendVO.getSubMsgType());
|
||||||
|
|
||||||
|
kakaoAlimTalkDAO.insertKakaoGroupDataTb_advc(sendVO);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : insertKakaoData_advc
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2025. 3. 20.
|
||||||
|
* @description : 카카오 batch 발송 => mj_msg_data
|
||||||
|
* @return : int
|
||||||
|
* @param kakaoSendAdvcVOList
|
||||||
|
* @param parentLoopCount
|
||||||
|
* @param isJsonNotEmpty
|
||||||
|
* @param isJsonNameAllSame
|
||||||
|
* @return
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private int insertKakaoData_advc(List<KakaoSendAdvcVO> kakaoSendAdvcVOList) {
|
||||||
|
|
||||||
|
|
||||||
|
// 시작 시간 측정
|
||||||
|
long totalStartTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
int totalSize = kakaoSendAdvcVOList.size(); // 총 데이터 개수
|
||||||
|
// Batch 크기 설정 (고정값)
|
||||||
|
// int batchSize = 10000; 465
|
||||||
|
int batchSize = 50000; // 9분 18초
|
||||||
|
|
||||||
|
log.info("총 데이터 개수 :: [{}] ", totalSize);
|
||||||
|
log.info("설정된 Batch 크기 :: [{}] ", batchSize);
|
||||||
|
|
||||||
|
// 총 insert 카운트
|
||||||
|
int instCnt = 0;
|
||||||
|
int batchCount = 0;
|
||||||
|
|
||||||
|
// 각 배치별 실행 시간 기록
|
||||||
|
List<Double> batchExecutionTimes = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
|
// 첫 번째 배치에서만 삽입했는지 추적하는 플래그
|
||||||
|
for (int i = 0; i < totalSize; i += batchSize) {
|
||||||
|
// Batch 시작 시간 측정
|
||||||
|
long batchStartTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// Batch 리스트 생성
|
||||||
|
List<KakaoSendAdvcVO> batchList = kakaoSendAdvcVOList.subList(i, Math.min(i + batchSize, totalSize));
|
||||||
|
System.out.println("Batch 시작 인덱스: " + i);
|
||||||
|
|
||||||
|
// mj_msg_data 테이블 insert
|
||||||
|
int insertedCount = kakaoAlimTalkDAO.insertKakaoAtDataInfo_advc(batchList);
|
||||||
|
|
||||||
|
/** @kakaoSendUtil.populateSendLists
|
||||||
|
* 하단에서
|
||||||
|
* getJsonStr 데이터 처리 후 활용
|
||||||
|
* */
|
||||||
|
instCnt += insertedCount;
|
||||||
|
|
||||||
|
// Batch 종료 시간 측정 및 실행 시간 계산
|
||||||
|
long batchEndTime = System.currentTimeMillis();
|
||||||
|
double batchExecutionTimeInSeconds = (batchEndTime - batchStartTime) / 1000.0;
|
||||||
|
|
||||||
|
// 실행 시간 기록
|
||||||
|
batchExecutionTimes.add(batchExecutionTimeInSeconds);
|
||||||
|
batchCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 종료 시간 측정
|
||||||
|
long totalEndTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// 총 실행 시간 계산 (밀리초 -> 초로 변환)
|
||||||
|
double totalExecutionTimeInSeconds = (totalEndTime - totalStartTime) / 1000.0;
|
||||||
|
|
||||||
|
// 실행 시간 출력
|
||||||
|
log.info("총 배치 실행 횟수 :: [{}] ", batchCount);
|
||||||
|
log.info("batchSize :: [{}] ", batchSize);
|
||||||
|
log.info("총 실행 시간 :: [{}] ", totalExecutionTimeInSeconds + "초");
|
||||||
|
log.info("총 삽입 건수 :: [{}] ", instCnt);
|
||||||
|
|
||||||
|
// 각 배치별 실행 시간 출력
|
||||||
|
for (int k = 0; k < batchExecutionTimes.size(); k++) {
|
||||||
|
System.out.println("배치 " + (k + 1) + " 실행 시간 :: " + batchExecutionTimes.get(k) + "초");
|
||||||
|
}
|
||||||
|
|
||||||
|
return instCnt;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 보유 금액이 충분한지 확인하는 메서드
|
||||||
|
private boolean isCashSufficient(String userId, List<KakaoSendAdvcVO> kakaoSendAdvcListVO) throws Exception {
|
||||||
|
|
||||||
|
|
||||||
|
String userMoney = priceAndPoint.getBefCash(userId);
|
||||||
|
// 쉼표 제거
|
||||||
|
userMoney = userMoney.replace(",", "");
|
||||||
|
|
||||||
|
// 사용자 보유 금액 BigDecimal 변환 (HALF_EVEN 적용)
|
||||||
|
BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN);
|
||||||
|
|
||||||
|
// 총 메시지 금액 계산 (HALF_EVEN 적용)
|
||||||
|
BigDecimal totalEachPrice = kakaoSendAdvcListVO.stream()
|
||||||
|
.map(msg -> new BigDecimal(String.valueOf(msg.getEachPrice()))) // 변환 오류 방지
|
||||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add)
|
||||||
|
.setScale(2, RoundingMode.HALF_EVEN); // 일관성 유지
|
||||||
|
|
||||||
|
// 비교 수행
|
||||||
|
return befCash.compareTo(totalEachPrice) >= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public KakaoReturnVO createKaKaoProfile(KakaoVO kakaoVO) throws Exception {
|
public KakaoReturnVO createKaKaoProfile(KakaoVO kakaoVO) throws Exception {
|
||||||
|
|||||||
@ -841,13 +841,13 @@ public class KakaoAlimTalkSendController {
|
|||||||
modelAndView.setViewName("jsonView");
|
modelAndView.setViewName("jsonView");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
// LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
// String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||||
|
|
||||||
if(userId == "") {
|
// if(userId == "") {
|
||||||
modelAndView.addObject("result", "notLogin");
|
// modelAndView.addObject("result", "notLogin");
|
||||||
return modelAndView;
|
// return modelAndView;
|
||||||
}else {
|
// }else {
|
||||||
|
|
||||||
KakaoReturnVO kakaoTemplateTempList = kakaoApiTemplate.selectKakaoApiTemplate(kakaoVO);
|
KakaoReturnVO kakaoTemplateTempList = kakaoApiTemplate.selectKakaoApiTemplate(kakaoVO);
|
||||||
|
|
||||||
@ -863,7 +863,7 @@ public class KakaoAlimTalkSendController {
|
|||||||
|
|
||||||
modelAndView.addObject("kakaoTemplateList", kakaoTemplateTempList);
|
modelAndView.addObject("kakaoTemplateList", kakaoTemplateTempList);
|
||||||
modelAndView.addObject("result", "success");
|
modelAndView.addObject("result", "success");
|
||||||
}
|
// }
|
||||||
}catch(Exception ex){
|
}catch(Exception ex){
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.select"));
|
modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.select"));
|
||||||
|
|||||||
@ -305,6 +305,9 @@ public class KakaoAlimTalkTemplateController {
|
|||||||
|
|
||||||
KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
|
KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
|
||||||
|
|
||||||
|
System.out.println("kakaoTemplateInfo :; "+ kakaoTemplateInfo);
|
||||||
|
|
||||||
|
|
||||||
String kakaoButtonTypeDs = "";
|
String kakaoButtonTypeDs = "";
|
||||||
for(int i=0; i < kakaoTemplateInfo.getButtonList().size(); i++) {
|
for(int i=0; i < kakaoTemplateInfo.getButtonList().size(); i++) {
|
||||||
String buttonType = kakaoTemplateInfo.getButtonList().get(i).getLinkType();
|
String buttonType = kakaoTemplateInfo.getButtonList().get(i).getLinkType();
|
||||||
|
|||||||
@ -11,6 +11,7 @@ import java.util.stream.Collectors;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -75,25 +76,37 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
|
|||||||
public StatusResponse insertKakaoFtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception {
|
public StatusResponse insertKakaoFtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception {
|
||||||
StatusResponse statusResponse = new StatusResponse();
|
StatusResponse statusResponse = new StatusResponse();
|
||||||
|
|
||||||
// log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.toString());
|
log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.toString());
|
||||||
|
|
||||||
// log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.ftToString());
|
log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.ftToString());
|
||||||
|
|
||||||
|
|
||||||
|
// if(1==1) {
|
||||||
|
// throw new RuntimeException("강제로 발생시킨 예외");
|
||||||
|
// }
|
||||||
|
|
||||||
// 측정할 메소드 호출 전 시간 기록
|
// 측정할 메소드 호출 전 시간 기록
|
||||||
Instant start = Instant.now();
|
Instant start = Instant.now();
|
||||||
// KakaoSendAdvcVO
|
// KakaoSendAdvcVO
|
||||||
|
|
||||||
Map<String, Object> returnMap = new HashMap<>();
|
Map<String, Object> returnMap = new HashMap<>();
|
||||||
|
Map<String, Object> apiReturnMap = new HashMap<>();
|
||||||
|
|
||||||
|
String userId = "";
|
||||||
|
if("A".equals(kakaoVO.getSendKind()))
|
||||||
|
{
|
||||||
|
userId = kakaoVO.getMberId();
|
||||||
|
}else {
|
||||||
|
|
||||||
|
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()
|
||||||
|
? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser()
|
||||||
|
: null;
|
||||||
|
userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||||
|
|
||||||
|
if (userId.equals("")) {
|
||||||
|
return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다.");
|
||||||
|
}
|
||||||
|
|
||||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()
|
|
||||||
? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser()
|
|
||||||
: null;
|
|
||||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
|
||||||
|
|
||||||
if (userId.equals("")) {
|
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kakaoVO.setUserId(userId);
|
kakaoVO.setUserId(userId);
|
||||||
@ -106,7 +119,7 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
|
|||||||
request.getSession().invalidate();
|
request.getSession().invalidate();
|
||||||
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
|
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
|
||||||
return new StatusResponse(HttpStatus.UNAUTHORIZED,
|
return new StatusResponse(HttpStatus.UNAUTHORIZED,
|
||||||
"현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 친구톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
|
"현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 친구톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.", "STAT_1070");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -116,7 +129,7 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
|
|||||||
if(kakaoSendUtil.isRestrictedFriendTalkTime(kakaoSendUtil.resolveBaseDate(kakaoVO))) {
|
if(kakaoSendUtil.isRestrictedFriendTalkTime(kakaoSendUtil.resolveBaseDate(kakaoVO))) {
|
||||||
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
|
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST,
|
return new StatusResponse(HttpStatus.BAD_REQUEST,
|
||||||
"친구톡은 20시 50분부터 익일 08시까지 발송이 제한됩니다.");
|
"친구톡은 20시 50분부터 익일 08시까지 발송이 제한됩니다.","STAT_2080");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -139,12 +152,11 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
|
|||||||
return statusResponse;
|
return statusResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** @전송금액 확인 --------------------------------------------------*/
|
/** @전송금액 확인 --------------------------------------------------*/
|
||||||
if (!kakaoSendUtil.isCashSufficient(userId, kakaoSendAdvcListVO)) {
|
if (!kakaoSendUtil.isCashSufficient(userId, kakaoSendAdvcListVO)) {
|
||||||
log.error("Insufficient balance for message sending.");
|
log.error("Insufficient balance for message sending.");
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 발송에 필요한 보유 잔액이 부족 합니다.");
|
return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 발송에 필요한 보유 잔액이 부족 합니다.", "STAT_1060");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -162,6 +174,8 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
|
|||||||
// 임시
|
// 임시
|
||||||
List<String> nextMsgGroupIdA = new ArrayList<>();
|
List<String> nextMsgGroupIdA = new ArrayList<>();
|
||||||
// 대안: entrySet() 직접 사용
|
// 대안: entrySet() 직접 사용
|
||||||
|
String apiMsgGroupId = "";
|
||||||
|
String apiMsgType = "";
|
||||||
for (Map.Entry<String, List<KakaoSendAdvcVO>> entry : priceGroupedMessages.entrySet()) {
|
for (Map.Entry<String, List<KakaoSendAdvcVO>> entry : priceGroupedMessages.entrySet()) {
|
||||||
// entry 사용
|
// entry 사용
|
||||||
|
|
||||||
@ -169,7 +183,15 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
|
|||||||
|
|
||||||
String nextMsgGroupId = idgenMjonMsgGroupId.getNextStringId();
|
String nextMsgGroupId = idgenMjonMsgGroupId.getNextStringId();
|
||||||
groupedMsgList.forEach(t -> t.setMsgGroupId(nextMsgGroupId));
|
groupedMsgList.forEach(t -> t.setMsgGroupId(nextMsgGroupId));
|
||||||
|
|
||||||
|
// api 전달 값
|
||||||
|
apiMsgGroupId = StringUtils.isNotEmpty(apiMsgGroupId)
|
||||||
|
? apiMsgGroupId + "," + nextMsgGroupId
|
||||||
|
: nextMsgGroupId;
|
||||||
|
|
||||||
|
apiMsgType = StringUtils.isNotEmpty(apiMsgType)
|
||||||
|
? apiMsgType + "," + kakaoSendAdvcListVO.get(0).getMsgType()
|
||||||
|
: kakaoSendAdvcListVO.get(0).getMsgType();
|
||||||
|
|
||||||
// 발송 데이터 삽입
|
// 발송 데이터 삽입
|
||||||
int instCnt = kakaoSendUtil.insertKakaoData_advc(groupedMsgList);
|
int instCnt = kakaoSendUtil.insertKakaoData_advc(groupedMsgList);
|
||||||
@ -224,6 +246,12 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
apiReturnMap.put("resultSts", instTotalCnt);
|
||||||
|
// 그룹 ID
|
||||||
|
apiReturnMap.put("msgGroupId", apiMsgGroupId);
|
||||||
|
// 메세지 타입
|
||||||
|
apiReturnMap.put("msgType", apiMsgType);
|
||||||
|
|
||||||
returnMap.put("resultSts", instTotalCnt);
|
returnMap.put("resultSts", instTotalCnt);
|
||||||
returnMap.put("reserYn", kakaoVO.getReserveYn());
|
returnMap.put("reserYn", kakaoVO.getReserveYn());
|
||||||
returnMap.put("groupIds", nextMsgGroupIdA);
|
returnMap.put("groupIds", nextMsgGroupIdA);
|
||||||
@ -254,6 +282,9 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
|
|||||||
|
|
||||||
statusResponse.setStatus(HttpStatus.OK);
|
statusResponse.setStatus(HttpStatus.OK);
|
||||||
statusResponse.setObject(returnMap);
|
statusResponse.setObject(returnMap);
|
||||||
|
apiReturnMap.put("result", HttpStatus.OK);
|
||||||
|
apiReturnMap.put("message", "전송이 완료되었습니다.");
|
||||||
|
statusResponse.setApiReturn(apiReturnMap);
|
||||||
|
|
||||||
return statusResponse;
|
return statusResponse;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -199,19 +199,23 @@ public class KakaoFriendsTalkTemplateController {
|
|||||||
modelAndView.setViewName("jsonView");
|
modelAndView.setViewName("jsonView");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
|
||||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
|
||||||
|
|
||||||
if(StringUtils.isEmpty(userId)) { //KISA 보안취약점 조치 (2018-12-10, 이정은)
|
if(!"A".equals(kakaoVO.getSendKind())) {
|
||||||
return ResponseEntity.ok(
|
|
||||||
new StatusResponse(HttpStatus.UNAUTHORIZED
|
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||||
, "로그인을 하셔야 이용 가능합니다."
|
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||||
, LocalDateTime.now()
|
|
||||||
)
|
if(StringUtils.isEmpty(userId)) {
|
||||||
);
|
return ResponseEntity.ok(
|
||||||
|
new StatusResponse(HttpStatus.UNAUTHORIZED
|
||||||
|
, "로그인을 하셔야 이용 가능합니다."
|
||||||
|
, LocalDateTime.now()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
final Map<String, MultipartFile> files = multiRequest.getFileMap();
|
final Map<String, MultipartFile> files = multiRequest.getFileMap();
|
||||||
/* if (!files.isEmpty()){
|
/* if (!files.isEmpty()){
|
||||||
|
|||||||
@ -34,6 +34,7 @@ import org.springframework.stereotype.Service;
|
|||||||
|
|
||||||
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
||||||
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
||||||
|
import itn.com.cmm.util.StringUtil;
|
||||||
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
|
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
|
||||||
import itn.let.kakao.user.sent.service.KakaoSentDetailVO;
|
import itn.let.kakao.user.sent.service.KakaoSentDetailVO;
|
||||||
import itn.let.kakao.user.sent.service.KakaoSentService;
|
import itn.let.kakao.user.sent.service.KakaoSentService;
|
||||||
@ -141,6 +142,12 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka
|
|||||||
|
|
||||||
List<KakaoSentVO> resultList = new ArrayList<KakaoSentVO>();
|
List<KakaoSentVO> resultList = new ArrayList<KakaoSentVO>();
|
||||||
|
|
||||||
|
|
||||||
|
//수신번호 검색 시 번호 포멧 통일
|
||||||
|
if("4".equals(kakaoSentVO.getSearchCondition()) && StringUtil.isNotEmpty(kakaoSentVO.getSearchKeyword())) {
|
||||||
|
kakaoSentVO.setSearchKeyword(kakaoSentVO.getSearchKeyword().trim().replace("-", ""));
|
||||||
|
}
|
||||||
|
|
||||||
resultList = kakaoSentDAO.selectAllKakaoSentList_advc(kakaoSentVO);
|
resultList = kakaoSentDAO.selectAllKakaoSentList_advc(kakaoSentVO);
|
||||||
|
|
||||||
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
|
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
|
||||||
@ -653,7 +660,7 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka
|
|||||||
data[i][1] = sdf.format(vo.getReqdate());
|
data[i][1] = sdf.format(vo.getReqdate());
|
||||||
|
|
||||||
//구분
|
//구분
|
||||||
data[i][2] = "H".equals(vo.getSendKind()) ? "WEB" : "API";
|
data[i][2] = "A".equals(vo.getSendKind()) ? "API" : "WEB";
|
||||||
|
|
||||||
//채널ID
|
//채널ID
|
||||||
data[i][3] = vo.getYellowId();
|
data[i][3] = vo.getYellowId();
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
package itn.let.mail.service;
|
package itn.let.mail.service;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
|
|
||||||
@ -58,6 +60,8 @@ public class StatusResponse {
|
|||||||
|
|
||||||
private Object object;
|
private Object object;
|
||||||
|
|
||||||
|
private Object apiReturn;
|
||||||
|
|
||||||
private String messageTemp;
|
private String messageTemp;
|
||||||
|
|
||||||
private LocalDateTime timestamp;
|
private LocalDateTime timestamp;
|
||||||
@ -92,13 +96,47 @@ public class StatusResponse {
|
|||||||
this.message = message;
|
this.message = message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public StatusResponse(HttpStatus status, String message, Object object) {
|
public StatusResponse(HttpStatus status, String message, Object object) {
|
||||||
this.status = status;
|
this.status = status;
|
||||||
this.message = message;
|
this.message = message;
|
||||||
this.object = object;
|
this.object = object;
|
||||||
}
|
}
|
||||||
|
public StatusResponse(HttpStatus status, String message
|
||||||
|
, Object object
|
||||||
|
, Object apiReturn
|
||||||
|
) {
|
||||||
|
this.status = status;
|
||||||
|
this.message = message;
|
||||||
|
this.object = object;
|
||||||
|
this.apiReturn = apiReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : statusResponseSet
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2025. 6. 24.
|
||||||
|
* @description :
|
||||||
|
* @return : StatusResponse
|
||||||
|
* @param statusResponse
|
||||||
|
* @param httpStatus
|
||||||
|
* @param msg
|
||||||
|
* @param statCode - statCode는 API RETURN를 위한 코드
|
||||||
|
* @return
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static StatusResponse statusResponseSet(StatusResponse statusResponse, HttpStatus httpStatus, String msg, String statCode ) {
|
||||||
|
statusResponse.setStatus(httpStatus);
|
||||||
|
statusResponse.setMessage(msg);
|
||||||
|
|
||||||
|
Map<String, Object> apiReturnMap = new HashMap<>();
|
||||||
|
apiReturnMap.put("statCode", statCode);
|
||||||
|
apiReturnMap.put("result", httpStatus.toString());
|
||||||
|
statusResponse.setApiReturn(apiReturnMap);
|
||||||
|
|
||||||
|
return statusResponse;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -28,5 +28,7 @@ public interface ApiCallInfoMngService {
|
|||||||
|
|
||||||
//api key & api info 모두 실제 삭제
|
//api key & api info 모두 실제 삭제
|
||||||
void deleteApiKeyInfoReal(ApiKeyVO apiKeyVO) throws Exception;
|
void deleteApiKeyInfoReal(ApiKeyVO apiKeyVO) throws Exception;
|
||||||
|
|
||||||
|
void udpateApiKeyInfoReal(ApiKeyVO apiKeyVO) throws Exception;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -43,4 +43,8 @@ public class ApiCallInfoMngDAO extends EgovComAbstractDAO{
|
|||||||
public void deleteApiCallInfoAll(ApiKeyVO apiKeyVO) throws Exception{
|
public void deleteApiCallInfoAll(ApiKeyVO apiKeyVO) throws Exception{
|
||||||
update("ApiCallInfoMngDAO.deleteApiCallInfoAll", apiKeyVO);
|
update("ApiCallInfoMngDAO.deleteApiCallInfoAll", apiKeyVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateApiCallInfoAll(ApiKeyVO apiKeyVO) throws Exception{
|
||||||
|
update("ApiCallInfoMngDAO.updateApiCallInfoAll", apiKeyVO);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -65,5 +65,15 @@ public class ApiCallInfoMngServiceImpl extends EgovAbstractServiceImpl implement
|
|||||||
apiKeyMngDAO.deleteApiKeyReal(apiKeyVO);
|
apiKeyMngDAO.deleteApiKeyReal(apiKeyVO);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void udpateApiKeyInfoReal(ApiKeyVO apiKeyVO) throws Exception {
|
||||||
|
apiKeyVO.setUseYn("N");
|
||||||
|
apiCallInfoMngDAO.updateApiCallInfoAll(apiKeyVO);
|
||||||
|
|
||||||
|
//api key 삭제
|
||||||
|
apiKeyMngDAO.deleteApiKey(apiKeyVO);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -48,10 +48,6 @@ public class ApiKeyMngDAO extends EgovComAbstractDAO{
|
|||||||
return update("ApiKeyMngDAO.insertApiKey", apiKeyVO);
|
return update("ApiKeyMngDAO.insertApiKey", apiKeyVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteApiKeyReal(ApiKeyVO apiKeyVO) throws Exception{
|
|
||||||
update("ApiKeyMngDAO.deleteApiKeyReal", apiKeyVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<ApiKeyVO> selectApiKeyApplyStatus(ApiKeyVO apiKeyVO){
|
public List<ApiKeyVO> selectApiKeyApplyStatus(ApiKeyVO apiKeyVO){
|
||||||
return (List<ApiKeyVO>) list("ApiKeyMngDAO.selectApiKeyApplyStatus", apiKeyVO);
|
return (List<ApiKeyVO>) list("ApiKeyMngDAO.selectApiKeyApplyStatus", apiKeyVO);
|
||||||
}
|
}
|
||||||
@ -60,4 +56,8 @@ public class ApiKeyMngDAO extends EgovComAbstractDAO{
|
|||||||
return (int) select("ApiKeyMngDAO.selectMberApiKeyChk", apiKeyVO);
|
return (int) select("ApiKeyMngDAO.selectMberApiKeyChk", apiKeyVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void deleteApiKeyReal(ApiKeyVO apiKeyVO) throws Exception{
|
||||||
|
update("ApiKeyMngDAO.deleteApiKeyReal", apiKeyVO);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -471,8 +471,10 @@ public class ApiKeyMngController {
|
|||||||
ApiKeyVO apiKeyVO = new ApiKeyVO();
|
ApiKeyVO apiKeyVO = new ApiKeyVO();
|
||||||
apiKeyVO.setMberId(userId);
|
apiKeyVO.setMberId(userId);
|
||||||
apiKeyVO.setAccessNo(p_accessNo);
|
apiKeyVO.setAccessNo(p_accessNo);
|
||||||
|
|
||||||
apiCallInfoMngService.deleteApiKeyInfoReal(apiKeyVO);
|
// 2025.06.02 update로 수정
|
||||||
|
// apiCallInfoMngService.deleteApiKeyInfoReal(apiKeyVO);
|
||||||
|
apiCallInfoMngService.udpateApiKeyInfoReal(apiKeyVO);
|
||||||
|
|
||||||
modelAndView.addObject("message", "삭제 완료되었습니다.");
|
modelAndView.addObject("message", "삭제 완료되었습니다.");
|
||||||
modelAndView.addObject("result", "success");
|
modelAndView.addObject("result", "success");
|
||||||
|
|||||||
@ -12,6 +12,7 @@ import lombok.Builder;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
@Getter
|
@Getter
|
||||||
@ -19,6 +20,7 @@ import lombok.Setter;
|
|||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
|
@ToString
|
||||||
public class MjonMsgVO extends ComDefaultVO{
|
public class MjonMsgVO extends ComDefaultVO{
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|||||||
@ -211,9 +211,9 @@ public class MjonMsgCampainDataController {
|
|||||||
|
|
||||||
// 외부에서 선거발송 페이지로 들어오는걸 막음
|
// 외부에서 선거발송 페이지로 들어오는걸 막음
|
||||||
// 20250102 이호영
|
// 20250102 이호영
|
||||||
if (!"localhost".equals(hostName) && !"119.193.215.98".equals(hostName)) {
|
/*if (!"localhost".equals(hostName) && !"119.193.215.98".equals(hostName)) {
|
||||||
return "redirect:/web/mjon/msgdata/selectMsgDataView.do";
|
return "redirect:/web/mjon/msgdata/selectMsgDataView.do";
|
||||||
}
|
}*/
|
||||||
|
|
||||||
String categoryType = cateCode.getCateType();
|
String categoryType = cateCode.getCateType();
|
||||||
|
|
||||||
|
|||||||
@ -200,9 +200,17 @@ public class MjonMsgCampainTWDataController {
|
|||||||
|
|
||||||
// 외부에서 선거발송 페이지로 들어오는걸 막음
|
// 외부에서 선거발송 페이지로 들어오는걸 막음
|
||||||
// 20250102 이호영
|
// 20250102 이호영
|
||||||
if (!"localhost".equals(hostName)) {
|
System.out.println("hostName :: "+ hostName);
|
||||||
return "redirect:/web/mjon/msgdata/selectMsgDataView.do";
|
System.out.println("hostName :: "+ hostName);
|
||||||
}
|
System.out.println("hostName :: "+ hostName);
|
||||||
|
System.out.println("hhhhhhhh hostName :: "+ hostName);
|
||||||
|
System.out.println("hostName :: "+ hostName);
|
||||||
|
System.out.println("hostName :: "+ hostName);
|
||||||
|
// if (!"localhost".equals(hostName)
|
||||||
|
// && !"119.193.215.98".equals(hostName))
|
||||||
|
// {
|
||||||
|
// return "redirect:/web/mjon/msgdata/selectMsgDataView.do";
|
||||||
|
// }
|
||||||
|
|
||||||
String categoryType = cateCode.getCateType();
|
String categoryType = cateCode.getCateType();
|
||||||
|
|
||||||
|
|||||||
@ -3946,26 +3946,39 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
@Override
|
@Override
|
||||||
public StatusResponse sendMsgData_advc(MjonMsgVO mjonMsgVO, HttpServletRequest request) throws Exception {
|
public StatusResponse sendMsgData_advc(MjonMsgVO mjonMsgVO, HttpServletRequest request) throws Exception {
|
||||||
|
|
||||||
log.info("mjonMsgVO [{}]", mjonMsgVO.getMjonMsgSendVOList().get(0).getPhone());
|
// log.info("mjonMsgVO [{}]", mjonMsgVO.getMjonMsgSendVOList().get(0).getPhone());
|
||||||
log.info(" :: sendMsgData_advc :: ");
|
log.info(" :: sendMsgData_advc :: ");
|
||||||
|
log.info(" + mjonMsgVO.toString() :: [{}]", mjonMsgVO.toString());
|
||||||
|
|
||||||
|
StatusResponse statusResponse = new StatusResponse();
|
||||||
|
|
||||||
Map<String, Object> returnMap = new HashMap<>();
|
Map<String, Object> returnMap = new HashMap<>();
|
||||||
|
Map<String, Object> apiReturnMap = new HashMap<>();
|
||||||
|
|
||||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()
|
String userId = "";
|
||||||
? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser()
|
if("A".equals(mjonMsgVO.getSendKind()))
|
||||||
: null;
|
{
|
||||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
userId = mjonMsgVO.getMberId();
|
||||||
|
}else {
|
||||||
|
|
||||||
|
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()
|
||||||
|
? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser()
|
||||||
|
: null;
|
||||||
|
userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||||
|
|
||||||
|
if (userId.equals("")) {
|
||||||
|
return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다.");
|
||||||
|
}
|
||||||
|
|
||||||
if (userId.equals("")) {
|
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mjonMsgVO.setUserId(userId);
|
mjonMsgVO.setUserId(userId);
|
||||||
|
|
||||||
// 발신번호가 등록된 유효한 번호인지 확인
|
// 발신번호가 등록된 유효한 번호인지 확인
|
||||||
int sendCallFromCnt = mjonMsgDAO.selectCallFromNumberChk(mjonMsgVO);
|
int sendCallFromCnt = mjonMsgDAO.selectCallFromNumberChk(mjonMsgVO);
|
||||||
if (sendCallFromCnt < 1) {
|
if (sendCallFromCnt < 1) {
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "등록된 발신번호를 찾을 수 없습니다.");
|
// return new StatusResponse(HttpStatus.BAD_REQUEST, "등록된 발신번호를 찾을 수 없습니다.");
|
||||||
|
return StatusResponse.statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "등록된 발신번호를 찾을 수 없습니다.", "STAT_1010");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -3975,8 +3988,10 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
if (!mberSttus) {
|
if (!mberSttus) {
|
||||||
request.getSession().invalidate();
|
request.getSession().invalidate();
|
||||||
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
|
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
|
||||||
return new StatusResponse(HttpStatus.UNAUTHORIZED,
|
// return new StatusResponse(HttpStatus.UNAUTHORIZED,
|
||||||
"현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 문자를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
|
// "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 문자를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
|
||||||
|
return StatusResponse.statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 문자를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."
|
||||||
|
, "STAT_1070");
|
||||||
}
|
}
|
||||||
|
|
||||||
String smsTxt = mjonMsgVO.getSmsTxtArea();
|
String smsTxt = mjonMsgVO.getSmsTxtArea();
|
||||||
@ -3990,9 +4005,9 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
|
|
||||||
log.debug(" :: smsTxt :: [{}]", smsTxt);
|
log.debug(" :: smsTxt :: [{}]", smsTxt);
|
||||||
|
|
||||||
StatusResponse statusResponse = new StatusResponse();
|
|
||||||
|
|
||||||
// 화면에서 저장한 이미지 가져오기
|
// 화면에서 저장한 이미지 가져오기
|
||||||
|
// API는 이미지가 없어서 해당 없음
|
||||||
mjonMsgVO = setImagesSetting(mjonMsgVO, statusResponse);
|
mjonMsgVO = setImagesSetting(mjonMsgVO, statusResponse);
|
||||||
|
|
||||||
if (mjonMsgVO == null) {
|
if (mjonMsgVO == null) {
|
||||||
@ -4014,9 +4029,10 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
int deletedCount = initialSize - finalSize;
|
int deletedCount = initialSize - finalSize;
|
||||||
// 수신거부 목록
|
// 수신거부 목록
|
||||||
returnMap.put("resultBlockSts", deletedCount);
|
returnMap.put("resultBlockSts", deletedCount);
|
||||||
|
apiReturnMap.put("resultBlockSts", deletedCount);
|
||||||
|
|
||||||
if (mjonMsgSendVOList.size() < 1) {
|
if (mjonMsgSendVOList.size() < 1) {
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "수신거부와 매칭되는 번호 제거 후 \n발송 가능한 수신목록이 존재하지 않습니다.");
|
return StatusResponse.statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "수신거부와 매칭되는 번호 제거 후 \n발송 가능한 수신목록이 존재하지 않습니다.", "STAT_1021");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 전용 전송사 코드 및 대표 전송사 조회
|
// 전용 전송사 코드 및 대표 전송사 조회
|
||||||
@ -4123,7 +4139,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
* */
|
* */
|
||||||
if (!isCashSufficient(mjonMsgVO, mjonMsgSendVOList)) {
|
if (!isCashSufficient(mjonMsgVO, mjonMsgSendVOList)) {
|
||||||
log.error("Insufficient balance for message sending.");
|
log.error("Insufficient balance for message sending.");
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 발송에 필요한 보유 잔액이 부족 합니다.");
|
return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 발송에 필요한 보유 잔액이 부족 합니다.", "STAT_1060");
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println("==================== insert 시작 ====================");
|
System.out.println("==================== insert 시작 ====================");
|
||||||
@ -4138,13 +4154,24 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
// instTotalCnt : 화면에서 보여줄 총 발송건수
|
// instTotalCnt : 화면에서 보여줄 총 발송건수
|
||||||
int instTotalCnt = 0;
|
int instTotalCnt = 0;
|
||||||
// Step 2: 그룹화 된 데이터를 그룹별로 insert 처리
|
// Step 2: 그룹화 된 데이터를 그룹별로 insert 처리
|
||||||
|
String apiMsgGroupId = "";
|
||||||
|
String apiMsgType = "";
|
||||||
for (Map.Entry<String, List<MjonMsgSendVO>> entry : priceGroupedMessages.entrySet()) {
|
for (Map.Entry<String, List<MjonMsgSendVO>> entry : priceGroupedMessages.entrySet()) {
|
||||||
List<MjonMsgSendVO> groupedMsgList = entry.getValue(); // 해당 가격의 메시지 리스트
|
List<MjonMsgSendVO> groupedMsgList = entry.getValue(); // 해당 가격의 메시지 리스트
|
||||||
|
|
||||||
// msgGroupId 생성
|
// msgGroupId 생성
|
||||||
String nextMsgGroupId = idgenMjonMsgGroupId.getNextStringId();
|
String nextMsgGroupId = idgenMjonMsgGroupId.getNextStringId();
|
||||||
groupedMsgList.forEach(t -> t.setMsgGroupId(nextMsgGroupId));
|
groupedMsgList.forEach(t -> t.setMsgGroupId(nextMsgGroupId));
|
||||||
|
|
||||||
|
// api 전달 값
|
||||||
|
apiMsgGroupId = StringUtils.isNotEmpty(apiMsgGroupId)
|
||||||
|
? apiMsgGroupId + "," + nextMsgGroupId
|
||||||
|
: nextMsgGroupId;
|
||||||
|
|
||||||
|
apiMsgType = StringUtils.isNotEmpty(apiMsgType)
|
||||||
|
? apiMsgType + "," + mjonMsgSendVOList.get(0).getMsgType()
|
||||||
|
: mjonMsgSendVOList.get(0).getMsgType();
|
||||||
|
|
||||||
// 발송 데이터 삽입
|
// 발송 데이터 삽입
|
||||||
int instCnt = this.insertMsgData_advc(groupedMsgList);
|
int instCnt = this.insertMsgData_advc(groupedMsgList);
|
||||||
|
|
||||||
@ -4175,17 +4202,27 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
// returnMap.put("resultSts", instCnt);
|
// returnMap.put("resultSts", instCnt);
|
||||||
|
|
||||||
log.debug("가격 [{}]의 총 갯수: [{}]", entry.getKey(), groupedMsgList.size());
|
log.debug("가격 [{}]의 총 갯수: [{}]", entry.getKey(), groupedMsgList.size());
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 그룹 ID
|
||||||
|
apiReturnMap.put("msgGroupId", apiMsgGroupId);
|
||||||
|
// 메세지 타입
|
||||||
|
apiReturnMap.put("msgType", apiMsgType);
|
||||||
|
// 총 발송 건수
|
||||||
|
returnMap.put("resultSts", instTotalCnt);
|
||||||
|
apiReturnMap.put("resultSts", instTotalCnt);
|
||||||
|
|
||||||
|
|
||||||
|
// db insert 성능 개선중 하나에 방법
|
||||||
// 분할 최대건수가 되면 디비에 입력하기
|
// 분할 최대건수가 되면 디비에 입력하기
|
||||||
// 여러시도 했지만 일단 보류
|
// 여러시도 했지만 일단 보류
|
||||||
// 무시해도 됨
|
// 무시해도 됨
|
||||||
// int instCnt = mjonMsgDataDAO.insertMsgDataInfo_advc(mjonMsgSendVOList);
|
// int instCnt = mjonMsgDataDAO.insertMsgDataInfo_advc(mjonMsgSendVOList);
|
||||||
// int instCnt = mjonMsgDataDAO.insertMsgDataInfo_jdbc_advc(mjonMsgSendVOList);
|
// int instCnt = mjonMsgDataDAO.insertMsgDataInfo_jdbc_advc(mjonMsgSendVOList);
|
||||||
|
|
||||||
// 총 발송 건수
|
|
||||||
returnMap.put("resultSts", instTotalCnt);
|
|
||||||
|
|
||||||
//50건이상 문자발송 시 안내메시지 전송
|
//50건이상 문자발송 시 안내메시지 전송
|
||||||
try {
|
try {
|
||||||
@ -4216,6 +4253,10 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
|
|
||||||
statusResponse.setStatus(HttpStatus.OK);
|
statusResponse.setStatus(HttpStatus.OK);
|
||||||
statusResponse.setObject(returnMap);
|
statusResponse.setObject(returnMap);
|
||||||
|
|
||||||
|
apiReturnMap.put("result", HttpStatus.OK);
|
||||||
|
apiReturnMap.put("message", "문자 전송이 완료되었습니다.");
|
||||||
|
statusResponse.setApiReturn(apiReturnMap);
|
||||||
return statusResponse;
|
return statusResponse;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -4363,7 +4404,9 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
int fileCount = 0;
|
int fileCount = 0;
|
||||||
// 장문 메시지일 경우 + 그림 이미지가 첨부된 경우
|
// 장문 메시지일 경우 + 그림 이미지가 첨부된 경우
|
||||||
//
|
//
|
||||||
if (mjonMsgVO.getMsgType().equals("6") && mjonMsgVO.getImgFilePathAdvc() != null
|
log.info(" + mjonMsgVO.getMsgType() :: [{}]", mjonMsgVO.getMsgType());
|
||||||
|
log.info(" + mjonMsgVO.getImgFilePathAdvc() :: [{}]", mjonMsgVO.getImgFilePathAdvc());
|
||||||
|
if ("6".equals(mjonMsgVO.getMsgType()) && mjonMsgVO.getImgFilePathAdvc() != null
|
||||||
&& mjonMsgVO.getImgFileIdAdvc() != null) {
|
&& mjonMsgVO.getImgFileIdAdvc() != null) {
|
||||||
|
|
||||||
// 그림 이미지가 첨부된 경우
|
// 그림 이미지가 첨부된 경우
|
||||||
|
|||||||
@ -34,6 +34,7 @@ import org.springframework.stereotype.Service;
|
|||||||
|
|
||||||
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
||||||
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
||||||
|
import itn.com.cmm.util.StringUtil;
|
||||||
import itn.com.cmm.util.StringUtil2;
|
import itn.com.cmm.util.StringUtil2;
|
||||||
import itn.let.cmm.vo.FileInfoVO;
|
import itn.let.cmm.vo.FileInfoVO;
|
||||||
import itn.let.fax.addr.service.FaxAddrGroupVO;
|
import itn.let.fax.addr.service.FaxAddrGroupVO;
|
||||||
@ -126,6 +127,11 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
|
|
||||||
Map<String, Object> resultMap = new HashMap<String, Object>();
|
Map<String, Object> resultMap = new HashMap<String, Object>();
|
||||||
|
|
||||||
|
//수신번호 검색 시 번호 포멧 통일
|
||||||
|
if("4".equals(mjonMsgSentVO.getSearchCondition()) && StringUtil.isNotEmpty(mjonMsgSentVO.getSearchKeyword())) {
|
||||||
|
mjonMsgSentVO.setSearchKeyword(mjonMsgSentVO.getSearchKeyword().trim().replace("-", ""));
|
||||||
|
}
|
||||||
|
|
||||||
// 목록
|
// 목록
|
||||||
List<MjonMsgSentVO> resultList = mjonMsgSentDAO.selectAllMsgSentList_advc(mjonMsgSentVO);
|
List<MjonMsgSentVO> resultList = mjonMsgSentDAO.selectAllMsgSentList_advc(mjonMsgSentVO);
|
||||||
|
|
||||||
@ -638,7 +644,7 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
|
|
||||||
// log.info("엑셀에 넣을 데이터: [{}]", data[i][1]);
|
// log.info("엑셀에 넣을 데이터: [{}]", data[i][1]);
|
||||||
|
|
||||||
data[i][2] = "H".equals(vo.getSendKind()) ? "WEB" : "API";
|
data[i][2] = "A".equals(vo.getSendKind()) ? "API" : "WEB";
|
||||||
|
|
||||||
String msgType="단문";
|
String msgType="단문";
|
||||||
if ("6".equals(vo.getMsgType())) {
|
if ("6".equals(vo.getMsgType())) {
|
||||||
|
|||||||
@ -198,7 +198,7 @@ public class EgovMypageRESTAPIController{
|
|||||||
|
|
||||||
List<ApiKeyVO> resultList = new ArrayList<ApiKeyVO>();
|
List<ApiKeyVO> resultList = new ArrayList<ApiKeyVO>();
|
||||||
resultList = apiKeyMngService.selectApiKeyApplyStatus(apiKeyVO);
|
resultList = apiKeyMngService.selectApiKeyApplyStatus(apiKeyVO);
|
||||||
System.out.println("=============");
|
|
||||||
if (resultList.size()>0) {
|
if (resultList.size()>0) {
|
||||||
if(StringUtils.isNotEmpty(resultList.get(0).getFrstRegistPnttm()))
|
if(StringUtils.isNotEmpty(resultList.get(0).getFrstRegistPnttm()))
|
||||||
{
|
{
|
||||||
@ -250,6 +250,31 @@ public class EgovMypageRESTAPIController{
|
|||||||
return "web/api/apiSpec";
|
return "web/api/apiSpec";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value="/web/api/apiAtSpec.do")
|
||||||
|
public String apiAtSpec(ModelMap model)
|
||||||
|
throws Exception {
|
||||||
|
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||||
|
|
||||||
|
if(loginVO == null) {
|
||||||
|
return "redirect:/web/user/login/login.do";
|
||||||
|
}
|
||||||
|
model.addAttribute("loginVO", loginVO);
|
||||||
|
|
||||||
|
return "web/api/apiAtSpec";
|
||||||
|
}
|
||||||
|
@RequestMapping(value="/web/api/apiFtSpec.do")
|
||||||
|
public String apiFtSpec(ModelMap model)
|
||||||
|
throws Exception {
|
||||||
|
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||||
|
|
||||||
|
if(loginVO == null) {
|
||||||
|
return "redirect:/web/user/login/login.do";
|
||||||
|
}
|
||||||
|
model.addAttribute("loginVO", loginVO);
|
||||||
|
|
||||||
|
return "web/api/apiFtSpec";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param model
|
* @param model
|
||||||
* @return
|
* @return
|
||||||
|
|||||||
@ -1,94 +1,94 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:egov-security="http://www.egovframe.go.kr/schema/egov-security"
|
xmlns:egov-security="http://www.egovframe.go.kr/schema/egov-security"
|
||||||
xmlns:security="http://www.springframework.org/schema/security"
|
xmlns:security="http://www.springframework.org/schema/security"
|
||||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
|
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
|
||||||
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.2.xsd
|
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.2.xsd
|
||||||
http://www.egovframe.go.kr/schema/egov-security http://maven.egovframe.go.kr/schema/egov-security/egov-security-3.7.xsd">
|
http://www.egovframe.go.kr/schema/egov-security http://maven.egovframe.go.kr/schema/egov-security/egov-security-3.7.xsd">
|
||||||
|
|
||||||
<security:http pattern="/css/**" security="none"/>
|
<security:http pattern="/css/**" security="none"/>
|
||||||
<security:http pattern="/html/**" security="none"/>
|
<security:http pattern="/html/**" security="none"/>
|
||||||
<security:http pattern="/images/**" security="none"/>
|
<security:http pattern="/images/**" security="none"/>
|
||||||
<security:http pattern="/js/**" security="none"/>
|
<security:http pattern="/js/**" security="none"/>
|
||||||
<security:http pattern="/resource/**" security="none"/>
|
<security:http pattern="/resource/**" security="none"/>
|
||||||
<security:http pattern="\A/WEB-INF/jsp/.*\Z" request-matcher="regex" security="none"/>
|
<security:http pattern="\A/WEB-INF/jsp/.*\Z" request-matcher="regex" security="none"/>
|
||||||
|
|
||||||
<egov-security:config id="securityConfig"
|
<egov-security:config id="securityConfig"
|
||||||
loginUrl="/uat/uia/actionMain.do"
|
loginUrl="/uat/uia/actionMain.do"
|
||||||
logoutSuccessUrl="/uat/uia/actionMain.do"
|
logoutSuccessUrl="/uat/uia/actionMain.do"
|
||||||
loginFailureUrl="/uat/uia/actionSecurityLogin.do?login_error=1"
|
loginFailureUrl="/uat/uia/actionSecurityLogin.do?login_error=1"
|
||||||
accessDeniedUrl="/sec/ram/accessDenied.do"
|
accessDeniedUrl="/sec/ram/accessDenied.do"
|
||||||
|
|
||||||
dataSource="egov.dataSource"
|
dataSource="egov.dataSource"
|
||||||
|
|
||||||
jdbcUsersByUsernameQuery="SELECT USER_ID, ESNTL_ID AS PASSWORD, 1 ENABLED, USER_NM, USER_ZIP,
|
jdbcUsersByUsernameQuery="SELECT USER_ID, ESNTL_ID AS PASSWORD, 1 ENABLED, USER_NM, USER_ZIP,
|
||||||
USER_ADRES, USER_EMAIL, USER_SE, '-' ORGNZT_ID, ESNTL_ID, MBTLNUM AS MOBLPHONNO,
|
USER_ADRES, USER_EMAIL, USER_SE, '-' ORGNZT_ID, ESNTL_ID, MBTLNUM AS MOBLPHONNO,
|
||||||
'-' ORGNZT_NM, AUTHOR_CODE AS AUTHORITY, DEPT
|
'-' ORGNZT_NM, AUTHOR_CODE AS AUTHORITY, DEPT
|
||||||
FROM COMVNUSERMASTER A
|
FROM COMVNUSERMASTER A
|
||||||
INNER JOIN LETTNEMPLYRSCRTYESTBS B ON A.ESNTL_ID = B.SCRTY_DTRMN_TRGET_ID
|
INNER JOIN LETTNEMPLYRSCRTYESTBS B ON A.ESNTL_ID = B.SCRTY_DTRMN_TRGET_ID
|
||||||
WHERE CONCAT(USER_SE, USER_ID) = ?"
|
WHERE CONCAT(USER_SE, USER_ID) = ?"
|
||||||
|
|
||||||
jdbcAuthoritiesByUsernameQuery="SELECT A.SCRTY_DTRMN_TRGET_ID USER_ID, A.AUTHOR_CODE AUTHORITY
|
jdbcAuthoritiesByUsernameQuery="SELECT A.SCRTY_DTRMN_TRGET_ID USER_ID, A.AUTHOR_CODE AUTHORITY
|
||||||
FROM LETTNEMPLYRSCRTYESTBS A, COMVNUSERMASTER B
|
FROM LETTNEMPLYRSCRTYESTBS A, COMVNUSERMASTER B
|
||||||
WHERE A.SCRTY_DTRMN_TRGET_ID = B.ESNTL_ID AND B.USER_ID = ?"
|
WHERE A.SCRTY_DTRMN_TRGET_ID = B.ESNTL_ID AND B.USER_ID = ?"
|
||||||
|
|
||||||
jdbcMapClass="itn.let.uat.uia.service.impl.EgovSessionMapping"
|
jdbcMapClass="itn.let.uat.uia.service.impl.EgovSessionMapping"
|
||||||
|
|
||||||
requestMatcherType="regex"
|
requestMatcherType="regex"
|
||||||
hash="plaintext"
|
hash="plaintext"
|
||||||
hashBase64="false"
|
hashBase64="false"
|
||||||
|
|
||||||
concurrentMaxSessons="999"
|
concurrentMaxSessons="999"
|
||||||
concurrentExpiredUrl="/"
|
concurrentExpiredUrl="/"
|
||||||
|
|
||||||
defaultTargetUrl="/uat/uia/actionMain.do"
|
defaultTargetUrl="/uat/uia/actionMain.do"
|
||||||
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!--원 소스 -->
|
<!--원 소스 -->
|
||||||
<!-- defaultTargetUrl="/uat/uia/actionMain.do" -->
|
<!-- defaultTargetUrl="/uat/uia/actionMain.do" -->
|
||||||
|
|
||||||
<!-- sqlHierarchicalRoles="
|
<!-- sqlHierarchicalRoles="
|
||||||
SELECT a.CHLDRN_ROLE child, a.PARNTS_ROLE parent
|
SELECT a.CHLDRN_ROLE child, a.PARNTS_ROLE parent
|
||||||
FROM LETTNROLES_HIERARCHY a LEFT JOIN LETTNROLES_HIERARCHY b on (a.CHLDRN_ROLE = b.PARNTS_ROLE)" -->
|
FROM LETTNROLES_HIERARCHY a LEFT JOIN LETTNROLES_HIERARCHY b on (a.CHLDRN_ROLE = b.PARNTS_ROLE)" -->
|
||||||
|
|
||||||
<egov-security:secured-object-config id="securedObjectConfig"
|
<egov-security:secured-object-config id="securedObjectConfig"
|
||||||
roleHierarchyString="
|
roleHierarchyString="
|
||||||
ROLE_ADMIN > ROLE_USER_MEMBER
|
ROLE_ADMIN > ROLE_USER_MEMBER
|
||||||
ROLE_USER_MEMBER > ROLE_ANONYMOUS"
|
ROLE_USER_MEMBER > ROLE_ANONYMOUS"
|
||||||
|
|
||||||
sqlRolesAndUrl="
|
sqlRolesAndUrl="
|
||||||
SELECT a.ROLE_PTTRN url, b.AUTHOR_CODE authority
|
SELECT a.ROLE_PTTRN url, b.AUTHOR_CODE authority
|
||||||
FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b
|
FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b
|
||||||
WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'url'
|
WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'url'
|
||||||
ORDER BY a.ROLE_SORT"
|
ORDER BY a.ROLE_SORT"
|
||||||
|
|
||||||
sqlRolesAndMethod="
|
sqlRolesAndMethod="
|
||||||
SELECT a.ROLE_PTTRN method, b.AUTHOR_CODE authority
|
SELECT a.ROLE_PTTRN method, b.AUTHOR_CODE authority
|
||||||
FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b
|
FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b
|
||||||
WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'method'
|
WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'method'
|
||||||
ORDER BY a.ROLE_SORT"
|
ORDER BY a.ROLE_SORT"
|
||||||
|
|
||||||
sqlRolesAndPointcut="
|
sqlRolesAndPointcut="
|
||||||
SELECT a.ROLE_PTTRN pointcut, b.AUTHOR_CODE authority
|
SELECT a.ROLE_PTTRN pointcut, b.AUTHOR_CODE authority
|
||||||
FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b
|
FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b
|
||||||
WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'pointcut'
|
WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'pointcut'
|
||||||
ORDER BY a.ROLE_SORT"
|
ORDER BY a.ROLE_SORT"
|
||||||
|
|
||||||
sqlRegexMatchedRequestMapping="
|
sqlRegexMatchedRequestMapping="
|
||||||
SELECT a.resource_pattern uri, b.authority authority
|
SELECT a.resource_pattern uri, b.authority authority
|
||||||
FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b
|
FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b
|
||||||
WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'regex'
|
WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'regex'
|
||||||
ORDER BY a.ROLE_SORT"
|
ORDER BY a.ROLE_SORT"
|
||||||
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<egov-security:initializer id="initializer" supportMethod="true" supportPointcut="false" />
|
<egov-security:initializer id="initializer" supportMethod="true" supportPointcut="false" />
|
||||||
|
|
||||||
<!-- URL에 세미콜론(semicolon)허용 여부(기본값/false) -->
|
<!-- URL에 세미콜론(semicolon)허용 여부(기본값/false) -->
|
||||||
<bean id="egovStrictHttpFirewall" class="org.springframework.security.web.firewall.StrictHttpFirewall">
|
<bean id="egovStrictHttpFirewall" class="org.springframework.security.web.firewall.StrictHttpFirewall">
|
||||||
<property name="allowSemicolon" value="true"/>
|
<property name="allowSemicolon" value="true"/>
|
||||||
</bean>
|
</bean>
|
||||||
<security:http-firewall ref="egovStrictHttpFirewall"/>
|
<security:http-firewall ref="egovStrictHttpFirewall"/>
|
||||||
|
|
||||||
</beans>
|
</beans>
|
||||||
|
|||||||
@ -85,4 +85,11 @@
|
|||||||
DELETE FROM lettngnrlmber_access_call_info
|
DELETE FROM lettngnrlmber_access_call_info
|
||||||
WHERE access_no = #accessNo#
|
WHERE access_no = #accessNo#
|
||||||
</delete>
|
</delete>
|
||||||
|
|
||||||
|
<update id="ApiCallInfoMngDAO.updateApiCallInfoAll" parameterClass="apiKeyVO">
|
||||||
|
UPDATE lettngnrlmber_access_call_info
|
||||||
|
SET use_yn = #useYn#
|
||||||
|
WHERE access_no = #accessNo#
|
||||||
|
|
||||||
|
</update>
|
||||||
</sqlMap>
|
</sqlMap>
|
||||||
|
|||||||
@ -208,6 +208,7 @@
|
|||||||
)
|
)
|
||||||
WHERE 1=1
|
WHERE 1=1
|
||||||
and a.mber_id=#mberId#
|
and a.mber_id=#mberId#
|
||||||
|
and b.USE_YN != 'N'
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|||||||
@ -1409,7 +1409,7 @@
|
|||||||
C.YELLOW_ID AS yellowId
|
C.YELLOW_ID AS yellowId
|
||||||
FROM MJ_MSG_GROUP_DATA B
|
FROM MJ_MSG_GROUP_DATA B
|
||||||
INNER JOIN (
|
INNER JOIN (
|
||||||
select MSG_GROUP_ID, MSG_TYPE, DEL_FLAG, MSG_NOTICETALK_SENDER_KEY, BIZ_KAKAO_RESEND_YN, BIZ_KAKAO_RESEND_DATA
|
select MSG_GROUP_ID, MSG_TYPE, DEL_FLAG, MSG_NOTICETALK_SENDER_KEY, BIZ_KAKAO_RESEND_YN, BIZ_KAKAO_RESEND_DATA, CALL_TO
|
||||||
from MJ_MSG_DATA
|
from MJ_MSG_DATA
|
||||||
where DEL_FLAG = 'N'
|
where DEL_FLAG = 'N'
|
||||||
<isNotEmpty property="tabType">
|
<isNotEmpty property="tabType">
|
||||||
@ -1452,6 +1452,9 @@
|
|||||||
<isEqual property="searchCondition" compareValue="3">
|
<isEqual property="searchCondition" compareValue="3">
|
||||||
AND B.SMS_TXT like CONCAT('%', #searchKeyword#, '%')
|
AND B.SMS_TXT like CONCAT('%', #searchKeyword#, '%')
|
||||||
</isEqual>
|
</isEqual>
|
||||||
|
<isEqual property="searchCondition" compareValue="4" >
|
||||||
|
AND A.CALL_TO LIKE CONCAT('%', #searchKeyword#, '%')
|
||||||
|
</isEqual>
|
||||||
</isNotEmpty>
|
</isNotEmpty>
|
||||||
GROUP BY B.MSG_GROUP_ID
|
GROUP BY B.MSG_GROUP_ID
|
||||||
ORDER BY 1=1
|
ORDER BY 1=1
|
||||||
|
|||||||
@ -150,6 +150,7 @@
|
|||||||
BEF_POINT,
|
BEF_POINT,
|
||||||
|
|
||||||
TOT_PRICE,
|
TOT_PRICE,
|
||||||
|
SEND_KIND,
|
||||||
|
|
||||||
AT_DELAY_YN,
|
AT_DELAY_YN,
|
||||||
BIZ_KAKAO_RESEND_ORGNL_TXT,
|
BIZ_KAKAO_RESEND_ORGNL_TXT,
|
||||||
@ -174,6 +175,7 @@
|
|||||||
#befPoint#,
|
#befPoint#,
|
||||||
|
|
||||||
#totPrice#,
|
#totPrice#,
|
||||||
|
#sendKind#,
|
||||||
|
|
||||||
#atDelayYn#,
|
#atDelayYn#,
|
||||||
#bizKakaoResendOrgnlTxt#,
|
#bizKakaoResendOrgnlTxt#,
|
||||||
|
|||||||
@ -2327,6 +2327,7 @@
|
|||||||
EVENT_YN,
|
EVENT_YN,
|
||||||
DELAY_YN,
|
DELAY_YN,
|
||||||
AT_DELAY_YN,
|
AT_DELAY_YN,
|
||||||
|
SEND_KIND,
|
||||||
BIZ_KAKAO_RESEND_ORGNL_TXT,
|
BIZ_KAKAO_RESEND_ORGNL_TXT,
|
||||||
SUBJECT_CHK_YN
|
SUBJECT_CHK_YN
|
||||||
)
|
)
|
||||||
@ -2354,6 +2355,7 @@
|
|||||||
#eventYn#,
|
#eventYn#,
|
||||||
#delayYn#,
|
#delayYn#,
|
||||||
#atDelayYn#,
|
#atDelayYn#,
|
||||||
|
#sendKind#,
|
||||||
#kakaoSubMagOrgnlTxt#,
|
#kakaoSubMagOrgnlTxt#,
|
||||||
#subjectChkYn#
|
#subjectChkYn#
|
||||||
)
|
)
|
||||||
|
|||||||
@ -254,6 +254,9 @@
|
|||||||
<isEqual property="searchCondition" compareValue="3" >
|
<isEqual property="searchCondition" compareValue="3" >
|
||||||
AND B.SMS_TXT LIKE CONCAT('%', #searchKeyword#, '%')
|
AND B.SMS_TXT LIKE CONCAT('%', #searchKeyword#, '%')
|
||||||
</isEqual>
|
</isEqual>
|
||||||
|
<isEqual property="searchCondition" compareValue="4" >
|
||||||
|
AND A.CALL_TO LIKE CONCAT('%', #searchKeyword#, '%')
|
||||||
|
</isEqual>
|
||||||
</isNotEmpty>
|
</isNotEmpty>
|
||||||
<isNotEmpty property="searchCondition01">
|
<isNotEmpty property="searchCondition01">
|
||||||
AND B.RESERVE_YN = #searchCondition01#
|
AND B.RESERVE_YN = #searchCondition01#
|
||||||
@ -473,6 +476,9 @@
|
|||||||
<isEqual property="searchCondition" compareValue="3" >
|
<isEqual property="searchCondition" compareValue="3" >
|
||||||
AND B.SMS_TXT LIKE CONCAT('%', #searchKeyword#, '%')
|
AND B.SMS_TXT LIKE CONCAT('%', #searchKeyword#, '%')
|
||||||
</isEqual>
|
</isEqual>
|
||||||
|
<isEqual property="searchCondition" compareValue="4" >
|
||||||
|
AND A.CALL_TO LIKE CONCAT('%', #searchKeyword#, '%')
|
||||||
|
</isEqual>
|
||||||
</isNotEmpty>
|
</isNotEmpty>
|
||||||
<isNotEmpty property="searchCondition01">
|
<isNotEmpty property="searchCondition01">
|
||||||
AND B.RESERVE_YN = #searchCondition01#
|
AND B.RESERVE_YN = #searchCondition01#
|
||||||
|
|||||||
@ -36,6 +36,11 @@
|
|||||||
<link rel="stylesheet" href="/publish/js/datepicker/classic.css">
|
<link rel="stylesheet" href="/publish/js/datepicker/classic.css">
|
||||||
<link rel="stylesheet" href="/publish/js/datepicker/classic.date.css">
|
<link rel="stylesheet" href="/publish/js/datepicker/classic.date.css">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/publish/js/highlight/styles/default.min.css">
|
||||||
|
<link rel="stylesheet" href="/publish/js/highlight/styles/arta.css">
|
||||||
|
|
||||||
<script type="text/javascript" src="/publish/js/jquery-3.5.0.js"></script>
|
<script type="text/javascript" src="/publish/js/jquery-3.5.0.js"></script>
|
||||||
<script type="text/javascript" src="/publish/js/jquery.mCustomScrollbar.concat.min.js"></script>
|
<script type="text/javascript" src="/publish/js/jquery.mCustomScrollbar.concat.min.js"></script>
|
||||||
<script type="text/javascript" src="/publish/js/common.js?date=202507210001"></script>
|
<script type="text/javascript" src="/publish/js/common.js?date=202507210001"></script>
|
||||||
@ -80,6 +85,9 @@
|
|||||||
|
|
||||||
<!-- Uncaught TypeError: e.widget is not a function로 인해 가장 마지막에 선언_이준호_220510 -->
|
<!-- Uncaught TypeError: e.widget is not a function로 인해 가장 마지막에 선언_이준호_220510 -->
|
||||||
<script type="text/javascript" src="/dist/js/tabulator/jquery_wrapper.js"></script>
|
<script type="text/javascript" src="/dist/js/tabulator/jquery_wrapper.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="/publish/js/highlight/highlight.min.js"></script>
|
||||||
|
|
||||||
<%-- 20240110 matomo 사용 안함으로 인하여 주석처리 함
|
<%-- 20240110 matomo 사용 안함으로 인하여 주석처리 함
|
||||||
|
|
||||||
<c:if test="${fn:contains(pageContext.request.requestURL, 'munjaon.co.kr')}">
|
<c:if test="${fn:contains(pageContext.request.requestURL, 'munjaon.co.kr')}">
|
||||||
|
|||||||
@ -26,7 +26,7 @@ function moveTab(type){
|
|||||||
<!-- tab button -->
|
<!-- tab button -->
|
||||||
<ul class="tabType1">
|
<ul class="tabType1">
|
||||||
<li class="tab active"><button type="button" onclick="TabType6(this,'1');">네이버 주소록을 이용하여 폰주소록 등록</button></li>
|
<li class="tab active"><button type="button" onclick="TabType6(this,'1');">네이버 주소록을 이용하여 폰주소록 등록</button></li>
|
||||||
<li class="tab"><button type="button" onclick="TabType6(this,'2');">핸드폰 VCF파일로 변환하여 등록</button></li>
|
<li class="tab"><button type="button" onclick="TabType6(this,'2');listTab(this,'2');">핸드폰 VCF파일로 변환하여 등록</button></li>
|
||||||
</ul><!--// tab button -->
|
</ul><!--// tab button -->
|
||||||
</div>
|
</div>
|
||||||
<!-- 네이버 주소록을 이용하여 등록 -->
|
<!-- 네이버 주소록을 이용하여 등록 -->
|
||||||
@ -98,7 +98,8 @@ function moveTab(type){
|
|||||||
</div><!--// 네이버 주소록을 이용하여 등록 - 안드로이드 -->
|
</div><!--// 네이버 주소록을 이용하여 등록 - 안드로이드 -->
|
||||||
|
|
||||||
<!-- 네이버 주소록을 이용하여 등록 - 안드로이드 -->
|
<!-- 네이버 주소록을 이용하여 등록 - 안드로이드 -->
|
||||||
<div class="addWrap iphone eleType_cont" id="listTab_2">
|
<!-- <div class="addWrap iphone eleType_cont" id="listTab_2"> -->
|
||||||
|
<div class="addWrap iphone eleType_cont">
|
||||||
<ul class="add_and">
|
<ul class="add_and">
|
||||||
<li>
|
<li>
|
||||||
<p class="number">01</p>
|
<p class="number">01</p>
|
||||||
@ -140,49 +141,95 @@ function moveTab(type){
|
|||||||
</div> <!-- // 네이버 주소록을 이용하여 등록-->
|
</div> <!-- // 네이버 주소록을 이용하여 등록-->
|
||||||
<!-- 핸드폰 VCF파일로 변환하여 등록 -->
|
<!-- 핸드폰 VCF파일로 변환하여 등록 -->
|
||||||
<div class="enroll_cont" id="tab6_2">
|
<div class="enroll_cont" id="tab6_2">
|
||||||
<div class="addWrap vcf">
|
<ul class="adr_depth3">
|
||||||
<ul class="add_and">
|
<li class="tab active"><button type="button" onclick="listTab(this,'2');">갤럭시</button></li>
|
||||||
<li>
|
<li class="tab"><button type="button" onclick="listTab(this,'3');">아이폰</button></li>
|
||||||
<p class="number">01</p>
|
</ul>
|
||||||
<p class="txt">휴대폰 <strong>연락처 앱</strong> 선택</p>
|
<div class="addWrap list_cont current galexy" id="listTab_2">
|
||||||
<img src="/publish/images/content/add_vcf_img01.png"/>
|
<ul class="add_and">
|
||||||
</li>
|
<li>
|
||||||
<li>
|
<p class="number">01</p>
|
||||||
<p class="number">02</p>
|
<p class="txt">휴대폰 <strong>연락처 앱</strong> 선택</p>
|
||||||
<p>왼쪽 메뉴 클릭 후<br/><strong>연락처 관리 선택</strong></p>
|
<img src="/publish/images/content/add_vcf_img01.png" />
|
||||||
<img src="/publish/images/content/add_vcf_img02.png"/>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
<li>
|
<p class="number">02</p>
|
||||||
<p class="number">03</p>
|
<p>왼쪽 메뉴 클릭 후<br /><strong>연락처 관리 선택</strong></p>
|
||||||
<p>연락처 관리에서 <strong>연락처</strong><br/><strong>가져오기/내보내기</strong> 선택</p>
|
<img src="/publish/images/content/add_vcf_img02.png" />
|
||||||
<img src="/publish/images/content/add_vcf_img03.png"/>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
<li>
|
<p class="number">03</p>
|
||||||
<p class="number">04</p>
|
<p>연락처 관리에서 <strong>연락처</strong><br /><strong>가져오기/내보내기</strong> 선택</p>
|
||||||
<p class="txt"><strong>연락처 내보내기</strong> 선택</p>
|
<img src="/publish/images/content/add_vcf_img03.png" />
|
||||||
<img src="/publish/images/content/add_vcf_img04.png"/>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
<li>
|
<p class="number">04</p>
|
||||||
<p class="number">05</p>
|
<p class="txt"><strong>연락처 내보내기</strong> 선택</p>
|
||||||
<p><strong>내장메모리</strong> 선택 후<br/><strong>핸드폰과 PC 연결</strong></p>
|
<img src="/publish/images/content/add_vcf_img04.png" />
|
||||||
<img src="/publish/images/content/add_vcf_img05.png"/>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
<li>
|
<p class="number">05</p>
|
||||||
<p class="number">06</p>
|
<p><strong>내장메모리</strong> 선택 후<br /><strong>핸드폰과 PC 연결</strong></p>
|
||||||
<p><strong>내 PC</strong>에서<br/><strong>본인 핸드폰 기종</strong> 선택</p>
|
<img src="/publish/images/content/add_vcf_img05.png" />
|
||||||
<img src="/publish/images/content/add_vcf_img06.png"/>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
<li>
|
<p class="number">06</p>
|
||||||
<p class="number">07</p>
|
<p><strong>내 PC</strong>에서<br /><strong>본인 핸드폰 기종</strong> 선택</p>
|
||||||
<p><strong>연락처(VCF) 파일</strong> 선택 후<br/>PC 복사(Ctrl+C/Ctrl+V),<br>드래그앤드롭)</p>
|
<img src="/publish/images/content/add_vcf_img06.png" />
|
||||||
<img src="/publish/images/content/add_vcf_img07.png"/>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
</ul>
|
<p class="number">07</p>
|
||||||
<div class="btnWrap">
|
<p><strong>연락처(VCF) 파일</strong> 선택 후<br />PC 복사(Ctrl+C/Ctrl+V),<br>드래그앤드롭)</p>
|
||||||
<button type="button" onclick="moveTab('addrApply'); return false;">주소록 입력 무료대행</button>
|
<img src="/publish/images/content/add_vcf_img07.png" />
|
||||||
<button type="button" onclick="moveTab('addr'); return false;">주소록 관리 바로가기</button>
|
</li>
|
||||||
</div>
|
</ul>
|
||||||
</div>
|
<div class="btnWrap">
|
||||||
|
<button type="button" onclick="moveTab('addrApply'); return false;">주소록 입력 무료대행</button>
|
||||||
|
<button type="button" onclick="moveTab('addr'); return false;">주소록 관리 바로가기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="addWrap list_cont iphone vCard" id="listTab_3">
|
||||||
|
<ul class="add_and">
|
||||||
|
<li>
|
||||||
|
<p class="number">01</p>
|
||||||
|
<p class="txt">
|
||||||
|
<strong>iCloud.com</strong> 접속 후<br> <strong>Apple 계정</strong>으로 로그인
|
||||||
|
</p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img01.png" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="number">02</p>
|
||||||
|
<p><strong>‘연락처’</strong> 앱 선택 및 실행 </p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img02.png" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="number">03</p>
|
||||||
|
<p><strong>모든 연락처</strong> 선택</p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img03.png" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="number">04</p>
|
||||||
|
<p class="txt"><strong>vCard</strong> 내보내기</p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img04.png" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="number">05</p>
|
||||||
|
<p><strong>다운로드 폴더</strong>에<br><strong>iCloud vCards</strong> 파일로 저장</p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img05.png" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="number">06</p>
|
||||||
|
<p><strong>연락처(vCards)</strong>파일 선택 후<br>
|
||||||
|
<strong>PC 바탕화면</strong>에 <br>
|
||||||
|
<strong>복사/붙여넣기</strong>(Ctrl+C/Ctrl+V)</p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img06.png" />
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="btnWrap">
|
||||||
|
<button type="button" onclick="moveTab('addrApply'); return false;">주소록 입력 무료대행</button>
|
||||||
|
<button type="button" onclick="moveTab('addr'); return false;">주소록 관리 바로가기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div><!--// 핸드폰 VCF파일로 변환하여 등록 -->
|
</div><!--// 핸드폰 VCF파일로 변환하여 등록 -->
|
||||||
</div><!--// 주소록 관리 - 폰주소록 등록 -->
|
</div><!--// 주소록 관리 - 폰주소록 등록 -->
|
||||||
</div><!--// send top -->
|
</div><!--// send top -->
|
||||||
|
|||||||
164
src/main/webapp/WEB-INF/jsp/web/api/apiAtSpec.jsp
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||||
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||||
|
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||||
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
</head>
|
||||||
|
<script language=javascript>
|
||||||
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
// 현재 url 추출
|
||||||
|
/* var url = window.location.pathname;
|
||||||
|
// 현재 url에서 uri만 추출
|
||||||
|
var lastPart = url.split('/').pop();
|
||||||
|
|
||||||
|
|
||||||
|
$('.tabType4 .tab').each(function(index) {
|
||||||
|
var $btn = $(this).children("button");
|
||||||
|
var id = $btn.attr("id");
|
||||||
|
|
||||||
|
// 개발가이드 그룹
|
||||||
|
if (id === 'apiSpec' && /api.*Spec\.do$/.test(lastPart)) {
|
||||||
|
$(this).addClass('active');
|
||||||
|
}
|
||||||
|
// 나머지 기본 처리
|
||||||
|
else if (lastPart.indexOf(id) > -1) {
|
||||||
|
$(this).addClass('active');
|
||||||
|
}
|
||||||
|
}); */
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
hljs.highlightAll();
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
|
||||||
|
.padding_add > p
|
||||||
|
{
|
||||||
|
padding-left: 30px;
|
||||||
|
padding-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.padding_add > div > p
|
||||||
|
{
|
||||||
|
padding-left: 60px;
|
||||||
|
padding-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<!-- content 영역 -->
|
||||||
|
<div class="inner">
|
||||||
|
<!-- send top -->
|
||||||
|
<div class="send_top">
|
||||||
|
|
||||||
|
<c:import url="./top_tepMenu.jsp" /><!--// tab button -->
|
||||||
|
|
||||||
|
<!-- tab button -->
|
||||||
|
<div class="api_guide_cont current">
|
||||||
|
<div class="heading">
|
||||||
|
<h2>REST API 개발 가이드</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!--// sub tab button -->
|
||||||
|
<c:import url="./top_subTepMenu.jsp" />
|
||||||
|
|
||||||
|
<!-- REST API 개발 가이드 > 문자 -->
|
||||||
|
<%-- <div class="api_guide current" id="tab5_1">
|
||||||
|
<div class="list_tab_wrap2 type3">
|
||||||
|
<!-- tab button -->
|
||||||
|
<ul class="list_tab">
|
||||||
|
<li class="tab active"><button type="button" onclick="TabType1(this,'1')">문자보내기</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="TabType1(this,'2')" id="btnEstimate">문자보내기(대량)</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="TabType1(this,'3')" id="btnEstimate3">전송내역조회</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="TabType1(this,'4')" id="btnEstimate4">전송결과조회(상세)</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="TabType1(this,'5')" id="btnEstimate5">발송가능건수</button></li>
|
||||||
|
</ul><!--// tab button -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 문자보내기 -->
|
||||||
|
<div class="fee_cont current" id="tab1_1">
|
||||||
|
<c:import url="./msg/apiSpec_tab1.jsp" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 문자보내기(대량) -->
|
||||||
|
<div class="fee_cont" id="tab1_2">
|
||||||
|
<c:import url="./msg/apiSpec_tab2.jsp" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 전송내역조회 -->
|
||||||
|
<div class="fee_cont" id="tab1_3">
|
||||||
|
<c:import url="./msg/apiSpec_tab3.jsp" />
|
||||||
|
</div>
|
||||||
|
<!-- 전송결과조회(상세) -->
|
||||||
|
<div class="fee_cont" id="tab1_4">
|
||||||
|
<c:import url="./msg/apiSpec_tab4.jsp" />
|
||||||
|
</div>
|
||||||
|
<!-- 발송가능건수 -->
|
||||||
|
<div class="fee_cont" id="tab1_5">
|
||||||
|
<c:import url="./msg/apiSpec_tab5.jsp" />
|
||||||
|
</div>
|
||||||
|
</div> --%>
|
||||||
|
<!-- //REST API 개발 가이드 > 문자 -->
|
||||||
|
|
||||||
|
<!-- REST API 개발 가이드 > 알림톡 -->
|
||||||
|
<div class="api_guide current" id="tab5_1">
|
||||||
|
<div class="list_tab_wrap2 type3">
|
||||||
|
<!-- tab button -->
|
||||||
|
<ul class="list_tab">
|
||||||
|
|
||||||
|
<li class="tab active"><button type="button" onclick="TabType1(this,'1');">채널 ID 조회</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="TabType1(this,'2');">템플릿 ID 조회</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="TabType1(this,'3');">템플릿상세조회</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="TabType1(this,'4');">알림톡 보내기</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="TabType1(this,'5');">전송내역조회</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="TabType1(this,'6');">전송내역조회(상세)</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="TabType1(this,'7');">발송가능건수</button></li>
|
||||||
|
|
||||||
|
</ul><!--// tab button -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 채널 ID 조회 -->
|
||||||
|
<div class="fee_cont current" id="tab1_1">
|
||||||
|
<c:import url="./at/apiSpec_tab1.jsp" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 템플릿 ID 조회 -->
|
||||||
|
<div class="fee_cont" id="tab1_2">
|
||||||
|
<c:import url="./at/apiSpec_tab2.jsp" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 템플릿상세조회 -->
|
||||||
|
<div class="fee_cont" id="tab1_3">
|
||||||
|
<c:import url="./at/apiSpec_tab3.jsp" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 알림톡 보내기 -->
|
||||||
|
<div class="fee_cont" id="tab1_4">
|
||||||
|
<c:import url="./at/apiSpec_tab4.jsp" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 전송내역조회 -->
|
||||||
|
<div class="fee_cont" id="tab1_5">
|
||||||
|
<c:import url="./at/apiSpec_tab6.jsp" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 전송내역조회(상세) -->
|
||||||
|
<div class="fee_cont" id="tab1_6">
|
||||||
|
<c:import url="./at/apiSpec_tab7.jsp" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 발송가능건수 -->
|
||||||
|
<div class="fee_cont" id="tab1_7">
|
||||||
|
<c:import url="./at/apiSpec_tab8.jsp" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- //REST API 개발 가이드 > 알림톡 -->
|
||||||
|
</div>
|
||||||
|
</div><!--// send top -->
|
||||||
|
</div>
|
||||||
111
src/main/webapp/WEB-INF/jsp/web/api/apiFtSpec.jsp
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||||
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||||
|
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||||
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
</head>
|
||||||
|
<script language=javascript>
|
||||||
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
// 현재 url 추출
|
||||||
|
/* var url = window.location.pathname;
|
||||||
|
// 현재 url에서 uri만 추출
|
||||||
|
var lastPart = url.split('/').pop();
|
||||||
|
|
||||||
|
|
||||||
|
$('.tabType4 .tab').each(function(index) {
|
||||||
|
var $btn = $(this).children("button");
|
||||||
|
var id = $btn.attr("id");
|
||||||
|
|
||||||
|
// 개발가이드 그룹
|
||||||
|
if (id === 'apiSpec' && /api.*Spec\.do$/.test(lastPart)) {
|
||||||
|
$(this).addClass('active');
|
||||||
|
}
|
||||||
|
// 나머지 기본 처리
|
||||||
|
else if (lastPart.indexOf(id) > -1) {
|
||||||
|
$(this).addClass('active');
|
||||||
|
}
|
||||||
|
}); */
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
hljs.highlightAll();
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
|
||||||
|
.padding_add > p
|
||||||
|
{
|
||||||
|
padding-left: 30px;
|
||||||
|
padding-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.padding_add > div > p
|
||||||
|
{
|
||||||
|
padding-left: 60px;
|
||||||
|
padding-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<!-- content 영역 -->
|
||||||
|
<div class="inner">
|
||||||
|
<!-- send top -->
|
||||||
|
<div class="send_top">
|
||||||
|
|
||||||
|
<c:import url="./top_tepMenu.jsp" /><!--// tab button -->
|
||||||
|
|
||||||
|
<!-- tab button -->
|
||||||
|
<div class="api_guide_cont current">
|
||||||
|
<div class="heading">
|
||||||
|
<h2>REST API 개발 가이드</h2>
|
||||||
|
</div>
|
||||||
|
<!--// sub tab button -->
|
||||||
|
<c:import url="./top_subTepMenu.jsp" />
|
||||||
|
<!-- REST API 개발 가이드 > 알림톡 -->
|
||||||
|
<div class="api_guide current" id="tab5_1">
|
||||||
|
<div class="list_tab_wrap2 type3">
|
||||||
|
<!-- tab button -->
|
||||||
|
<ul class="list_tab">
|
||||||
|
|
||||||
|
<li class="tab active"><button type="button" onclick="TabType1(this,'1');">채널 ID 조회</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="TabType1(this,'2');">친구톡 보내기</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="TabType1(this,'3');">전송내역조회</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="TabType1(this,'4');">전송내역조회(상세)</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="TabType1(this,'5');">발송가능건수</button></li>
|
||||||
|
|
||||||
|
</ul><!--// tab button -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 채널 ID 조회 -->
|
||||||
|
<div class="fee_cont current" id="tab1_1">
|
||||||
|
<c:import url="./ft/apiSpec_tab1.jsp" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 알림톡 보내기 -->
|
||||||
|
<div class="fee_cont" id="tab1_2">
|
||||||
|
<c:import url="./ft/apiSpec_tab2.jsp" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 전송내역조회 -->
|
||||||
|
<div class="fee_cont" id="tab1_3">
|
||||||
|
<c:import url="./ft/apiSpec_tab3.jsp" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 전송내역조회(상세) -->
|
||||||
|
<div class="fee_cont" id="tab1_4">
|
||||||
|
<c:import url="./ft/apiSpec_tab4.jsp" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 발송가능건수 -->
|
||||||
|
<div class="fee_cont" id="tab1_5">
|
||||||
|
<c:import url="./ft/apiSpec_tab5.jsp" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- //REST API 개발 가이드 > 알림톡 -->
|
||||||
|
</div>
|
||||||
|
</div><!--// send top -->
|
||||||
|
</div>
|
||||||
@ -2,11 +2,21 @@
|
|||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||||
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
</head>
|
||||||
<script language=javascript>
|
<script language=javascript>
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
$('.topBtn').click(function(){
|
||||||
|
|
||||||
|
location.href=$(this).data('info');
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
hljs.highlightAll();
|
||||||
</script>
|
</script>
|
||||||
<style>
|
<style>
|
||||||
|
|
||||||
@ -25,6 +35,7 @@ $(document).ready(function(){
|
|||||||
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<!-- content 영역 -->
|
<!-- content 영역 -->
|
||||||
<div class="inner">
|
<div class="inner">
|
||||||
<!-- send top -->
|
<!-- send top -->
|
||||||
@ -33,47 +44,54 @@ $(document).ready(function(){
|
|||||||
<c:import url="./top_tepMenu.jsp" /><!--// tab button -->
|
<c:import url="./top_tepMenu.jsp" /><!--// tab button -->
|
||||||
|
|
||||||
<!-- tab button -->
|
<!-- tab button -->
|
||||||
<div class="api_guide_cont current" id="tab5_1">
|
<div class="api_guide_cont current">
|
||||||
<div class="heading">
|
<div class="heading">
|
||||||
<h2>REST API 설명</h2>
|
<h2>REST API 개발 가이드</h2>
|
||||||
</div>
|
|
||||||
<div class="pay_tab_wrap">
|
|
||||||
<!-- tab button -->
|
|
||||||
<ul class="tabType1">
|
|
||||||
<li class="tab active"><button type="button" onclick="TabType1(this,'1')">문자보내기</button></li>
|
|
||||||
<li class="tab"><button type="button" onclick="TabType1(this,'2')" id="btnEstimate">문자보내기(대량)</button></li>
|
|
||||||
<li class="tab"><button type="button" onclick="TabType1(this,'3')" id="btnEstimate3">전송내역조회</button></li>
|
|
||||||
<li class="tab"><button type="button" onclick="TabType1(this,'4')" id="btnEstimate4">전송결과조회(상세)</button></li>
|
|
||||||
<li class="tab"><button type="button" onclick="TabType1(this,'5')" id="btnEstimate5">발송가능건수</button></li>
|
|
||||||
</ul><!--// tab button -->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- 문자보내기 -->
|
|
||||||
<!-- 문자보내기 -->
|
|
||||||
<!-- 문자보내기 -->
|
|
||||||
<div class="fee_cont current" id="tab1_1">
|
|
||||||
<c:import url="./apiSpec_tab1.jsp" />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- 문자보내기(대량) -->
|
|
||||||
<!-- 문자보내기(대량) -->
|
|
||||||
<!-- 문자보내기(대량) -->
|
|
||||||
<div class="fee_cont" id="tab1_2">
|
|
||||||
<c:import url="./apiSpec_tab2.jsp" />
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 전송내역조회 -->
|
<!--// sub tab button -->
|
||||||
<div class="fee_cont" id="tab1_3">
|
<c:import url="./top_subTepMenu.jsp" />
|
||||||
<c:import url="./apiSpec_tab3.jsp" />
|
|
||||||
</div>
|
<!-- REST API 개발 가이드 > 문자 -->
|
||||||
<!-- 전송결과조회(상세) -->
|
<div class="api_guide current" id="tab5_1">
|
||||||
<div class="fee_cont" id="tab1_4">
|
<div class="list_tab_wrap2 type3">
|
||||||
<c:import url="./apiSpec_tab4.jsp" />
|
<!-- tab button -->
|
||||||
</div>
|
<ul class="list_tab">
|
||||||
<!-- 발송가능건수 -->
|
<li class="tab active"><button type="button" onclick="TabType1(this,'1')">문자보내기</button></li>
|
||||||
<div class="fee_cont" id="tab1_5">
|
<li class="tab"><button type="button" onclick="TabType1(this,'2')" id="btnEstimate">문자보내기(대량)</button></li>
|
||||||
<c:import url="./apiSpec_tab5.jsp" />
|
<li class="tab"><button type="button" onclick="TabType1(this,'3')" id="btnEstimate3">전송내역조회</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="TabType1(this,'4')" id="btnEstimate4">전송결과조회(상세)</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="TabType1(this,'5')" id="btnEstimate5">발송가능건수</button></li>
|
||||||
|
</ul><!--// tab button -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 문자보내기 -->
|
||||||
|
<div class="fee_cont current" id="tab1_1">
|
||||||
|
<c:import url="./msg/apiSpec_tab1.jsp" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 문자보내기(대량) -->
|
||||||
|
<div class="fee_cont" id="tab1_2">
|
||||||
|
<c:import url="./msg/apiSpec_tab2.jsp" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 전송내역조회 -->
|
||||||
|
<div class="fee_cont" id="tab1_3">
|
||||||
|
<c:import url="./msg/apiSpec_tab3.jsp" />
|
||||||
|
</div>
|
||||||
|
<!-- 전송결과조회(상세) -->
|
||||||
|
<div class="fee_cont" id="tab1_4">
|
||||||
|
<c:import url="./msg/apiSpec_tab4.jsp" />
|
||||||
|
</div>
|
||||||
|
<!-- 발송가능건수 -->
|
||||||
|
<div class="fee_cont" id="tab1_5">
|
||||||
|
<c:import url="./msg/apiSpec_tab5.jsp" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- //REST API 개발 가이드 > 문자 -->
|
||||||
|
|
||||||
|
<!-- REST API 개발 가이드 > 알림톡 -->
|
||||||
|
<!-- //REST API 개발 가이드 > 친구톡 -->
|
||||||
</div>
|
</div>
|
||||||
</div><!--// send top -->
|
</div><!--// send top -->
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -242,7 +242,7 @@ function fn_reg_user_4_apikey(){
|
|||||||
var form = document.checkForm;
|
var form = document.checkForm;
|
||||||
var data = new FormData(form);
|
var data = new FormData(form);
|
||||||
|
|
||||||
if(confirm("API 신청하시겠습니까?")) {
|
if(confirm("API를 신청하시겠습니까?")) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: "POST",
|
type: "POST",
|
||||||
url: "/uss/ion/apikey/UserAPIInsertAPIKEYAjax.do",
|
url: "/uss/ion/apikey/UserAPIInsertAPIKEYAjax.do",
|
||||||
@ -299,6 +299,10 @@ function fn_reg_user_4_apikey(){
|
|||||||
<!--신청/관리 내용-->
|
<!--신청/관리 내용-->
|
||||||
<!--API 신청 정보 : 신청 전-->
|
<!--API 신청 정보 : 신청 전-->
|
||||||
<div class="api_admin">
|
<div class="api_admin">
|
||||||
|
<ul class="info">
|
||||||
|
<li>- 서비스 사용 신청 시, 문자 및 카카오톡 연동서비스를 모두 이용하실 수 있습니다.</li>
|
||||||
|
<li>- 관리자 승인 이후 발송 서버 IP를 등록해 주셔야 합니다.</li>
|
||||||
|
</ul>
|
||||||
<div class="admin_title">API 신청 정보</div>
|
<div class="admin_title">API 신청 정보</div>
|
||||||
<div class="tb_wrap_t1">
|
<div class="tb_wrap_t1">
|
||||||
<table class="tType4">
|
<table class="tType4">
|
||||||
|
|||||||
239
src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab1.jsp
Normal file
@ -0,0 +1,239 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
|
||||||
|
pageEncoding="UTF-8"%>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="info">
|
||||||
|
<li>- API를 통해서 채널 ID를 조회할 수 있습니다.</li>
|
||||||
|
<!-- <li>- 발신번호는 문자온 사이트를 통해 사전등록 후 이용하실 수 있습니다.(마이페이지-발신번호 관리 메뉴 이용)</li> -->
|
||||||
|
<!-- <li>- 문자 내용이 "90byte"를 초과하는 경우 장문(LMS)으로 자동 전환됩니다.</li> -->
|
||||||
|
</ul>
|
||||||
|
<div class="re_cont">
|
||||||
|
<!-- Request -->
|
||||||
|
<div class="req_title">Request</div>
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>Request</h4>
|
||||||
|
<table>
|
||||||
|
<caption>API Request Http Method, 프로토콜, HOST, Service Port, Endpoint 정보 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:80%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>Http Method</th>
|
||||||
|
<td>POST</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>프로토콜</th>
|
||||||
|
<td>HTTPS/1.1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>HOST</th>
|
||||||
|
<td>api.munjaon.co.kr</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Service Port</th>
|
||||||
|
<td>443</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Endpoint</th>
|
||||||
|
<td>/api/kakao/inqry/chnlId</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>채널ID 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:45%;">
|
||||||
|
<col style="width:25%">
|
||||||
|
<col style="width:10%">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
<th>필수</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">mberId</span></td>
|
||||||
|
<td>사용자 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">accessKey</span></td>
|
||||||
|
<td>인증용 API Key</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">test_yn</span></td>
|
||||||
|
<td>테스트 데이터 여부 (YS: 성공 테스트, YF: 실패 테스트)</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.</p>
|
||||||
|
<p>※ Content-Type: application/json</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title">[Example]</div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"mberId": "홍길동",
|
||||||
|
|
||||||
|
"accessKey": "XXXXXXXXXXXXXX414050694b953",
|
||||||
|
|
||||||
|
"test_yn": ""
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Request -->
|
||||||
|
|
||||||
|
<!-- Response -->
|
||||||
|
<div class="res_title">Response</div>
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>채널ID 조회 API Response 키 종류 및 설명, 타입 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:60%;">
|
||||||
|
<col style="width:20%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">resultCode</span></td>
|
||||||
|
<td>성공 여부("0" 이외는 실패)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">data</span></td>
|
||||||
|
<td>조회 결과 목록(성공 시 배열, 실패 시 오류 메시지)</td>
|
||||||
|
<td>Array | String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data][i].senderKey</span></td>
|
||||||
|
<td>발신 프로필 SenderKey</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data][i].phoneNumber</span></td>
|
||||||
|
<td>대표 전화번호</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data][i].yellowId</span></td>
|
||||||
|
<td>카카오 채널(옐로아이디)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data][i].frstRegistPnttm</span></td>
|
||||||
|
<td>최초 등록 일시(YYYY-MM-DD HH:mm:ss)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data][i].frstRegisterId</span></td>
|
||||||
|
<td>최초 등록자 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">localDateTime</span></td>
|
||||||
|
<td>서버 처리 일시(ISO-8601)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ JSON 객체로 응답합니다.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_success">O 성공 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
"resultCode": "0",
|
||||||
|
|
||||||
|
"data": [
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"senderKey": "test_sender_key_001",
|
||||||
|
|
||||||
|
"phoneNumber": "02-1234-0000",
|
||||||
|
|
||||||
|
"yellowId": "@test_channel_001",
|
||||||
|
|
||||||
|
"frstRegistPnttm": "2025-09-09 12:44:21",
|
||||||
|
|
||||||
|
"frstRegisterId": "test_id_one"
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"senderKey": "test_sender_key_002",
|
||||||
|
|
||||||
|
"phoneNumber": "02-1234-0001",
|
||||||
|
|
||||||
|
"yellowId": "@test_channel_002",
|
||||||
|
|
||||||
|
"frstRegistPnttm": "2025-09-09 12:44:21",
|
||||||
|
|
||||||
|
"frstRegisterId": "test_id_tow"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
"localDateTime": "2025-09-09T12:44:21.624464"
|
||||||
|
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_fail">X 실패 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre><code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"resultCode": "2099",
|
||||||
|
|
||||||
|
"data": "기타 시스템 오류"
|
||||||
|
|
||||||
|
}
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Response -->
|
||||||
|
</div>
|
||||||
|
<!--// Response-->
|
||||||
|
|
||||||
271
src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab2.jsp
Normal file
@ -0,0 +1,271 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
|
||||||
|
pageEncoding="UTF-8"%>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="info">
|
||||||
|
<li>- 등록된 알림톡 템플릿 목록을 조회할 수 있습니다.</li>
|
||||||
|
<li>- SenderKey별로 승인된 템플릿만 조회됩니다.</li>
|
||||||
|
<li>- 템플릿 상태(등록완료, 승인대기 등)를 확인할 수 있습니다.</li>
|
||||||
|
</ul>
|
||||||
|
<div class="re_cont">
|
||||||
|
<!-- Request -->
|
||||||
|
<div class="req_title">Request</div>
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>Request</h4>
|
||||||
|
<table>
|
||||||
|
<caption>API Request Http Method, 프로토콜, HOST, Service Port, Endpoint 정보 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:80%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>Http Method</th>
|
||||||
|
<td>POST</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>프로토콜</th>
|
||||||
|
<td>HTTPS/1.1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>HOST</th>
|
||||||
|
<td>api.munjaon.co.kr</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Service Port</th>
|
||||||
|
<td>443</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Endpoint</th>
|
||||||
|
<td>/api/kakao/inqry/templates/list</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>템플릿 목록 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:45%;">
|
||||||
|
<col style="width:25%">
|
||||||
|
<col style="width:10%">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
<th>필수</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">mberId</span></td>
|
||||||
|
<td>사용자 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">accessKey</span></td>
|
||||||
|
<td>인증용 API Key</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">senderKey</span></td>
|
||||||
|
<td>발신 프로필 SenderKey</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">test_yn</span></td>
|
||||||
|
<td>테스트 데이터 여부 (YS: 성공 테스트, YF: 실패 테스트)</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.</p>
|
||||||
|
<p>※ Content-Type: application/json</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title">[Example]</div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"mberId": "홍길동",
|
||||||
|
|
||||||
|
"accessKey": "XXXXXXXXXXXXXX414050694b953",
|
||||||
|
|
||||||
|
"senderKey": "XXXXXXXXXXXXXX669143473b1af",
|
||||||
|
|
||||||
|
"test_yn": ""
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Request -->
|
||||||
|
|
||||||
|
<!-- Response -->
|
||||||
|
<div class="res_title">Response</div>
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>템플릿 목록 조회 API Response 키 종류 및 설명, 타입 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:60%;">
|
||||||
|
<col style="width:20%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">resultCode</span></td>
|
||||||
|
<td>성공 여부("0" 이외는 실패)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">data</span></td>
|
||||||
|
<td>조회 결과 목록(성공 시 배열, 실패 시 오류 메시지)</td>
|
||||||
|
<td>Array | String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data][i].senderKey</span></td>
|
||||||
|
<td>발신 프로필 SenderKey</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data][i].templateCode</span></td>
|
||||||
|
<td>템플릿 코드</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data][i].templateName</span></td>
|
||||||
|
<td>템플릿 명</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data][i].createdAt</span></td>
|
||||||
|
<td>템플릿 생성 일시</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data][i].modifiedAt</span></td>
|
||||||
|
<td>템플릿 수정 일시</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data][i].serviceStatus</span></td>
|
||||||
|
<td>서비스 상태(등록완료, 승인대기 등)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">localDateTime</span></td>
|
||||||
|
<td>서버 처리 일시(ISO-8601)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ JSON 객체로 응답합니다.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_success">O 성공 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
"resultCode": "0",
|
||||||
|
|
||||||
|
"data": [
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"senderKey": "test_sender_key_001",
|
||||||
|
|
||||||
|
"templateCode": "TEST_TEMPLATE_001",
|
||||||
|
|
||||||
|
"templateName": "테스트 템플릿 001",
|
||||||
|
|
||||||
|
"createdAt": "2025-01-01 10:00:00",
|
||||||
|
|
||||||
|
"modifiedAt": "2025-01-01 10:00:00",
|
||||||
|
|
||||||
|
"serviceStatus": "REG(등록완료)"
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"senderKey": "test_sender_key_001",
|
||||||
|
|
||||||
|
"templateCode": "TEST_TEMPLATE_002",
|
||||||
|
|
||||||
|
"templateName": "테스트 템플릿 002",
|
||||||
|
|
||||||
|
"createdAt": "2025-01-01 11:00:00",
|
||||||
|
|
||||||
|
"modifiedAt": "2025-01-01 11:00:00",
|
||||||
|
|
||||||
|
"serviceStatus": "REG(등록완료)"
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"senderKey": "test_sender_key_002",
|
||||||
|
|
||||||
|
"templateCode": "TEST_TEMPLATE_003",
|
||||||
|
|
||||||
|
"templateName": "테스트 템플릿 003",
|
||||||
|
|
||||||
|
"createdAt": "2025-01-01 12:00:00",
|
||||||
|
|
||||||
|
"modifiedAt": "2025-01-01 12:00:00",
|
||||||
|
|
||||||
|
"serviceStatus": "PENDING(승인대기)"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
"localDateTime": "2025-09-09T14:18:38.445175"
|
||||||
|
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_fail">X 실패 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre><code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"resultCode": "4010",
|
||||||
|
|
||||||
|
"data": "인증 정보가 올바르지 않습니다.(mberId/accessKey)"
|
||||||
|
|
||||||
|
}
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Response -->
|
||||||
|
</div>
|
||||||
|
<!--// Response-->
|
||||||
687
src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab3.jsp
Normal file
@ -0,0 +1,687 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
|
||||||
|
pageEncoding="UTF-8"%>
|
||||||
|
|
||||||
|
<ul class="info">
|
||||||
|
<li>- 문자온 사이트 및 API를 통해 전송된 문자 발송내역을 조회할 수 있습니다.</li>
|
||||||
|
<li>- 문자 발송내역은 날짜별로 조회되며, 최근 3개월까지만 조회 가능합니다.</li>
|
||||||
|
<li>- 발신번호별 문자 발송내역 조회 기능은 제공되지 않습니다.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="re_cont">
|
||||||
|
<!--Request-->
|
||||||
|
<div class="req_title">Request</div>
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>Request</h4>
|
||||||
|
<table>
|
||||||
|
<caption>API Request Http Method, 프로토콜, HOST, Service Port
|
||||||
|
정보 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 20%;">
|
||||||
|
<col style="width: 80%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>Http Method</th>
|
||||||
|
<td>POST</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>프로토콜</th>
|
||||||
|
<td>HTTP/1.1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>HOST</th>
|
||||||
|
<td>api.munjaon.co.kr</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Service Port</th>
|
||||||
|
<td>443</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>전송결과 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 20%;">
|
||||||
|
<col style="width: 45%;">
|
||||||
|
<col style="width: 25%">
|
||||||
|
<col style="width: 10%">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
<th>필수</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">mberId</span></td>
|
||||||
|
<td>사용자 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">accessKey</span></td>
|
||||||
|
<td>인증용 API Key</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">senderKey</span></td>
|
||||||
|
<td>발신 프로필 Key</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">templateCode</span></td>
|
||||||
|
<td>템플릿 코드</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="box">
|
||||||
|
<div class="title">[Example]</div>
|
||||||
|
<div class="code_view">
|
||||||
|
<p>{</p>
|
||||||
|
<div class="indent">
|
||||||
|
<p>
|
||||||
|
<span>"mberId"</span>:"홍길동"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"accessKey"</span>:"XXXXXXXXXXXXXX414050694b953"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"senderKey"</span>:"XXXXXXXXXXXXXX669143473b1af"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"templateCode"</span>:"bizp_202503141052XXXXXXXXXXXXXX"
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<p class="l_code">}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// Request-->
|
||||||
|
<!-- Response-->
|
||||||
|
<div class="res_title">Response</div>
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>전송결과 조회 API Response 키 종류 및 설명, 타입 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 20%;">
|
||||||
|
<col style="width: 60%;">
|
||||||
|
<col style="width: 20%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">resultCode</span></td>
|
||||||
|
<td>성공 여부("0" 아니면 실패)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">data</span></td>
|
||||||
|
<td>템플릿 정보 리스트</td>
|
||||||
|
<td>Array</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateCode</span></td>
|
||||||
|
<td>템플릿 코드</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateName</span></td>
|
||||||
|
<td>템플릿 이름</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateMessageType</span></td>
|
||||||
|
<td>템플릿 메시지 유형 <br />(BA:기본형(default), EX:부가정보형, AD:광고추가형, MI:복합형)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateEmphasizeType</span></td>
|
||||||
|
<td>템플릿 강조 유형 <br />(NONE: 선택안함, TEXT: 강조표기형, IMAGE: 이미지형,
|
||||||
|
ITEM_LIST: 아이템리스트형)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateContent</span></td>
|
||||||
|
<td>템플릿 내용</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateExtra</span></td>
|
||||||
|
<td>부가정보</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateAd</span></td>
|
||||||
|
<td>광고성 메시지</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateImageName</span></td>
|
||||||
|
<td>템플릿 이미지 파일명</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateImageUrl</span></td>
|
||||||
|
<td>템플릿 이미지 링크</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateTitle</span></td>
|
||||||
|
<td>템플릿 내용 중 강조 표기할 핵심 정보</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateSubtitle</span></td>
|
||||||
|
<td>강조 표기 보조 문구</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateHeader</span></td>
|
||||||
|
<td>헤더</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].categoryCode</span></td>
|
||||||
|
<td>템플릿 카테고리 코드</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].securityFlag</span></td>
|
||||||
|
<td>보안 템플릿 여부 (true:설정)</td>
|
||||||
|
<td>Boolean</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].inspectionStatus</span></td>
|
||||||
|
<td>검수 상태 (REG: 등록, REQ: 검수요청, REJ: 반려, APR: 승인)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].createdAt</span></td>
|
||||||
|
<td>생성일</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].modifiedAt</span></td>
|
||||||
|
<td>수정일</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].status</span></td>
|
||||||
|
<td>템플릿 상태(D:중지, A:정상, R:대기(발송전))</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].block</span></td>
|
||||||
|
<td>템플릿 차단 여부 (true:차단, false: 해제)</td>
|
||||||
|
<td>Boolean</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].dormant</span></td>
|
||||||
|
<td>템플릿 휴면 여부 (true:휴면, false: 해제)</td>
|
||||||
|
<td>Boolean</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateItemHighlight</span></td>
|
||||||
|
<td>아이템 하이라이트</td>
|
||||||
|
<td>Object</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateItemHighlight.title</span></td>
|
||||||
|
<td>타이틀</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateItemHighlight.description</span></td>
|
||||||
|
<td>상세 설명</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateItemHighlight.imageUrl</span></td>
|
||||||
|
<td>썸네일 이미지 주소</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateItem</span></td>
|
||||||
|
<td>아이템 정보</td>
|
||||||
|
<td>Object</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateItem.list[]</span></td>
|
||||||
|
<td>아이템 리스트</td>
|
||||||
|
<td>Array</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateItem.list[].title</span></td>
|
||||||
|
<td>타이틀</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateItem.list[].description</span></td>
|
||||||
|
<td>디스크립션</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateItem.summary</span></td>
|
||||||
|
<td>아이템 요약 정보</td>
|
||||||
|
<td>Object</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateItem.summary.title</span></td>
|
||||||
|
<td>타이틀</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].templateItem.summary.description</span></td>
|
||||||
|
<td>디스크립션</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- buttons -->
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].buttons[]</span></td>
|
||||||
|
<td>버튼 정보</td>
|
||||||
|
<td>Array</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].buttons[].name</span></td>
|
||||||
|
<td>버튼명</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].buttons[].linkType</span></td>
|
||||||
|
<td>버튼 링크타입 (DS:배송조회, WL:웹링크, AL:앱링크, BK:봇키워드, MD: 메시지전달, AC:
|
||||||
|
채널추가, BC: 상담톡전환, BT: 봇전환, P1: 이미지 보안전송 플러그인, P2: 개인정보이용 플러그인, P3:
|
||||||
|
원클릭 결제 플러그인)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].buttons[].linkAnd</span></td>
|
||||||
|
<td>Android 앱 링크 주소</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].buttons[].linkIos</span></td>
|
||||||
|
<td>IOS 앱 링크 주소</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].buttons[].linkMo</span></td>
|
||||||
|
<td>모바일 웹 링크 주소</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].buttons[].linkPc</span></td>
|
||||||
|
<td>PC 웹 링크 주소</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].buttons[].pluginId</span></td>
|
||||||
|
<td>플러그인 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- quickReplies -->
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].quickReplies[]</span></td>
|
||||||
|
<td>바로연결 정보</td>
|
||||||
|
<td>Array</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].quickReplies[].name</span></td>
|
||||||
|
<td>바로연결명</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].quickReplies[].linkType</span></td>
|
||||||
|
<td>바로연결 링크타입 (WL:웹링크, AL:앱링크, BK:봇키워드, MD: 메시지전달, BC: 상담톡전환,
|
||||||
|
BT: 봇전환)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].quickReplies[].linkAnd</span></td>
|
||||||
|
<td>Android 앱 링크 주소</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].quickReplies[].linkIos</span></td>
|
||||||
|
<td>IOS 앱 링크 주소</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].quickReplies[].linkMo</span></td>
|
||||||
|
<td>모바일 웹 링크 주소</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].quickReplies[].linkPc</span></td>
|
||||||
|
<td>PC 웹 링크 주소</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- comments -->
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].comments[]</span></td>
|
||||||
|
<td>댓글 목록</td>
|
||||||
|
<td>Array</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].comments[].content</span></td>
|
||||||
|
<td>댓글 본문</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].comments[].createdAt</span></td>
|
||||||
|
<td>댓글 생성일</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].comments[].status</span></td>
|
||||||
|
<td>댓글 상태 (REQ:등록, INQ:문의, APR:승인, REJ:반려, REP:답변)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].comments[].userName</span></td>
|
||||||
|
<td>댓글 작성자</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].comments[].attachment</span></td>
|
||||||
|
<td>첨부파일</td>
|
||||||
|
<td>Array</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- attachment 내부 -->
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].comments[].attachment[]</span></td>
|
||||||
|
<td>첨부파일</td>
|
||||||
|
<td>Array</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].comments[].attachment[].originalFileName</span></td>
|
||||||
|
<td>업로드한 파일 이름</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].comments[].attachment[].filePath</span></td>
|
||||||
|
<td>파일 다운로드 경로</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ JSON 객체로 응답합니다.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1">
|
||||||
|
<span class="ex">[Example]</span><span class="ex_success">O 성공
|
||||||
|
예시</span>
|
||||||
|
</div>
|
||||||
|
<div class="code_view">
|
||||||
|
<p>{</p>
|
||||||
|
<div class="indent">
|
||||||
|
<p>
|
||||||
|
<span>"resultCode"</span>:"0"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"data"</span>:[
|
||||||
|
</p>
|
||||||
|
<p>{</p>
|
||||||
|
<div class="indent_t1">
|
||||||
|
<p>
|
||||||
|
<span>"templateCode"</span>: "bizp_20250314105XXXXXXXXXXXXXXX"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"templateName"</span>: "템플릿 명"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"templateMessageType"</span>: "BA"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"templateEmphasizeType"</span>: "TEXT"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"templateContent"</span>: "템플릿 내용 예시"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"templateExtra"</span>: "부가정보"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"templateAd"</span>: "광고성 문구"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"templateImageName"</span>: "template.jpg"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"templateImageUrl"</span>:
|
||||||
|
"https://cdn.example.com/image.jpg"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"templateTitle"</span>: "강조 제목"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"templateSubtitle"</span>: "보조 문구"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"templateHeader"</span>: "템플릿 헤더"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"categoryCode"</span>: "005001"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"securityFlag"</span>: true
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"inspectionStatus"</span>: "REG"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"createdAt"</span>: "2025-06-30 10:30:00"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"modifiedAt"</span>: "2025-07-01 11:00:00"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"status"</span>: "A"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"block"</span>: false
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"dormant"</span>: false
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!-- templateItemHighlight -->
|
||||||
|
<p>
|
||||||
|
,<span>"templateItemHighlight"</span>: {
|
||||||
|
</p>
|
||||||
|
<div class="indent_t2">
|
||||||
|
<p>
|
||||||
|
<span>"title"</span>: "하이라이트 제목"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"description"</span>: "하이라이트 설명"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"imageUrl"</span>: "https://cdn.example.com/thumb.jpg"
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<p>}</p>
|
||||||
|
|
||||||
|
<!-- templateItem -->
|
||||||
|
<p>
|
||||||
|
,<span>"templateItem"</span>: {
|
||||||
|
</p>
|
||||||
|
<div class="indent_t2">
|
||||||
|
<p>
|
||||||
|
<span>"list"</span>: [
|
||||||
|
</p>
|
||||||
|
<div class="indent_t3">
|
||||||
|
<p>{</p>
|
||||||
|
<p>
|
||||||
|
<span>"title"</span>: "아이템 제목"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"description"</span>: "아이템 설명"
|
||||||
|
</p>
|
||||||
|
<p>}</p>
|
||||||
|
</div>
|
||||||
|
<p>],</p>
|
||||||
|
<p>
|
||||||
|
<span>"summary"</span>: {
|
||||||
|
</p>
|
||||||
|
<div class="indent_t3">
|
||||||
|
<p>
|
||||||
|
<span>"title"</span>: "요약 제목"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"description"</span>: "요약 설명"
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<p>}</p>
|
||||||
|
</div>
|
||||||
|
<p>}</p>
|
||||||
|
|
||||||
|
<!-- buttons -->
|
||||||
|
<p>
|
||||||
|
,<span>"buttons"</span>: [
|
||||||
|
</p>
|
||||||
|
<div class="indent_t2">
|
||||||
|
<p>{</p>
|
||||||
|
<p>
|
||||||
|
<span>"name"</span>: "버튼명"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"linkType"</span>: "WL"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"linkAnd"</span>: "https://aos.example.com"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"linkIos"</span>: "https://ios.example.com"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"linkMo"</span>: "https://m.example.com"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"linkPc"</span>: "https://www.example.com"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"pluginId"</span>: "plugin123"
|
||||||
|
</p>
|
||||||
|
<p>}</p>
|
||||||
|
</div>
|
||||||
|
<p>]</p>
|
||||||
|
|
||||||
|
<!-- quickReplies -->
|
||||||
|
<p>
|
||||||
|
,<span>"quickReplies"</span>: [
|
||||||
|
</p>
|
||||||
|
<div class="indent_t2">
|
||||||
|
<p>{</p>
|
||||||
|
<p>
|
||||||
|
<span>"name"</span>: "빠른응답"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"linkType"</span>: "WL"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"linkAnd"</span>: "https://aos.quick.com"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"linkIos"</span>: "https://ios.quick.com"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"linkMo"</span>: "https://m.quick.com"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"linkPc"</span>: "https://www.quick.com"
|
||||||
|
</p>
|
||||||
|
<p>}</p>
|
||||||
|
</div>
|
||||||
|
<p>]</p>
|
||||||
|
|
||||||
|
<!-- comments -->
|
||||||
|
<p>
|
||||||
|
,<span>"comments"</span>: [
|
||||||
|
</p>
|
||||||
|
<div class="indent_t2">
|
||||||
|
<p>{</p>
|
||||||
|
<p>
|
||||||
|
<span>"content"</span>: "댓글 예시입니다."
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"createdAt"</span>: "2025-07-01 10:00:00"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"status"</span>: "REQ"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"userName"</span>: "관리자"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"attachment"</span>: [
|
||||||
|
</p>
|
||||||
|
<div class="indent_t3">
|
||||||
|
<p>{</p>
|
||||||
|
<p>
|
||||||
|
<span>"originalFileName"</span>: "example.pdf"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"filePath"</span>: "/download/example.pdf"
|
||||||
|
</p>
|
||||||
|
<p>}</p>
|
||||||
|
</div>
|
||||||
|
<p>]</p>
|
||||||
|
<p>}</p>
|
||||||
|
</div>
|
||||||
|
<p>]</p>
|
||||||
|
</div>
|
||||||
|
<p class="l_code_t2">}</p>
|
||||||
|
<p>]</p>
|
||||||
|
</div>
|
||||||
|
<p class="l_code">}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1">
|
||||||
|
<span class="ex">[Example]</span><span class="ex_fail">X 실패 예시</span>
|
||||||
|
</div>
|
||||||
|
<div class="code_view">
|
||||||
|
<p>{</p>
|
||||||
|
<div class="indent">
|
||||||
|
<p>
|
||||||
|
<span>"resultCode"</span>:"4099"
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
,<span>"data"</span>:"기타 시스템 오류"
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<p class="l_code">}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// Response-->
|
||||||
|
</div>
|
||||||
307
src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab4.jsp
Normal file
@ -0,0 +1,307 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
|
||||||
|
pageEncoding="UTF-8"%>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="info">
|
||||||
|
<li>- API를 통해서 알림톡을 발송할 수 있습니다.</li>
|
||||||
|
<li>- 사전에 등록된 SenderKey 및 승인된 템플릿을 사용해야 합니다.</li>
|
||||||
|
<li>- 대체문자(subMsgTxt) 발송 여부는 subMsgSendYn으로 제어합니다.</li>
|
||||||
|
</ul>
|
||||||
|
<div class="re_cont">
|
||||||
|
<!-- Request -->
|
||||||
|
<div class="req_title">Request</div>
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>Request</h4>
|
||||||
|
<table>
|
||||||
|
<caption>API Request Http Method, 프로토콜, HOST, Service Port, Endpoint 정보 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:80%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>Http Method</th>
|
||||||
|
<td>POST</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>프로토콜</th>
|
||||||
|
<td>HTTPS/1.1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>HOST</th>
|
||||||
|
<td>api.munjaon.co.kr</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Service Port</th>
|
||||||
|
<td>443</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Endpoint</th>
|
||||||
|
<td>/api/kakao/at/sendMsg</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>알림톡 발송 API Request 키 종류 및 설명, 타입, 필수 여부 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:45%;">
|
||||||
|
<col style="width:25%">
|
||||||
|
<col style="width:10%">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
<th>필수</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">mberId</span></td>
|
||||||
|
<td>사용자 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">accessKey</span></td>
|
||||||
|
<td>인증용 API Key</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">senderKey</span></td>
|
||||||
|
<td>발신 프로필 SenderKey</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">templateCode</span></td>
|
||||||
|
<td>알림톡 템플릿 코드</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">callFrom</span></td>
|
||||||
|
<td>발신자 번호</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">callTo_[i]</span></td>
|
||||||
|
<td>수신자 번호(다건 가능)</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">templateTitle_[i]</span></td>
|
||||||
|
<td>치환용 템플릿 타이틀</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">templateContent_[i]</span></td>
|
||||||
|
<td>치환용 템플릿 내용</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">subMsgSendYn</span></td>
|
||||||
|
<td>대체문자 발송 여부 (Y: 발송, N: 미발송)</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">subMsgTxt_[i]</span></td>
|
||||||
|
<td>대체문자 내용</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">test_yn</span></td>
|
||||||
|
<td>테스트 데이터 여부 (YS: 성공 테스트, YF: 실패 테스트)</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.</p>
|
||||||
|
<p>※ Content-Type: application/json</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title">[Example]</div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"mberId": "홍길동",
|
||||||
|
|
||||||
|
"accessKey": "XXXXXXXXXXXXXX414050694b953",
|
||||||
|
|
||||||
|
"senderKey": "XXXXXXXXXXXXXX669143473b1af",
|
||||||
|
|
||||||
|
"templateCode": "bizp_2025031410525XXXXXXXXXXXXX",
|
||||||
|
|
||||||
|
"callFrom": "010-9341-4986",
|
||||||
|
|
||||||
|
"callTo_1": "01000000000",
|
||||||
|
|
||||||
|
"callTo_2": "01011111111",
|
||||||
|
|
||||||
|
"templateTitle_1": "타이틀 테스트2222",
|
||||||
|
|
||||||
|
"templateTitle_2": "타이틀 테스트2111",
|
||||||
|
|
||||||
|
"templateContent_1": "테스트 홍길동\\n템플릿 내용",
|
||||||
|
|
||||||
|
"templateContent_2": "테스트 홍길동2\\n템플릿 내용",
|
||||||
|
|
||||||
|
"subMsgSendYn": "Y",
|
||||||
|
|
||||||
|
"subMsgTxt_1": "대체문자 발송",
|
||||||
|
|
||||||
|
"subMsgTxt_2": "대체문자 발송2",
|
||||||
|
|
||||||
|
"test_yn": ""
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Request -->
|
||||||
|
|
||||||
|
<!-- Response -->
|
||||||
|
<div class="res_title">Response</div>
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>알림톡 발송 API Response 키 종류 및 설명, 타입 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:60%;">
|
||||||
|
<col style="width:20%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">resultCode</span></td>
|
||||||
|
<td>성공 여부("0" 이외는 실패)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">data</span></td>
|
||||||
|
<td>발송 결과 객체</td>
|
||||||
|
<td>Object</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].resultCode</span></td>
|
||||||
|
<td>성공 여부("0" 이외는 실패)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].msgGroupId</span></td>
|
||||||
|
<td>메시지 그룹 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].successCnt</span></td>
|
||||||
|
<td>성공 건수</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].blockCnt</span></td>
|
||||||
|
<td>수신거부 건수</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].failCnt</span></td>
|
||||||
|
<td>전송 실패 건수</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].msgType</span></td>
|
||||||
|
<td>메시지 타입(AT: 알림톡)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].test_yn</span></td>
|
||||||
|
<td>테스트 여부</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">localDateTime</span></td>
|
||||||
|
<td>서버 처리 일시(ISO-8601)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ JSON 객체로 응답합니다.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_success">O 성공 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
"resultCode": "0",
|
||||||
|
|
||||||
|
"data": {
|
||||||
|
|
||||||
|
"resultCode": "0",
|
||||||
|
|
||||||
|
"msgGroupId": "MSGGID_AT_1757467849001",
|
||||||
|
|
||||||
|
"successCnt": "2",
|
||||||
|
|
||||||
|
"blockCnt": "0",
|
||||||
|
|
||||||
|
"failCnt": "0",
|
||||||
|
|
||||||
|
"msgType": "AT",
|
||||||
|
|
||||||
|
"test_yn": ""
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
"localDateTime": "2025-09-10T10:30:49.001636"
|
||||||
|
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_fail">X 실패 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre><code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"resultCode": "2080",
|
||||||
|
|
||||||
|
"data": "친구톡은 20시 50분부터 익일 08시까지 발송이 제한됩니다."
|
||||||
|
|
||||||
|
}
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Response -->
|
||||||
|
</div>
|
||||||
|
<!--// Response-->
|
||||||
|
</div>
|
||||||
433
src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab6.jsp
Normal file
@ -0,0 +1,433 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
|
||||||
|
pageEncoding="UTF-8"%>
|
||||||
|
|
||||||
|
<ul class="info">
|
||||||
|
<li>- 문자온 사이트 및 API를 통해 전송된 발송내역을 조회할 수 있습니다.</li>
|
||||||
|
<li>- 문자 발송내역은 날짜별로 조회되며, 최근 3개월까지만 조회 가능합니다.</li>
|
||||||
|
<li>- 발신번호별 문자 발송내역 조회 기능은 제공되지 않습니다.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="re_cont">
|
||||||
|
<!--Request-->
|
||||||
|
<div class="req_title">Request</div>
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>Request</h4>
|
||||||
|
<table>
|
||||||
|
<caption>API Request Http Method, 프로토콜, HOST, Service Port 정보 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:80%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>Http Method</th>
|
||||||
|
<td>POST</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>프로토콜</th>
|
||||||
|
<td>HTTPS/1.1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>HOST</th>
|
||||||
|
<td>api.munjaon.co.kr</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Service Port</th>
|
||||||
|
<td>443</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Endpoint</th>
|
||||||
|
<td>/api/inqry/hstry</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>전송결과 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:45%;">
|
||||||
|
<col style="width:25%">
|
||||||
|
<col style="width:10%">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
<th>필수</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">mberId</span></td>
|
||||||
|
<td>사용자 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">accessKey</span></td>
|
||||||
|
<td>인증용 API Key</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">page</span></td>
|
||||||
|
<td>페이지 번호(미입력 시 1)</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">pageSize</span></td>
|
||||||
|
<td>페이지당 출력 개수(미입력 시 기본값 적용)</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">startDate</span></td>
|
||||||
|
<td>시작 일자(yyyyMMdd)</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">endDate</span></td>
|
||||||
|
<td>마감 일자(yyyyMMdd)</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">test_yn</span></td>
|
||||||
|
<td>테스트 데이터 여부</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.</p>
|
||||||
|
<p>※ Content-Type: application/json</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title">[Example]</div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"mberId": "홍길동",
|
||||||
|
|
||||||
|
"accessKey": "XXXXXXXXXXXXXX414050694b953",
|
||||||
|
|
||||||
|
"page": "",
|
||||||
|
|
||||||
|
"pageSize": "",
|
||||||
|
|
||||||
|
"startDate": "",
|
||||||
|
|
||||||
|
"endDate": "",
|
||||||
|
|
||||||
|
"test_yn": ""
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// Request-->
|
||||||
|
|
||||||
|
<!-- Response-->
|
||||||
|
<div class="res_title">Response</div>
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>전송결과 조회 API Response 키 종류 및 설명, 타입 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:60%;">
|
||||||
|
<col style="width:20%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">resultCode</span></td>
|
||||||
|
<td>성공 여부("0" 아니면 실패)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">data</span></td>
|
||||||
|
<td>결과값 객체(성공 : 데이터, 실패 : 메시지)</td>
|
||||||
|
<td>Object | String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].message</span></td>
|
||||||
|
<td>메시지(필요 시)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].next_yn</span></td>
|
||||||
|
<td>다음 페이지 여부(Y/N)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList</span></td>
|
||||||
|
<td>결과값 목록</td>
|
||||||
|
<td>Array<Object></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgGroupId</span></td>
|
||||||
|
<td>메시지 그룹 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgId</span></td>
|
||||||
|
<td>메시지 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgTypeName</span></td>
|
||||||
|
<td>문자 구분명(단문, 장문, 그림)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgType</span></td>
|
||||||
|
<td>메시지 타입(4: 단문, 5: 장문, 6: 그림)</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].callFrom</span></td>
|
||||||
|
<td>발신자 번호</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].callTo</span></td>
|
||||||
|
<td>수신자 번호</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgGroupCnt</span></td>
|
||||||
|
<td>발송 건수</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].scnt</span></td>
|
||||||
|
<td>성공 건수</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].fcnt</span></td>
|
||||||
|
<td>실패 건수</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].wcnt</span></td>
|
||||||
|
<td>대기 건수</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgResult</span></td>
|
||||||
|
<td>발송 결과(성공: S, 실패: F)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].smsTxt</span></td>
|
||||||
|
<td>문자 내용</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].subject</span></td>
|
||||||
|
<td>제목</td>
|
||||||
|
<td>String | null</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].reqdate</span></td>
|
||||||
|
<td>발송 일자(YYYY-MM-DD HH:mm:ss)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].curState</span></td>
|
||||||
|
<td>전송 처리 결과값</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].userId</span></td>
|
||||||
|
<td>사용자 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].regdate</span></td>
|
||||||
|
<td>등록 일자(YYYY-MM-DD HH:mm:ss)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].reserveCYn</span></td>
|
||||||
|
<td>예약 취소 여부(Y/N)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].ttlCnt</span></td>
|
||||||
|
<td>전체 요청 수</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].remainMsgCnt</span></td>
|
||||||
|
<td>남은 문자 건수</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].totMsgCnt</span></td>
|
||||||
|
<td>전체 문자 개수</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ JSON 객체로 응답합니다.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_success">O 성공 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
"resultCode": "0",
|
||||||
|
|
||||||
|
"data": {
|
||||||
|
|
||||||
|
"resultCode": "0",
|
||||||
|
|
||||||
|
"message": null,
|
||||||
|
|
||||||
|
"next_yn": "n",
|
||||||
|
|
||||||
|
"msgGroupId": "MSGGID_0000000000000",
|
||||||
|
|
||||||
|
"objectList": [
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"msgTypeName": "단문(SMS)",
|
||||||
|
|
||||||
|
"msgType": "4",
|
||||||
|
|
||||||
|
"callFrom": "01011112222",
|
||||||
|
|
||||||
|
"callTo": "01011112223",
|
||||||
|
|
||||||
|
"msgGroupCnt": "2",
|
||||||
|
|
||||||
|
"msgGroupId": "MSGGID_0000000013340",
|
||||||
|
|
||||||
|
"msgId": "MSGID_0000000000001",
|
||||||
|
|
||||||
|
"scnt": "2",
|
||||||
|
|
||||||
|
"fcnt": "0",
|
||||||
|
|
||||||
|
"wcnt": "0",
|
||||||
|
|
||||||
|
"msgResult": "S",
|
||||||
|
|
||||||
|
"smsTxt": "문자 내용 단문 예제",
|
||||||
|
|
||||||
|
"subject": null,
|
||||||
|
|
||||||
|
"reqdate": "2023-06-13 17:48:07",
|
||||||
|
|
||||||
|
"curState": "3",
|
||||||
|
|
||||||
|
"userId": "testuser",
|
||||||
|
|
||||||
|
"regdate": "2023-06-13 17:48:07",
|
||||||
|
|
||||||
|
"reserveCYn": "N",
|
||||||
|
|
||||||
|
"ttlCnt": "1",
|
||||||
|
|
||||||
|
"remainMsgCnt": "40",
|
||||||
|
|
||||||
|
"totMsgCnt": "70"
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"msgTypeName": "장문(LMS)",
|
||||||
|
|
||||||
|
"msgType": "5",
|
||||||
|
|
||||||
|
"callFrom": "01011112222",
|
||||||
|
|
||||||
|
"callTo": "01011112223",
|
||||||
|
|
||||||
|
"msgGroupCnt": "1",
|
||||||
|
|
||||||
|
"msgGroupId": "MSGGID_0000000013341",
|
||||||
|
|
||||||
|
"msgId": "MSGID_0000000000002",
|
||||||
|
|
||||||
|
"scnt": "1",
|
||||||
|
|
||||||
|
"fcnt": "0",
|
||||||
|
|
||||||
|
"wcnt": "0",
|
||||||
|
|
||||||
|
"msgResult": "S",
|
||||||
|
|
||||||
|
"smsTxt": "문자 내용 장문 예제",
|
||||||
|
|
||||||
|
"subject": null,
|
||||||
|
|
||||||
|
"reqdate": "2023-06-02 11:46:50",
|
||||||
|
|
||||||
|
"curState": "3",
|
||||||
|
|
||||||
|
"userId": "testuser",
|
||||||
|
|
||||||
|
"regdate": "2023-06-02 11:46:49",
|
||||||
|
|
||||||
|
"reserveCYn": "N",
|
||||||
|
|
||||||
|
"ttlCnt": "1",
|
||||||
|
|
||||||
|
"remainMsgCnt": "40",
|
||||||
|
|
||||||
|
"totMsgCnt": "70"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_fail">X 실패 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"resultCode": "3099",
|
||||||
|
|
||||||
|
"data": "기타 시스템 오류"
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// Response-->
|
||||||
|
</div>
|
||||||
342
src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab7.jsp
Normal file
@ -0,0 +1,342 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
|
||||||
|
pageEncoding="UTF-8"%>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="info">
|
||||||
|
<li>- API를 통해서 메시지 그룹 ID 기준의 상세 이력(개별 건) 목록을 조회할 수 있습니다.</li>
|
||||||
|
</ul>
|
||||||
|
<div class="re_cont">
|
||||||
|
<!-- Request -->
|
||||||
|
<div class="req_title">Request</div>
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>Request</h4>
|
||||||
|
<table>
|
||||||
|
<caption>API Request Http Method, 프로토콜, HOST, Service Port, Endpoint 정보 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:80%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>Http Method</th>
|
||||||
|
<td>POST</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>프로토콜</th>
|
||||||
|
<td>HTTPS/1.1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>HOST</th>
|
||||||
|
<td>api.munjaon.co.kr</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Service Port</th>
|
||||||
|
<td>443</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Endpoint</th>
|
||||||
|
<td>/api/inqry/hstryDetail</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>히스토리 상세 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:45%;">
|
||||||
|
<col style="width:25%">
|
||||||
|
<col style="width:10%">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
<th>필수</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">mberId</span></td>
|
||||||
|
<td>사용자 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">accessKey</span></td>
|
||||||
|
<td>인증용 API Key</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">msgGroupId</span></td>
|
||||||
|
<td>메시지 그룹 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.</p>
|
||||||
|
<p>※ Content-Type: application/json</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title">[Example]</div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"mberId": "홍길동",
|
||||||
|
|
||||||
|
"accessKey": "XXXXXXXXXXXXXX414050694b953",
|
||||||
|
|
||||||
|
"msgGroupId": "MSGGID_XXXXXXX0000063"
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Request -->
|
||||||
|
|
||||||
|
<!-- Response -->
|
||||||
|
<div class="res_title">Response</div>
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>히스토리 상세 조회 API Response 키 종류 및 설명, 타입 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:60%;">
|
||||||
|
<col style="width:20%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">resultCode</span></td>
|
||||||
|
<td>성공 여부("0" 이외는 실패)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">data</span></td>
|
||||||
|
<td>조회 결과 객체</td>
|
||||||
|
<td>Object</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].resultCode</span></td>
|
||||||
|
<td>내부 처리 결과(0: 성공)</td>
|
||||||
|
<td>Number | String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList</span></td>
|
||||||
|
<td>개별 메시지 상세 목록</td>
|
||||||
|
<td>Array<Object></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgGroupId</span></td>
|
||||||
|
<td>메시지 그룹 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgId</span></td>
|
||||||
|
<td>개별 메시지 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].totMsgCnt</span></td>
|
||||||
|
<td>총 발송 건수(그룹 기준)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgType</span></td>
|
||||||
|
<td>메시지 타입 코드(예: 8=AT)</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgTypeName</span></td>
|
||||||
|
<td>메시지 타입명</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgResult</span></td>
|
||||||
|
<td>결과(F: 실패, S: 성공 등)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgGroupCnt</span></td>
|
||||||
|
<td>발송 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].smsTxt</span></td>
|
||||||
|
<td>메시지 내용</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].callFrom</span></td>
|
||||||
|
<td>발신 번호</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].callTo</span></td>
|
||||||
|
<td>수신 번호</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].curState</span></td>
|
||||||
|
<td>현재 상태 코드</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].remainMsgCnt</span></td>
|
||||||
|
<td>잔여 처리 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].reqdate</span></td>
|
||||||
|
<td>요청 일시(YYYY-MM-DD HH:mm:ss)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].regdate</span></td>
|
||||||
|
<td>등록 일시(YYYY-MM-DD HH:mm:ss)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].reserveCYn</span></td>
|
||||||
|
<td>예약 취소 여부(Y/N)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">localDateTime</span></td>
|
||||||
|
<td>서버 처리 일시(ISO-8601)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ JSON 객체로 응답합니다.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_success">O 성공 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
"resultCode": "0",
|
||||||
|
|
||||||
|
"data": {
|
||||||
|
|
||||||
|
"resultCode": 0,
|
||||||
|
|
||||||
|
"objectList": [
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"msgGroupId": "MSGGID_XXXXXXX0000063",
|
||||||
|
|
||||||
|
"msgId": "MSGCID_XXXXXXX00001180",
|
||||||
|
|
||||||
|
"totMsgCnt": "9",
|
||||||
|
|
||||||
|
"msgType": 8,
|
||||||
|
|
||||||
|
"msgTypeName": "알림톡(AT)",
|
||||||
|
|
||||||
|
"msgResult": "F",
|
||||||
|
|
||||||
|
"msgGroupCnt": 1,
|
||||||
|
|
||||||
|
"smsTxt": "test",
|
||||||
|
|
||||||
|
"callFrom": "01093414986",
|
||||||
|
|
||||||
|
"callTo": "01059941669",
|
||||||
|
|
||||||
|
"curState": 3,
|
||||||
|
|
||||||
|
"remainMsgCnt": 0,
|
||||||
|
|
||||||
|
"reqdate": "2025-09-05 11:45:45",
|
||||||
|
|
||||||
|
"regdate": "2025-09-05 11:45:45",
|
||||||
|
|
||||||
|
"reserveCYn": "N"
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"msgGroupId": "MSGGID_XXXXXXX0000063",
|
||||||
|
|
||||||
|
"msgId": "MSGCID_XXXXXXX000001175",
|
||||||
|
|
||||||
|
"totMsgCnt": "9",
|
||||||
|
|
||||||
|
"msgType": 9,
|
||||||
|
|
||||||
|
"msgTypeName": "친구톡(AT)",
|
||||||
|
|
||||||
|
"msgResult": "F",
|
||||||
|
|
||||||
|
"msgGroupCnt": 1,
|
||||||
|
|
||||||
|
"smsTxt": "test",
|
||||||
|
|
||||||
|
"callFrom": "01093414986",
|
||||||
|
|
||||||
|
"callTo": "01098969885",
|
||||||
|
|
||||||
|
"curState": 3,
|
||||||
|
|
||||||
|
"remainMsgCnt": 0,
|
||||||
|
|
||||||
|
"reqdate": "2025-09-05 11:45:45",
|
||||||
|
|
||||||
|
"regdate": "2025-09-05 11:45:45",
|
||||||
|
|
||||||
|
"reserveCYn": "N"
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
"localDateTime": "2025-09-16T10:47:20.4014362"
|
||||||
|
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_fail">X 실패 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre><code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"resultCode": "4099",
|
||||||
|
|
||||||
|
"data": "기타 시스템 오류"
|
||||||
|
|
||||||
|
}
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Response -->
|
||||||
|
</div>
|
||||||
|
<!--// Response-->
|
||||||
303
src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab8.jsp
Normal file
@ -0,0 +1,303 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
|
||||||
|
pageEncoding="UTF-8"%>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="info">
|
||||||
|
<li>- 보유캐시로 발송 가능한 문자의 건수를 단문(SMS), 장문(LMS), 그림(MMS), 알림톡(AT), 친구톡(FT)별로 각각 확인할 수 있습니다.</li>
|
||||||
|
<!-- <li>- 위 문자유형별 발송 가능건수는 개인별로 적용된 단가를 기준으로 산출되며, "첫 결제 이벤트"는 적용되지 않습니다.</li> -->
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="re_cont">
|
||||||
|
<!-- Request -->
|
||||||
|
<div class="req_title">Request</div>
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>Request</h4>
|
||||||
|
<table>
|
||||||
|
<caption>API Request Http Method, 프로토콜, HOST, Service Port, Endpoint 정보 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:80%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>Http Method</th>
|
||||||
|
<td>POST</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>프로토콜</th>
|
||||||
|
<td>HTTPS/1.1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>HOST</th>
|
||||||
|
<td>api.munjaon.co.kr</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Service Port</th>
|
||||||
|
<td>443</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Endpoint</th>
|
||||||
|
<td>/api/inqry/price</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>가격/가능건수 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:45%;">
|
||||||
|
<col style="width:25%">
|
||||||
|
<col style="width:10%">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
<th>필수</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">mberId</span></td>
|
||||||
|
<td>사용자 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">accessKey</span></td>
|
||||||
|
<td>인증용 API Key</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.</p>
|
||||||
|
<p>※ Content-Type: application/json</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title">[Example]</div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"mberId": "홍길동",
|
||||||
|
|
||||||
|
"accessKey": "XXXXXXXXXXXXXX414050694b953"
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Request -->
|
||||||
|
|
||||||
|
<!-- Response -->
|
||||||
|
<div class="res_title">Response</div>
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>가격/가능건수 조회 API Response 키 종류 및 설명, 타입 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:60%;">
|
||||||
|
<col style="width:20%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">resultCode</span></td>
|
||||||
|
<td>성공 여부("0" 이외는 실패)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">data</span></td>
|
||||||
|
<td>조회 결과 객체(성공 시 가격/가능건수 정보)</td>
|
||||||
|
<td>Object | String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].resultCode</span></td>
|
||||||
|
<td>내부 처리 결과("0": 성공)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].message</span></td>
|
||||||
|
<td>메시지(필요 시)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].localDateTime</span></td>
|
||||||
|
<td>서버 처리 일시(ISO-8601)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].shortPrice</span></td>
|
||||||
|
<td>단문(SMS) 단가</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].longPrice</span></td>
|
||||||
|
<td>장문(LMS) 단가</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].picturePrice</span></td>
|
||||||
|
<td>사진(MMS) 단가</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].kakaoAtPrice</span></td>
|
||||||
|
<td>카카오 알림톡 단가</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].kakaoFtPrice</span></td>
|
||||||
|
<td>카카오 친구톡(텍스트) 단가</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].kakaoFtImgPrice</span></td>
|
||||||
|
<td>카카오 친구톡(이미지) 단가</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].kakaoFtWideImgPrice</span></td>
|
||||||
|
<td>카카오 친구톡(와이드 이미지) 단가</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].mberMoney</span></td>
|
||||||
|
<td>회원 보유 금액</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].shortSendPsbltEa</span></td>
|
||||||
|
<td>단문 발송 가능 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].longSendPsbltEa</span></td>
|
||||||
|
<td>장문 발송 가능 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].pictureSendPsbltEa</span></td>
|
||||||
|
<td>사진 발송 가능 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].kakaoAtSendPsbltEa</span></td>
|
||||||
|
<td>알림톡 발송 가능 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].kakaoFtSendPsbltEa</span></td>
|
||||||
|
<td>친구톡(텍스트) 발송 가능 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].kakaoFtImgSendPsbltEa</span></td>
|
||||||
|
<td>친구톡(이미지) 발송 가능 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].kakaoFtWideImgSendPsbltEa</span></td>
|
||||||
|
<td>친구톡(와이드 이미지) 발송 가능 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">localDateTime</span></td>
|
||||||
|
<td>서버 처리 일시(ISO-8601)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ JSON 객체로 응답합니다.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_success">O 성공 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
"resultCode": "0",
|
||||||
|
|
||||||
|
"data": {
|
||||||
|
|
||||||
|
"resultCode": "0",
|
||||||
|
|
||||||
|
"message": "",
|
||||||
|
|
||||||
|
"localDateTime": "2025-09-16T11:06:40.2556646",
|
||||||
|
|
||||||
|
"shortPrice": 18.0,
|
||||||
|
|
||||||
|
"longPrice": 50.0,
|
||||||
|
|
||||||
|
"picturePrice": 90.0,
|
||||||
|
|
||||||
|
"kakaoAtPrice": 6.9,
|
||||||
|
|
||||||
|
"kakaoFtPrice": 13.8,
|
||||||
|
|
||||||
|
"kakaoFtImgPrice": 19.9,
|
||||||
|
|
||||||
|
"kakaoFtWideImgPrice": 22.9,
|
||||||
|
|
||||||
|
"mberMoney": 6549661.26,
|
||||||
|
|
||||||
|
"shortSendPsbltEa": 363870,
|
||||||
|
|
||||||
|
"longSendPsbltEa": 130993,
|
||||||
|
|
||||||
|
"pictureSendPsbltEa": 72774,
|
||||||
|
|
||||||
|
"kakaoAtSendPsbltEa": 949226,
|
||||||
|
|
||||||
|
"kakaoFtSendPsbltEa": 474613,
|
||||||
|
|
||||||
|
"kakaoFtImgSendPsbltEa": 329128,
|
||||||
|
|
||||||
|
"kakaoFtWideImgSendPsbltEa": 286011
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
"localDateTime": "2025-09-16T11:06:40.2556646"
|
||||||
|
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_fail">X 실패 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre><code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"resultCode": "3099",
|
||||||
|
|
||||||
|
"data": "기타 시스템 오류"
|
||||||
|
|
||||||
|
}
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Response -->
|
||||||
|
</div>
|
||||||
|
<!--// Response-->
|
||||||
@ -9,7 +9,8 @@ $(document).ready(function(){
|
|||||||
$('.download_btn').click(function(){
|
$('.download_btn').click(function(){
|
||||||
// click tag에 data-info="" 값 가져옴
|
// click tag에 data-info="" 값 가져옴
|
||||||
var type = $(this).data('info');
|
var type = $(this).data('info');
|
||||||
var downUrl = "<c:out value='/sample_mjon/type_샘플_예제.zip' />";
|
// var downUrl = "<c:out value='/sample_mjon/type_샘플_예제.zip' />";
|
||||||
|
var downUrl = "<c:out value='/sample_mjon/type_샘플_예제_r3.zip' />";
|
||||||
downUrl = downUrl.replace('type', type);
|
downUrl = downUrl.replace('type', type);
|
||||||
location.href = downUrl;
|
location.href = downUrl;
|
||||||
});
|
});
|
||||||
@ -31,268 +32,562 @@ $(document).ready(function(){
|
|||||||
<h2>예제 다운로드</h2>
|
<h2>예제 다운로드</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--예제 다운로드 내용-->
|
|
||||||
<div class="api_download">
|
<div class="pay_tab_wrap">
|
||||||
<ul class="info">
|
<ul class="tabType1">
|
||||||
<li>- 아래 예제(JSP, PHP)를 참고하시어 쉽고 편리하게 API를 연동할 수 있습니다.</li>
|
<li class="tab active"><button type="button" onclick="TabType5(this,'1');listTab3(this,'1');$('.list_tab .tab:first-child').addClass('active').siblings().removeClass('active');">문자</button></li>
|
||||||
<li>- JSP, PHP 외 타 예제는 계속해서 업데이트 될 예정입니다.</li>
|
<li class="tab"><button type="button" onclick="TabType5(this,'2');listTab3(this,'7');$('.list_tab .tab:first-child').addClass('active').siblings().removeClass('active');">카카오톡</button></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="list_tab_wrap2 type2">
|
|
||||||
<!-- tab button -->
|
|
||||||
<ul class="list_tab">
|
|
||||||
<li class="tab active"><button type="button" onclick="listTab3(this,'1');">JSP</button>
|
|
||||||
</li>
|
|
||||||
<li class="tab"><button type="button" onclick="listTab3(this,'2');">PHP</button>
|
|
||||||
</li><!--
|
|
||||||
<li class="tab"><button type="button" onclick="listTab3(this,'3');">ASP</button>
|
|
||||||
</li>
|
|
||||||
<li class="tab"><button type="button" onclick="listTab3(this,'4');">.NET</button>
|
|
||||||
</li>
|
|
||||||
<li class="tab"><button type="button" onclick="listTab3(this,'5');">AOS</button>
|
|
||||||
</li>
|
|
||||||
<li class="tab"><button type="button" onclick="listTab3(this,'6');">IOS</button>
|
|
||||||
</li>-->
|
|
||||||
</ul>
|
|
||||||
<!--// tab button -->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- JSP 다운로드-->
|
|
||||||
<div class="download_cont current" id="listTab3_1">
|
|
||||||
<div class="box">
|
|
||||||
<div class="text">
|
|
||||||
<h4>JSP Example</h4>
|
|
||||||
<table>
|
|
||||||
<caption>JSP 샘플 파일 설명 테이블</caption>
|
|
||||||
<colgroup>
|
|
||||||
<col style="width:35%;">
|
|
||||||
<col style="width:65%;">
|
|
||||||
</colgroup>
|
|
||||||
<tr>
|
|
||||||
<th>jsp_example_send_msg_r1.jsp</th>
|
|
||||||
<td>문자보내기(여러명에게 동일한문자)</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>jsp_example_send_msgs_r1.jsp</th>
|
|
||||||
<td>문자보내기(여러명에게 다른문자)</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>jsp_example_hstry_r1.jsp</th>
|
|
||||||
<td>전송내역조회</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>jsp_example_hstry_detail_r1.jsp</th>
|
|
||||||
<td>상세전송내역조회</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>jsp_example_select_price_r1.jsp</th>
|
|
||||||
<td>발송가능건수</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="btn_area">
|
|
||||||
<button type="button" class="btnType btnType11 download_btn" data-info="jsp" onclick="return false;">JSP용 예제 다운받기</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!--// JSP 다운로드-->
|
|
||||||
<!--PHP 다운로드-->
|
|
||||||
<div class="download_cont" id="listTab3_2">
|
|
||||||
<div class="box">
|
|
||||||
<div class="text">
|
|
||||||
<h4>PHP Example</h4>
|
|
||||||
<table>
|
|
||||||
<caption>PHP 샘플 파일 설명 테이블</caption>
|
|
||||||
<colgroup>
|
|
||||||
<col style="width:35%;">
|
|
||||||
<col style="width:65%;">
|
|
||||||
</colgroup>
|
|
||||||
<tr>
|
|
||||||
<th>php_example_send_msg_r1.php</th>
|
|
||||||
<td>문자보내기(여러명에게 동일한문자)</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>php_example_send_msgs_r1.php</th>
|
|
||||||
<td>문자보내기(여러명에게 다른문자)</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>php_example_hstry_r1.php</th>
|
|
||||||
<td>전송내역조회</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>php_example_hstry_detail_r1.php</th>
|
|
||||||
<td>상세전송내역조회</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>php_example_select_price_r1.php</th>
|
|
||||||
<td>발송가능건수</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="btn_area">
|
|
||||||
<button type="button" class="btnType btnType11 download_btn" data-info="php" onclick="return false;">PHP용 예제 다운받기</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!--// PHP 다운로드-->
|
|
||||||
<!--ASP 다운로드-->
|
|
||||||
<div class="download_cont" id="listTab3_3">
|
|
||||||
<div class="box">
|
|
||||||
<div class="text">
|
|
||||||
<h4>ASP Example</h4>
|
|
||||||
<table>
|
|
||||||
<caption>ASP 샘플 파일 설명 테이블</caption>
|
|
||||||
<colgroup>
|
|
||||||
<col style="width:35%;">
|
|
||||||
<col style="width:65%;">
|
|
||||||
</colgroup>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="btn_area">
|
|
||||||
<button type="button" class="btnType btnType11">ASP용 예제 다운받기</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!--// ASP 다운로드-->
|
|
||||||
<!--.NET 다운로드-->
|
|
||||||
<div class="download_cont" id="listTab3_4">
|
|
||||||
<div class="box">
|
|
||||||
<div class="text">
|
|
||||||
<h4>.NET Example</h4>
|
|
||||||
<table>
|
|
||||||
<caption>.NET 샘플 파일 설명 테이블</caption>
|
|
||||||
<colgroup>
|
|
||||||
<col style="width:35%;">
|
|
||||||
<col style="width:65%;">
|
|
||||||
</colgroup>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="btn_area">
|
|
||||||
<button type="button" class="btnType btnType11">.NET용 예제 다운받기</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!--// .NET 다운로드-->
|
|
||||||
<!--AOS 다운로드-->
|
|
||||||
<div class="download_cont" id="listTab3_5">
|
|
||||||
<div class="box">
|
|
||||||
<div class="text">
|
|
||||||
<h4>AOS Example</h4>
|
|
||||||
<table>
|
|
||||||
<caption>AOS 샘플 파일 설명 테이블</caption>
|
|
||||||
<colgroup>
|
|
||||||
<col style="width:35%;">
|
|
||||||
<col style="width:65%;">
|
|
||||||
</colgroup>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="btn_area">
|
|
||||||
<button type="button" class="btnType btnType11">AOS용 예제 다운받기</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!--// AOS 다운로드-->
|
|
||||||
<!--IOS 다운로드-->
|
|
||||||
<div class="download_cont" id="listTab3_6">
|
|
||||||
<div class="box">
|
|
||||||
<div class="text">
|
|
||||||
<h4>IOS Example</h4>
|
|
||||||
<table>
|
|
||||||
<caption>IOS 샘플 파일 설명 테이블</caption>
|
|
||||||
<colgroup>
|
|
||||||
<col style="width:35%;">
|
|
||||||
<col style="width:65%;">
|
|
||||||
</colgroup>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>파일명</th>
|
|
||||||
<td>파일 설명</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="btn_area">
|
|
||||||
<button type="button" class="btnType btnType11">IOS용 예제 다운받기</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!--// IOS 다운로드-->
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!--예제 다운로드 내용-->
|
||||||
|
<div class="api_guide current" id="tab5_1">
|
||||||
|
<div class="api_download">
|
||||||
|
<ul class="info">
|
||||||
|
<li>- 아래 예제(JSP, PHP)를 참고하시어 쉽고 편리하게 API를 연동할 수 있습니다.</li>
|
||||||
|
<li>- JSP, PHP 외 타 예제는 계속해서 업데이트 될 예정입니다.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="list_tab_wrap2 type2">
|
||||||
|
<!-- tab button -->
|
||||||
|
<ul class="list_tab">
|
||||||
|
<li class="tab active"><button type="button" onclick="listTab3(this,'1');">JSP</button>
|
||||||
|
</li>
|
||||||
|
<li class="tab"><button type="button" onclick="listTab3(this,'2');">PHP</button>
|
||||||
|
</li><!--
|
||||||
|
<li class="tab"><button type="button" onclick="listTab3(this,'3');">ASP</button>
|
||||||
|
</li>
|
||||||
|
<li class="tab"><button type="button" onclick="listTab3(this,'4');">.NET</button>
|
||||||
|
</li>
|
||||||
|
<li class="tab"><button type="button" onclick="listTab3(this,'5');">AOS</button>
|
||||||
|
</li>
|
||||||
|
<li class="tab"><button type="button" onclick="listTab3(this,'6');">IOS</button>
|
||||||
|
</li>-->
|
||||||
|
</ul>
|
||||||
|
<!--// tab button -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- JSP 다운로드-->
|
||||||
|
<div class="download_cont current" id="listTab3_1">
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>JSP Example</h4>
|
||||||
|
<table>
|
||||||
|
<caption>JSP 샘플 파일 설명 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:35%;">
|
||||||
|
<col style="width:65%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>jsp_example_send_msg_r1.jsp</th>
|
||||||
|
<td>문자보내기(여러명에게 동일한문자)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>jsp_example_send_msgs_r1.jsp</th>
|
||||||
|
<td>문자보내기(여러명에게 다른문자)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>jsp_example_hstry_r1.jsp</th>
|
||||||
|
<td>전송내역조회</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>jsp_example_hstry_detail_r1.jsp</th>
|
||||||
|
<td>상세전송내역조회</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>jsp_example_select_price_r1.jsp</th>
|
||||||
|
<td>발송가능건수</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btn_area">
|
||||||
|
<button type="button" class="btnType btnType11 download_btn" data-info="jsp" onclick="return false;">JSP용 예제 다운받기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// JSP 다운로드-->
|
||||||
|
<!--PHP 다운로드-->
|
||||||
|
<div class="download_cont" id="listTab3_2">
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>PHP Example</h4>
|
||||||
|
<table>
|
||||||
|
<caption>PHP 샘플 파일 설명 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:35%;">
|
||||||
|
<col style="width:65%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>php_example_send_msg_r1.php</th>
|
||||||
|
<td>문자보내기(여러명에게 동일한문자)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>php_example_send_msgs_r1.php</th>
|
||||||
|
<td>문자보내기(여러명에게 다른문자)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>php_example_hstry_r1.php</th>
|
||||||
|
<td>전송내역조회</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>php_example_hstry_detail_r1.php</th>
|
||||||
|
<td>상세전송내역조회</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>php_example_select_price_r1.php</th>
|
||||||
|
<td>발송가능건수</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btn_area">
|
||||||
|
<button type="button" class="btnType btnType11 download_btn" data-info="php" onclick="return false;">PHP용 예제 다운받기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// PHP 다운로드-->
|
||||||
|
<!--ASP 다운로드-->
|
||||||
|
<div class="download_cont" id="listTab3_3">
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>ASP Example</h4>
|
||||||
|
<table>
|
||||||
|
<caption>ASP 샘플 파일 설명 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:35%;">
|
||||||
|
<col style="width:65%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btn_area">
|
||||||
|
<button type="button" class="btnType btnType11">ASP용 예제 다운받기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// ASP 다운로드-->
|
||||||
|
<!--.NET 다운로드-->
|
||||||
|
<div class="download_cont" id="listTab3_4">
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>.NET Example</h4>
|
||||||
|
<table>
|
||||||
|
<caption>.NET 샘플 파일 설명 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:35%;">
|
||||||
|
<col style="width:65%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btn_area">
|
||||||
|
<button type="button" class="btnType btnType11">.NET용 예제 다운받기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// .NET 다운로드-->
|
||||||
|
<!--AOS 다운로드-->
|
||||||
|
<div class="download_cont" id="listTab3_5">
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>AOS Example</h4>
|
||||||
|
<table>
|
||||||
|
<caption>AOS 샘플 파일 설명 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:35%;">
|
||||||
|
<col style="width:65%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btn_area">
|
||||||
|
<button type="button" class="btnType btnType11">AOS용 예제 다운받기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// AOS 다운로드-->
|
||||||
|
<!--IOS 다운로드-->
|
||||||
|
<div class="download_cont" id="listTab3_6">
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>IOS Example</h4>
|
||||||
|
<table>
|
||||||
|
<caption>IOS 샘플 파일 설명 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:35%;">
|
||||||
|
<col style="width:65%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btn_area">
|
||||||
|
<button type="button" class="btnType btnType11">IOS용 예제 다운받기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// IOS 다운로드-->
|
||||||
|
</div>
|
||||||
<!--// 예제 다운로드 내용-->
|
<!--// 예제 다운로드 내용-->
|
||||||
|
</div>
|
||||||
|
<div class="api_guide" id="tab5_2">
|
||||||
|
<div class="api_download">
|
||||||
|
<ul class="info">
|
||||||
|
<li>- 아래 예제(JSP, PHP)를 참고하시어 쉽고 편리하게 API를 연동할 수 있습니다.</li>
|
||||||
|
<li>- JSP, PHP 외 타 예제는 계속해서 업데이트 될 예정입니다.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="list_tab_wrap2 type2">
|
||||||
|
<!-- tab button -->
|
||||||
|
<ul class="list_tab">
|
||||||
|
<li class="tab active"><button type="button" onclick="listTab3(this,'7');">JSP</button>
|
||||||
|
</li>
|
||||||
|
<!-- <li class="tab"><button type="button" onclick="listTab3(this,'8');">ASP</button>
|
||||||
|
</li> -->
|
||||||
|
<li class="tab"><button type="button" onclick="listTab3(this,'9');">PHP</button>
|
||||||
|
</li>
|
||||||
|
<!--<li class="tab"><button type="button" onclick="listTab3(this,'10');">.NET</button>
|
||||||
|
</li>
|
||||||
|
<li class="tab"><button type="button" onclick="listTab3(this,'11');">AOS</button>
|
||||||
|
</li>
|
||||||
|
<li class="tab"><button type="button" onclick="listTab3(this,'12');">IOS</button>
|
||||||
|
</li>-->
|
||||||
|
</ul>
|
||||||
|
<!--// tab button -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- JSP 다운로드-->
|
||||||
|
<div class="download_cont current" id="listTab3_7">
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>JSP Example</h4>
|
||||||
|
<table>
|
||||||
|
<caption>JSP 샘플 파일 설명 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:35%;">
|
||||||
|
<col style="width:65%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>jsp_example_inqry_chnlid_r1.jsp</th>
|
||||||
|
<td>카카오채널조회</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>jsp_example_inqry_templates_list_r1.jsp</th>
|
||||||
|
<td>카카오템플릿조회</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>jsp_example_send_at_r1.jsp</th>
|
||||||
|
<td>카카오알림톡발송</td>
|
||||||
|
</tr>
|
||||||
|
<!-- <tr>
|
||||||
|
<th>jsp_example_send_ft_r1.jsp</th>
|
||||||
|
<td>카카오친구톡발송</td>
|
||||||
|
</tr> -->
|
||||||
|
<tr>
|
||||||
|
<th>jsp_example_hstry_r1.jsp</th>
|
||||||
|
<td>전송내역조회</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>jsp_example_hstry_detail_r1.jsp</th>
|
||||||
|
<td>상세전송내역조회</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>jsp_example_select_price_r1.jsp</th>
|
||||||
|
<td>발송가능건수</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btn_area">
|
||||||
|
<button type="button" class="btnType btnType11 download_btn" data-info="jsp" onclick="return false;">JSP용 예제 다운받기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// JSP 다운로드-->
|
||||||
|
<!--ASP 다운로드-->
|
||||||
|
<div class="download_cont" id="listTab3_8">
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>ASP Example</h4>
|
||||||
|
<table>
|
||||||
|
<caption>ASP 샘플 파일 설명 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:35%;">
|
||||||
|
<col style="width:65%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btn_area">
|
||||||
|
<button type="button" class="btnType btnType11">ASP용 예제 다운받기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// ASP 다운로드-->
|
||||||
|
<!--PHP 다운로드-->
|
||||||
|
<div class="download_cont" id="listTab3_9">
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>PHP Example</h4>
|
||||||
|
<table>
|
||||||
|
<caption>PHP 샘플 파일 설명 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:35%;">
|
||||||
|
<col style="width:65%;">
|
||||||
|
</colgroup>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>php_example_inqry_chnlid_r1.php</th>
|
||||||
|
<td>카카오채널조회</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>php_example_inqry_templates_list_r1.php</th>
|
||||||
|
<td>카카오템플릿조회</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>php_example_send_at_r1.php</th>
|
||||||
|
<td>카카오알림톡발송</td>
|
||||||
|
</tr>
|
||||||
|
<!-- <tr>
|
||||||
|
<th>php_example_send_ft_r1.php</th>
|
||||||
|
<td>카카오친구톡발송</td>
|
||||||
|
</tr> -->
|
||||||
|
<tr>
|
||||||
|
<th>php_example_hstry_r1.php</th>
|
||||||
|
<td>전송내역조회</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>php_example_hstry_detail_r1.php</th>
|
||||||
|
<td>상세전송내역조회</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>php_example_select_price_r1.php</th>
|
||||||
|
<td>발송가능건수</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btn_area">
|
||||||
|
<!-- <button type="button" class="btnType btnType11">PHP용 예제 다운받기</button> -->
|
||||||
|
<button type="button" class="btnType btnType11 download_btn" data-info="php" onclick="return false;">PHP용 예제 다운받기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// PHP 다운로드-->
|
||||||
|
<!--.NET 다운로드-->
|
||||||
|
<div class="download_cont" id="listTab3_10">
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>.NET Example</h4>
|
||||||
|
<table>
|
||||||
|
<caption>.NET 샘플 파일 설명 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:35%;">
|
||||||
|
<col style="width:65%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btn_area">
|
||||||
|
<button type="button" class="btnType btnType11">.NET용 예제 다운받기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// .NET 다운로드-->
|
||||||
|
<!--AOS 다운로드-->
|
||||||
|
<div class="download_cont" id="listTab3_11">
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>AOS Example</h4>
|
||||||
|
<table>
|
||||||
|
<caption>AOS 샘플 파일 설명 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:35%;">
|
||||||
|
<col style="width:65%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btn_area">
|
||||||
|
<button type="button" class="btnType btnType11">AOS용 예제 다운받기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// AOS 다운로드-->
|
||||||
|
<!--IOS 다운로드-->
|
||||||
|
<div class="download_cont" id="listTab3_12">
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>IOS Example</h4>
|
||||||
|
<table>
|
||||||
|
<caption>IOS 샘플 파일 설명 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:35%;">
|
||||||
|
<col style="width:65%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>파일명</th>
|
||||||
|
<td>파일 설명</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btn_area">
|
||||||
|
<button type="button" class="btnType btnType11">IOS용 예제 다운받기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// IOS 다운로드-->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
239
src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab1.jsp
Normal file
@ -0,0 +1,239 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
|
||||||
|
pageEncoding="UTF-8"%>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="info">
|
||||||
|
<li>- API를 통해서 채널 ID를 조회할 수 있습니다.</li>
|
||||||
|
<!-- <li>- 발신번호는 문자온 사이트를 통해 사전등록 후 이용하실 수 있습니다.(마이페이지-발신번호 관리 메뉴 이용)</li> -->
|
||||||
|
<!-- <li>- 문자 내용이 "90byte"를 초과하는 경우 장문(LMS)으로 자동 전환됩니다.</li> -->
|
||||||
|
</ul>
|
||||||
|
<div class="re_cont">
|
||||||
|
<!-- Request -->
|
||||||
|
<div class="req_title">Request</div>
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>Request</h4>
|
||||||
|
<table>
|
||||||
|
<caption>API Request Http Method, 프로토콜, HOST, Service Port, Endpoint 정보 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:80%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>Http Method</th>
|
||||||
|
<td>POST</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>프로토콜</th>
|
||||||
|
<td>HTTPS/1.1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>HOST</th>
|
||||||
|
<td>api.munjaon.co.kr</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Service Port</th>
|
||||||
|
<td>443</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Endpoint</th>
|
||||||
|
<td>/api/kakao/inqry/chnlId</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>채널ID 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:45%;">
|
||||||
|
<col style="width:25%">
|
||||||
|
<col style="width:10%">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
<th>필수</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">mberId</span></td>
|
||||||
|
<td>사용자 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">accessKey</span></td>
|
||||||
|
<td>인증용 API Key</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">test_yn</span></td>
|
||||||
|
<td>테스트 데이터 여부 (YS: 성공 테스트, YF: 실패 테스트)</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.</p>
|
||||||
|
<p>※ Content-Type: application/json</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title">[Example]</div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"mberId": "홍길동",
|
||||||
|
|
||||||
|
"accessKey": "XXXXXXXXXXXXXX414050694b953",
|
||||||
|
|
||||||
|
"test_yn": ""
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Request -->
|
||||||
|
|
||||||
|
<!-- Response -->
|
||||||
|
<div class="res_title">Response</div>
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>채널ID 조회 API Response 키 종류 및 설명, 타입 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:60%;">
|
||||||
|
<col style="width:20%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">resultCode</span></td>
|
||||||
|
<td>성공 여부("0" 이외는 실패)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">data</span></td>
|
||||||
|
<td>조회 결과 목록(성공 시 배열, 실패 시 오류 메시지)</td>
|
||||||
|
<td>Array | String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data][i].senderKey</span></td>
|
||||||
|
<td>발신 프로필 SenderKey</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data][i].phoneNumber</span></td>
|
||||||
|
<td>대표 전화번호</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data][i].yellowId</span></td>
|
||||||
|
<td>카카오 채널(옐로아이디)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data][i].frstRegistPnttm</span></td>
|
||||||
|
<td>최초 등록 일시(YYYY-MM-DD HH:mm:ss)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data][i].frstRegisterId</span></td>
|
||||||
|
<td>최초 등록자 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">localDateTime</span></td>
|
||||||
|
<td>서버 처리 일시(ISO-8601)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ JSON 객체로 응답합니다.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_success">O 성공 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
"resultCode": "0",
|
||||||
|
|
||||||
|
"data": [
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"senderKey": "test_sender_key_001",
|
||||||
|
|
||||||
|
"phoneNumber": "02-1234-0000",
|
||||||
|
|
||||||
|
"yellowId": "@test_channel_001",
|
||||||
|
|
||||||
|
"frstRegistPnttm": "2025-09-09 12:44:21",
|
||||||
|
|
||||||
|
"frstRegisterId": "test_id_one"
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"senderKey": "test_sender_key_002",
|
||||||
|
|
||||||
|
"phoneNumber": "02-1234-0001",
|
||||||
|
|
||||||
|
"yellowId": "@test_channel_002",
|
||||||
|
|
||||||
|
"frstRegistPnttm": "2025-09-09 12:44:21",
|
||||||
|
|
||||||
|
"frstRegisterId": "test_id_tow"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
"localDateTime": "2025-09-09T12:44:21.624464"
|
||||||
|
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_fail">X 실패 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre><code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"resultCode": "2099",
|
||||||
|
|
||||||
|
"data": "기타 시스템 오류"
|
||||||
|
|
||||||
|
}
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Response -->
|
||||||
|
</div>
|
||||||
|
<!--// Response-->
|
||||||
|
|
||||||
326
src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab2.jsp
Normal file
@ -0,0 +1,326 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
|
||||||
|
pageEncoding="UTF-8"%>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="info">
|
||||||
|
<li>- API를 통해서 카카오 친구톡(FT)을 발송할 수 있습니다.</li>
|
||||||
|
<li>- 버튼 타입은 <b>WL(웹링크), AL(앱링크)</b>만 지원합니다.</li>
|
||||||
|
<li>- 대체문자(subMsgTxt) 발송 여부는 subMsgSendYn으로 제어합니다.</li>
|
||||||
|
</ul>
|
||||||
|
<div class="re_cont">
|
||||||
|
<!-- Request -->
|
||||||
|
<div class="req_title">Request</div>
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>Request</h4>
|
||||||
|
<table>
|
||||||
|
<caption>API Request Http Method, 프로토콜, HOST, Service Port, Endpoint 정보 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:80%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>Http Method</th>
|
||||||
|
<td>POST</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>프로토콜</th>
|
||||||
|
<td>HTTPS/1.1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>HOST</th>
|
||||||
|
<td>api.munjaon.co.kr</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Service Port</th>
|
||||||
|
<td>443</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Endpoint</th>
|
||||||
|
<td>/api/kakao/ft/sendMsg</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>친구톡 발송 API Request 키 종류 및 설명, 타입, 필수 여부 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:45%;">
|
||||||
|
<col style="width:25%">
|
||||||
|
<col style="width:10%">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
<th>필수</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">mberId</span></td>
|
||||||
|
<td>사용자 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">accessKey</span></td>
|
||||||
|
<td>인증용 API Key</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">senderKey</span></td>
|
||||||
|
<td>발신 프로필 SenderKey</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">adFlag</span></td>
|
||||||
|
<td>광고 여부 (Y/N)</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">subMsgSendYn</span></td>
|
||||||
|
<td>대체문자 발송 여부 (Y/N)</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">callFrom</span></td>
|
||||||
|
<td>발신자 번호</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">callTo_[i]</span></td>
|
||||||
|
<td>수신자 번호</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">templateContent_[i]</span></td>
|
||||||
|
<td>친구톡 본문</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">templateImage</span></td>
|
||||||
|
<td>친구톡 이미지(PNG,JPG)</td>
|
||||||
|
<td>File</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">subMsgTxt_[i]</span></td>
|
||||||
|
<td>대체문자 내용</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">button</span></td>
|
||||||
|
<td>버튼 JSON 문자열(AL:앱링크, WL:웹링크 지원)</td>
|
||||||
|
<td>String(JSON)</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">test_yn</span></td>
|
||||||
|
<td>테스트 데이터 여부 (YS: 성공 테스트, YF: 실패 테스트)</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.</p>
|
||||||
|
<p>※ Content-Type: application/json</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title">[Example]</div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"mberId": "dudgusw",
|
||||||
|
|
||||||
|
"accessKey": "3429312e6a2c732188d4cc7d15d8a1baa01d8d91",
|
||||||
|
|
||||||
|
"senderKey": "e42e34ee013147720711b4add6d181adbe4ce45f",
|
||||||
|
|
||||||
|
"adFlag": "N",
|
||||||
|
|
||||||
|
"subMsgSendYn": "Y",
|
||||||
|
|
||||||
|
"callFrom": "010-9341-4986",
|
||||||
|
|
||||||
|
"callTo_1": "01083584250",
|
||||||
|
|
||||||
|
"callTo_2": "01083584251",
|
||||||
|
|
||||||
|
"templateContent_1": "친구톡 본문 1",
|
||||||
|
|
||||||
|
"templateContent_2": "친구톡 본문 2",
|
||||||
|
|
||||||
|
"subMsgTxt_1": "대체문자 발송1",
|
||||||
|
|
||||||
|
"subMsgTxt_2": "대체문자 발송2",
|
||||||
|
|
||||||
|
"{ button": [
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"name": "주문조회",
|
||||||
|
|
||||||
|
"linkType": "WL",
|
||||||
|
|
||||||
|
"linkPc": "PC 링크",
|
||||||
|
|
||||||
|
"linkMo": "모바일 링크"
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"name": "앱 열기",
|
||||||
|
|
||||||
|
"linkType": "AL",
|
||||||
|
|
||||||
|
"linkIos": "ios링크",
|
||||||
|
|
||||||
|
"linkAnd": "Android 링크"
|
||||||
|
|
||||||
|
}
|
||||||
|
]}"
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Request -->
|
||||||
|
|
||||||
|
<!-- Response -->
|
||||||
|
<div class="res_title">Response</div>
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>친구톡 발송 API Response 키 종류 및 설명, 타입 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:60%;">
|
||||||
|
<col style="width:20%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
</tr>
|
||||||
|
<thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">resultCode</span></td>
|
||||||
|
<td>성공 여부("0" 이외는 실패)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">data</span></td>
|
||||||
|
<td>발송 결과 객체</td>
|
||||||
|
<td>Object</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].resultCode</span></td>
|
||||||
|
<td>내부 처리 결과("0": 성공)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].msgType</span></td>
|
||||||
|
<td>메시지 타입(FT: 친구톡)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].msgGroupIdList</span></td>
|
||||||
|
<td>발송된 메시지 그룹 ID 목록</td>
|
||||||
|
<td>Array<String></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].successCnt</span></td>
|
||||||
|
<td>성공 건수</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].failCnt</span></td>
|
||||||
|
<td>실패 건수</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">localDateTime</span></td>
|
||||||
|
<td>서버 처리 일시(ISO-8601)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ JSON 객체로 응답합니다.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_success">O 성공 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
"resultCode": "0",
|
||||||
|
|
||||||
|
"data": {
|
||||||
|
|
||||||
|
"resultCode": "0",
|
||||||
|
|
||||||
|
"msgType": "FT",
|
||||||
|
|
||||||
|
"msgGroupIdList": [
|
||||||
|
|
||||||
|
"MSGGID_1758008282543",
|
||||||
|
|
||||||
|
"MSGGID_1758008282543"
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
"successCnt": "2",
|
||||||
|
|
||||||
|
"failCnt": "0"
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
"localDateTime": "2025-09-16T16:38:02.5436925"
|
||||||
|
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_fail">X 실패 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre><code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"resultCode": "4420",
|
||||||
|
|
||||||
|
"data": "버튼 타입은 WL/AL만 지원합니다.(button.linkType)"
|
||||||
|
|
||||||
|
}
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Response -->
|
||||||
|
</div>
|
||||||
|
<!--// Response-->
|
||||||
|
</div>
|
||||||
433
src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab3.jsp
Normal file
@ -0,0 +1,433 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
|
||||||
|
pageEncoding="UTF-8"%>
|
||||||
|
|
||||||
|
<ul class="info">
|
||||||
|
<li>- 문자온 사이트 및 API를 통해 전송된 발송내역을 조회할 수 있습니다.</li>
|
||||||
|
<li>- 문자 발송내역은 날짜별로 조회되며, 최근 3개월까지만 조회 가능합니다.</li>
|
||||||
|
<li>- 발신번호별 문자 발송내역 조회 기능은 제공되지 않습니다.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="re_cont">
|
||||||
|
<!--Request-->
|
||||||
|
<div class="req_title">Request</div>
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>Request</h4>
|
||||||
|
<table>
|
||||||
|
<caption>API Request Http Method, 프로토콜, HOST, Service Port 정보 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:80%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>Http Method</th>
|
||||||
|
<td>POST</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>프로토콜</th>
|
||||||
|
<td>HTTPS/1.1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>HOST</th>
|
||||||
|
<td>api.munjaon.co.kr</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Service Port</th>
|
||||||
|
<td>443</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Endpoint</th>
|
||||||
|
<td>/api/inqry/hstry</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>전송결과 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:45%;">
|
||||||
|
<col style="width:25%">
|
||||||
|
<col style="width:10%">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
<th>필수</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">mberId</span></td>
|
||||||
|
<td>사용자 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">accessKey</span></td>
|
||||||
|
<td>인증용 API Key</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">page</span></td>
|
||||||
|
<td>페이지 번호(미입력 시 1)</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">pageSize</span></td>
|
||||||
|
<td>페이지당 출력 개수(미입력 시 기본값 적용)</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">startDate</span></td>
|
||||||
|
<td>시작 일자(yyyyMMdd)</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">endDate</span></td>
|
||||||
|
<td>마감 일자(yyyyMMdd)</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">test_yn</span></td>
|
||||||
|
<td>테스트 데이터 여부</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_x">X</span></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.</p>
|
||||||
|
<p>※ Content-Type: application/json</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title">[Example]</div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"mberId": "홍길동",
|
||||||
|
|
||||||
|
"accessKey": "XXXXXXXXXXXXXX414050694b953",
|
||||||
|
|
||||||
|
"page": "",
|
||||||
|
|
||||||
|
"pageSize": "",
|
||||||
|
|
||||||
|
"startDate": "",
|
||||||
|
|
||||||
|
"endDate": "",
|
||||||
|
|
||||||
|
"test_yn": ""
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// Request-->
|
||||||
|
|
||||||
|
<!-- Response-->
|
||||||
|
<div class="res_title">Response</div>
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>전송결과 조회 API Response 키 종류 및 설명, 타입 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:60%;">
|
||||||
|
<col style="width:20%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">resultCode</span></td>
|
||||||
|
<td>성공 여부("0" 아니면 실패)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">data</span></td>
|
||||||
|
<td>결과값 객체(성공 : 데이터, 실패 : 메시지)</td>
|
||||||
|
<td>Object | String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].message</span></td>
|
||||||
|
<td>메시지(필요 시)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].next_yn</span></td>
|
||||||
|
<td>다음 페이지 여부(Y/N)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList</span></td>
|
||||||
|
<td>결과값 목록</td>
|
||||||
|
<td>Array<Object></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgGroupId</span></td>
|
||||||
|
<td>메시지 그룹 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgId</span></td>
|
||||||
|
<td>메시지 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgTypeName</span></td>
|
||||||
|
<td>문자 구분명(단문, 장문, 그림)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgType</span></td>
|
||||||
|
<td>메시지 타입(4: 단문, 5: 장문, 6: 그림)</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].callFrom</span></td>
|
||||||
|
<td>발신자 번호</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].callTo</span></td>
|
||||||
|
<td>수신자 번호</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgGroupCnt</span></td>
|
||||||
|
<td>발송 건수</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].scnt</span></td>
|
||||||
|
<td>성공 건수</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].fcnt</span></td>
|
||||||
|
<td>실패 건수</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].wcnt</span></td>
|
||||||
|
<td>대기 건수</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgResult</span></td>
|
||||||
|
<td>발송 결과(성공: S, 실패: F)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].smsTxt</span></td>
|
||||||
|
<td>문자 내용</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].subject</span></td>
|
||||||
|
<td>제목</td>
|
||||||
|
<td>String | null</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].reqdate</span></td>
|
||||||
|
<td>발송 일자(YYYY-MM-DD HH:mm:ss)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].curState</span></td>
|
||||||
|
<td>전송 처리 결과값</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].userId</span></td>
|
||||||
|
<td>사용자 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].regdate</span></td>
|
||||||
|
<td>등록 일자(YYYY-MM-DD HH:mm:ss)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].reserveCYn</span></td>
|
||||||
|
<td>예약 취소 여부(Y/N)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].ttlCnt</span></td>
|
||||||
|
<td>전체 요청 수</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].remainMsgCnt</span></td>
|
||||||
|
<td>남은 문자 건수</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].totMsgCnt</span></td>
|
||||||
|
<td>전체 문자 개수</td>
|
||||||
|
<td>String | Number</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ JSON 객체로 응답합니다.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_success">O 성공 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
"resultCode": "0",
|
||||||
|
|
||||||
|
"data": {
|
||||||
|
|
||||||
|
"resultCode": "0",
|
||||||
|
|
||||||
|
"message": null,
|
||||||
|
|
||||||
|
"next_yn": "n",
|
||||||
|
|
||||||
|
"msgGroupId": "MSGGID_0000000000000",
|
||||||
|
|
||||||
|
"objectList": [
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"msgTypeName": "단문(SMS)",
|
||||||
|
|
||||||
|
"msgType": "4",
|
||||||
|
|
||||||
|
"callFrom": "01011112222",
|
||||||
|
|
||||||
|
"callTo": "01011112223",
|
||||||
|
|
||||||
|
"msgGroupCnt": "2",
|
||||||
|
|
||||||
|
"msgGroupId": "MSGGID_0000000013340",
|
||||||
|
|
||||||
|
"msgId": "MSGID_0000000000001",
|
||||||
|
|
||||||
|
"scnt": "2",
|
||||||
|
|
||||||
|
"fcnt": "0",
|
||||||
|
|
||||||
|
"wcnt": "0",
|
||||||
|
|
||||||
|
"msgResult": "S",
|
||||||
|
|
||||||
|
"smsTxt": "문자 내용 단문 예제",
|
||||||
|
|
||||||
|
"subject": null,
|
||||||
|
|
||||||
|
"reqdate": "2023-06-13 17:48:07",
|
||||||
|
|
||||||
|
"curState": "3",
|
||||||
|
|
||||||
|
"userId": "testuser",
|
||||||
|
|
||||||
|
"regdate": "2023-06-13 17:48:07",
|
||||||
|
|
||||||
|
"reserveCYn": "N",
|
||||||
|
|
||||||
|
"ttlCnt": "1",
|
||||||
|
|
||||||
|
"remainMsgCnt": "40",
|
||||||
|
|
||||||
|
"totMsgCnt": "70"
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"msgTypeName": "장문(LMS)",
|
||||||
|
|
||||||
|
"msgType": "5",
|
||||||
|
|
||||||
|
"callFrom": "01011112222",
|
||||||
|
|
||||||
|
"callTo": "01011112223",
|
||||||
|
|
||||||
|
"msgGroupCnt": "1",
|
||||||
|
|
||||||
|
"msgGroupId": "MSGGID_0000000013341",
|
||||||
|
|
||||||
|
"msgId": "MSGID_0000000000002",
|
||||||
|
|
||||||
|
"scnt": "1",
|
||||||
|
|
||||||
|
"fcnt": "0",
|
||||||
|
|
||||||
|
"wcnt": "0",
|
||||||
|
|
||||||
|
"msgResult": "S",
|
||||||
|
|
||||||
|
"smsTxt": "문자 내용 장문 예제",
|
||||||
|
|
||||||
|
"subject": null,
|
||||||
|
|
||||||
|
"reqdate": "2023-06-02 11:46:50",
|
||||||
|
|
||||||
|
"curState": "3",
|
||||||
|
|
||||||
|
"userId": "testuser",
|
||||||
|
|
||||||
|
"regdate": "2023-06-02 11:46:49",
|
||||||
|
|
||||||
|
"reserveCYn": "N",
|
||||||
|
|
||||||
|
"ttlCnt": "1",
|
||||||
|
|
||||||
|
"remainMsgCnt": "40",
|
||||||
|
|
||||||
|
"totMsgCnt": "70"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_fail">X 실패 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"resultCode": "3099",
|
||||||
|
|
||||||
|
"data": "기타 시스템 오류"
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// Response-->
|
||||||
|
</div>
|
||||||
342
src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab4.jsp
Normal file
@ -0,0 +1,342 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
|
||||||
|
pageEncoding="UTF-8"%>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="info">
|
||||||
|
<li>- API를 통해서 메시지 그룹 ID 기준의 상세 이력(개별 건) 목록을 조회할 수 있습니다.</li>
|
||||||
|
</ul>
|
||||||
|
<div class="re_cont">
|
||||||
|
<!-- Request -->
|
||||||
|
<div class="req_title">Request</div>
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>Request</h4>
|
||||||
|
<table>
|
||||||
|
<caption>API Request Http Method, 프로토콜, HOST, Service Port, Endpoint 정보 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:80%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>Http Method</th>
|
||||||
|
<td>POST</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>프로토콜</th>
|
||||||
|
<td>HTTPS/1.1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>HOST</th>
|
||||||
|
<td>api.munjaon.co.kr</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Service Port</th>
|
||||||
|
<td>443</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Endpoint</th>
|
||||||
|
<td>/api/inqry/hstryDetail</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>히스토리 상세 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:45%;">
|
||||||
|
<col style="width:25%">
|
||||||
|
<col style="width:10%">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
<th>필수</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">mberId</span></td>
|
||||||
|
<td>사용자 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">accessKey</span></td>
|
||||||
|
<td>인증용 API Key</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">msgGroupId</span></td>
|
||||||
|
<td>메시지 그룹 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.</p>
|
||||||
|
<p>※ Content-Type: application/json</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title">[Example]</div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"mberId": "홍길동",
|
||||||
|
|
||||||
|
"accessKey": "XXXXXXXXXXXXXX414050694b953",
|
||||||
|
|
||||||
|
"msgGroupId": "MSGGID_XXXXXXX0000063"
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Request -->
|
||||||
|
|
||||||
|
<!-- Response -->
|
||||||
|
<div class="res_title">Response</div>
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>히스토리 상세 조회 API Response 키 종류 및 설명, 타입 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:60%;">
|
||||||
|
<col style="width:20%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">resultCode</span></td>
|
||||||
|
<td>성공 여부("0" 이외는 실패)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">data</span></td>
|
||||||
|
<td>조회 결과 객체</td>
|
||||||
|
<td>Object</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].resultCode</span></td>
|
||||||
|
<td>내부 처리 결과(0: 성공)</td>
|
||||||
|
<td>Number | String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList</span></td>
|
||||||
|
<td>개별 메시지 상세 목록</td>
|
||||||
|
<td>Array<Object></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgGroupId</span></td>
|
||||||
|
<td>메시지 그룹 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgId</span></td>
|
||||||
|
<td>개별 메시지 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].totMsgCnt</span></td>
|
||||||
|
<td>총 발송 건수(그룹 기준)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgType</span></td>
|
||||||
|
<td>메시지 타입 코드(예: 8=AT)</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgTypeName</span></td>
|
||||||
|
<td>메시지 타입명</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgResult</span></td>
|
||||||
|
<td>결과(F: 실패, S: 성공 등)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].msgGroupCnt</span></td>
|
||||||
|
<td>발송 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].smsTxt</span></td>
|
||||||
|
<td>메시지 내용</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].callFrom</span></td>
|
||||||
|
<td>발신 번호</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].callTo</span></td>
|
||||||
|
<td>수신 번호</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].curState</span></td>
|
||||||
|
<td>현재 상태 코드</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].remainMsgCnt</span></td>
|
||||||
|
<td>잔여 처리 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].reqdate</span></td>
|
||||||
|
<td>요청 일시(YYYY-MM-DD HH:mm:ss)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].regdate</span></td>
|
||||||
|
<td>등록 일시(YYYY-MM-DD HH:mm:ss)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].objectList[i].reserveCYn</span></td>
|
||||||
|
<td>예약 취소 여부(Y/N)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">localDateTime</span></td>
|
||||||
|
<td>서버 처리 일시(ISO-8601)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ JSON 객체로 응답합니다.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_success">O 성공 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
"resultCode": "0",
|
||||||
|
|
||||||
|
"data": {
|
||||||
|
|
||||||
|
"resultCode": 0,
|
||||||
|
|
||||||
|
"objectList": [
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"msgGroupId": "MSGGID_XXXXXXX0000063",
|
||||||
|
|
||||||
|
"msgId": "MSGCID_XXXXXXX00001180",
|
||||||
|
|
||||||
|
"totMsgCnt": "9",
|
||||||
|
|
||||||
|
"msgType": 8,
|
||||||
|
|
||||||
|
"msgTypeName": "알림톡(AT)",
|
||||||
|
|
||||||
|
"msgResult": "F",
|
||||||
|
|
||||||
|
"msgGroupCnt": 1,
|
||||||
|
|
||||||
|
"smsTxt": "test",
|
||||||
|
|
||||||
|
"callFrom": "01093414986",
|
||||||
|
|
||||||
|
"callTo": "01059941669",
|
||||||
|
|
||||||
|
"curState": 3,
|
||||||
|
|
||||||
|
"remainMsgCnt": 0,
|
||||||
|
|
||||||
|
"reqdate": "2025-09-05 11:45:45",
|
||||||
|
|
||||||
|
"regdate": "2025-09-05 11:45:45",
|
||||||
|
|
||||||
|
"reserveCYn": "N"
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"msgGroupId": "MSGGID_XXXXXXX0000063",
|
||||||
|
|
||||||
|
"msgId": "MSGCID_XXXXXXX000001175",
|
||||||
|
|
||||||
|
"totMsgCnt": "9",
|
||||||
|
|
||||||
|
"msgType": 9,
|
||||||
|
|
||||||
|
"msgTypeName": "친구톡(AT)",
|
||||||
|
|
||||||
|
"msgResult": "F",
|
||||||
|
|
||||||
|
"msgGroupCnt": 1,
|
||||||
|
|
||||||
|
"smsTxt": "test",
|
||||||
|
|
||||||
|
"callFrom": "01093414986",
|
||||||
|
|
||||||
|
"callTo": "01098969885",
|
||||||
|
|
||||||
|
"curState": 3,
|
||||||
|
|
||||||
|
"remainMsgCnt": 0,
|
||||||
|
|
||||||
|
"reqdate": "2025-09-05 11:45:45",
|
||||||
|
|
||||||
|
"regdate": "2025-09-05 11:45:45",
|
||||||
|
|
||||||
|
"reserveCYn": "N"
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
"localDateTime": "2025-09-16T10:47:20.4014362"
|
||||||
|
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_fail">X 실패 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre><code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"resultCode": "4099",
|
||||||
|
|
||||||
|
"data": "기타 시스템 오류"
|
||||||
|
|
||||||
|
}
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Response -->
|
||||||
|
</div>
|
||||||
|
<!--// Response-->
|
||||||
303
src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab5.jsp
Normal file
@ -0,0 +1,303 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
|
||||||
|
pageEncoding="UTF-8"%>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="info">
|
||||||
|
<li>- 보유캐시로 발송 가능한 문자의 건수를 단문(SMS), 장문(LMS), 그림(MMS), 알림톡(AT), 친구톡(FT)별로 각각 확인할 수 있습니다.</li>
|
||||||
|
<!-- <li>- 위 문자유형별 발송 가능건수는 개인별로 적용된 단가를 기준으로 산출되며, "첫 결제 이벤트"는 적용되지 않습니다.</li> -->
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="re_cont">
|
||||||
|
<!-- Request -->
|
||||||
|
<div class="req_title">Request</div>
|
||||||
|
<div class="box">
|
||||||
|
<div class="text">
|
||||||
|
<h4>Request</h4>
|
||||||
|
<table>
|
||||||
|
<caption>API Request Http Method, 프로토콜, HOST, Service Port, Endpoint 정보 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:80%;">
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th>Http Method</th>
|
||||||
|
<td>POST</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>프로토콜</th>
|
||||||
|
<td>HTTPS/1.1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>HOST</th>
|
||||||
|
<td>api.munjaon.co.kr</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Service Port</th>
|
||||||
|
<td>443</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Endpoint</th>
|
||||||
|
<td>/api/inqry/price</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>가격/가능건수 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:45%;">
|
||||||
|
<col style="width:25%">
|
||||||
|
<col style="width:10%">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
<th>필수</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">mberId</span></td>
|
||||||
|
<td>사용자 ID</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">accessKey</span></td>
|
||||||
|
<td>인증용 API Key</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td><span class="select_o">O</span></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.</p>
|
||||||
|
<p>※ Content-Type: application/json</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title">[Example]</div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"mberId": "홍길동",
|
||||||
|
|
||||||
|
"accessKey": "XXXXXXXXXXXXXX414050694b953"
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Request -->
|
||||||
|
|
||||||
|
<!-- Response -->
|
||||||
|
<div class="res_title">Response</div>
|
||||||
|
<div class="type_table">
|
||||||
|
<table>
|
||||||
|
<caption>가격/가능건수 조회 API Response 키 종류 및 설명, 타입 테이블</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width:20%;">
|
||||||
|
<col style="width:60%;">
|
||||||
|
<col style="width:20%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>키</th>
|
||||||
|
<th>설명</th>
|
||||||
|
<th>타입</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">resultCode</span></td>
|
||||||
|
<td>성공 여부("0" 이외는 실패)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">data</span></td>
|
||||||
|
<td>조회 결과 객체(성공 시 가격/가능건수 정보)</td>
|
||||||
|
<td>Object | String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].resultCode</span></td>
|
||||||
|
<td>내부 처리 결과("0": 성공)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].message</span></td>
|
||||||
|
<td>메시지(필요 시)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].localDateTime</span></td>
|
||||||
|
<td>서버 처리 일시(ISO-8601)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].shortPrice</span></td>
|
||||||
|
<td>단문(SMS) 단가</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].longPrice</span></td>
|
||||||
|
<td>장문(LMS) 단가</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].picturePrice</span></td>
|
||||||
|
<td>사진(MMS) 단가</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].kakaoAtPrice</span></td>
|
||||||
|
<td>카카오 알림톡 단가</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].kakaoFtPrice</span></td>
|
||||||
|
<td>카카오 친구톡(텍스트) 단가</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].kakaoFtImgPrice</span></td>
|
||||||
|
<td>카카오 친구톡(이미지) 단가</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].kakaoFtWideImgPrice</span></td>
|
||||||
|
<td>카카오 친구톡(와이드 이미지) 단가</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].mberMoney</span></td>
|
||||||
|
<td>회원 보유 금액</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].shortSendPsbltEa</span></td>
|
||||||
|
<td>단문 발송 가능 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].longSendPsbltEa</span></td>
|
||||||
|
<td>장문 발송 가능 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].pictureSendPsbltEa</span></td>
|
||||||
|
<td>사진 발송 가능 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].kakaoAtSendPsbltEa</span></td>
|
||||||
|
<td>알림톡 발송 가능 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].kakaoFtSendPsbltEa</span></td>
|
||||||
|
<td>친구톡(텍스트) 발송 가능 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].kakaoFtImgSendPsbltEa</span></td>
|
||||||
|
<td>친구톡(이미지) 발송 가능 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">[data].kakaoFtWideImgSendPsbltEa</span></td>
|
||||||
|
<td>친구톡(와이드 이미지) 발송 가능 건수</td>
|
||||||
|
<td>Number</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><span class="font_b">localDateTime</span></td>
|
||||||
|
<td>서버 처리 일시(ISO-8601)</td>
|
||||||
|
<td>String</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="table_info">
|
||||||
|
<p>※ JSON 객체로 응답합니다.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_success">O 성공 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre>
|
||||||
|
<code class="language-json">
|
||||||
|
{
|
||||||
|
"resultCode": "0",
|
||||||
|
|
||||||
|
"data": {
|
||||||
|
|
||||||
|
"resultCode": "0",
|
||||||
|
|
||||||
|
"message": "",
|
||||||
|
|
||||||
|
"localDateTime": "2025-09-16T11:06:40.2556646",
|
||||||
|
|
||||||
|
"shortPrice": 18.0,
|
||||||
|
|
||||||
|
"longPrice": 50.0,
|
||||||
|
|
||||||
|
"picturePrice": 90.0,
|
||||||
|
|
||||||
|
"kakaoAtPrice": 6.9,
|
||||||
|
|
||||||
|
"kakaoFtPrice": 13.8,
|
||||||
|
|
||||||
|
"kakaoFtImgPrice": 19.9,
|
||||||
|
|
||||||
|
"kakaoFtWideImgPrice": 22.9,
|
||||||
|
|
||||||
|
"mberMoney": 6549661.26,
|
||||||
|
|
||||||
|
"shortSendPsbltEa": 363870,
|
||||||
|
|
||||||
|
"longSendPsbltEa": 130993,
|
||||||
|
|
||||||
|
"pictureSendPsbltEa": 72774,
|
||||||
|
|
||||||
|
"kakaoAtSendPsbltEa": 949226,
|
||||||
|
|
||||||
|
"kakaoFtSendPsbltEa": 474613,
|
||||||
|
|
||||||
|
"kakaoFtImgSendPsbltEa": 329128,
|
||||||
|
|
||||||
|
"kakaoFtWideImgSendPsbltEa": 286011
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
"localDateTime": "2025-09-16T11:06:40.2556646"
|
||||||
|
|
||||||
|
}
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="title_t1"><span class="ex">[Example]</span><span class="ex_fail">X 실패 예시</span></div>
|
||||||
|
<div class="code_view">
|
||||||
|
<pre><code class="language-json">
|
||||||
|
{
|
||||||
|
|
||||||
|
"resultCode": "3099",
|
||||||
|
|
||||||
|
"data": "기타 시스템 오류"
|
||||||
|
|
||||||
|
}
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- // Response -->
|
||||||
|
</div>
|
||||||
|
<!--// Response-->
|
||||||
@ -1,94 +1,253 @@
|
|||||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
|
||||||
|
pageEncoding="UTF-8"%>
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||||
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
|
||||||
<script language=javascript>
|
<script language=javascript>
|
||||||
$(document).ready(function(){
|
$(document).ready(function() {
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
<!-- content 영역 -->
|
<!-- content 영역 -->
|
||||||
<div class="inner">
|
<div class="inner">
|
||||||
<!-- send top -->
|
<!-- send top -->
|
||||||
<div class="send_top">
|
<div class="send_top">
|
||||||
<c:import url="./top_tepMenu.jsp" />
|
<c:import url="./top_tepMenu.jsp" />
|
||||||
|
|
||||||
<!-- tab button -->
|
<!-- tab button -->
|
||||||
<div class="api_guide_cont current">
|
<div class="api_guide_cont current">
|
||||||
<div class="heading">
|
<div class="heading">
|
||||||
<h2>문자연동(API) 소개</h2>
|
<h2>연동 서비스 안내</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--소개 내용-->
|
<!--소개 내용-->
|
||||||
<div class="api_visual_image">
|
<div class="api_visual_image">
|
||||||
<img src="<c:url value='/publish/images/api_intro_cont/api_intro_visual.jpg' />" alt="문자연동(API)도 이제 '문자온!'' 별도의 프로그램 설치 없이 누구나 쉽고 편리하게 문자를 발송할 수 있습니다." usemap="#image-map">
|
<img
|
||||||
<map name="image-map">
|
src="<c:url value='/publish/images/api_intro_cont/api_intro_visual.jpg' />"
|
||||||
<area target="_self" alt="문자연동(API)신청하기" title="문자연동(API)신청하기" href="<c:out value='/web/api/appMgmt.do' />" coords="338,266,88,216" shape="rect">
|
alt="문자연동(API)도 이제 '문자온!'' 별도의 프로그램 설치 없이 누구나 쉽고 편리하게 문자를 발송할 수 있습니다."
|
||||||
</map>
|
usemap="#image-map">
|
||||||
</div>
|
<map name="image-map">
|
||||||
|
<area target="_self" alt="문자연동(API)신청하기" title="문자연동(API)신청하기"
|
||||||
<!--사용 절차 설명 -->
|
href="<c:out value='/web/api/appMgmt.do' />"
|
||||||
<div class="api_intro">
|
coords="338,266,88,216" shape="rect">
|
||||||
<div class="title">
|
</map>
|
||||||
<h3>문자연동(API) 사용 절차</h3>
|
</div>
|
||||||
</div>
|
|
||||||
|
<div class="pay_tab_wrap">
|
||||||
|
<ul class="tabType1">
|
||||||
|
<li class="tab active"><button type="button"
|
||||||
|
onclick="TabType5(this,'1');">문자</button></li>
|
||||||
|
<li class="tab"><button type="button"
|
||||||
|
onclick="TabType5(this,'2');">카카오톡</button></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!--사용 절차 설명 -->
|
||||||
|
<div class="api_intro api_guide current" id="tab5_1">
|
||||||
|
<div class="title">
|
||||||
|
<h3>문자 API 사용 절차</h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title-line">
|
||||||
|
<div class="left-line"></div>
|
||||||
|
<div class="right-line"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="con">
|
||||||
|
<ul class="api_process_guide">
|
||||||
|
<li class="guide">
|
||||||
|
<a href="/web/user/sendNumberManage.do">
|
||||||
|
<p class="step_title">
|
||||||
|
STEP <span>01</span>
|
||||||
|
</p>
|
||||||
|
<div class="step_con">
|
||||||
|
<div class="icon">
|
||||||
|
<img src="/publish/images/api_intro_cont/api_guide_00.png"
|
||||||
|
alt="문자 API 신청 아이콘">
|
||||||
|
</div>
|
||||||
|
<dl>
|
||||||
|
<dt>발신번호 사전 등록</dt>
|
||||||
|
<dd>
|
||||||
|
발송에 필요한 발신번호<br>등록 필요
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="guide">
|
||||||
|
<p class="step_title">
|
||||||
|
STEP <span>02</span>
|
||||||
|
</p>
|
||||||
|
<div class="step_con">
|
||||||
|
<div class="icon">
|
||||||
|
<img src="/publish/images/api_intro_cont/api_guide_01.jpg"
|
||||||
|
alt="관리자 승인 아이콘">
|
||||||
|
</div>
|
||||||
|
<dl>
|
||||||
|
<dt>문자 연동 API 신청</dt>
|
||||||
|
<dd>관리자 승인 후 사용 가능</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li class="guide">
|
||||||
|
<p class="step_title">
|
||||||
|
STEP <span>03</span>
|
||||||
|
</p>
|
||||||
|
<div class="step_con">
|
||||||
|
<div class="icon">
|
||||||
|
<img src="/publish/images/api_intro_cont/api_guide_02.jpg"
|
||||||
|
alt="아이피(IP) 등록 아이콘">
|
||||||
|
</div>
|
||||||
|
<dl>
|
||||||
|
<dt>관리자 승인</dt>
|
||||||
|
<dd>승인 완료 시 문자 안내</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li class="guide">
|
||||||
|
<p class="step_title">
|
||||||
|
STEP <span>04</span>
|
||||||
|
</p>
|
||||||
|
<div class="step_con">
|
||||||
|
<div class="icon">
|
||||||
|
<img src="/publish/images/api_intro_cont/api_guide_03.jpg"
|
||||||
|
alt="API 연동 아이콘">
|
||||||
|
</div>
|
||||||
|
<dl>
|
||||||
|
<dt>아이피(IP) 등록</dt>
|
||||||
|
<dd>
|
||||||
|
문자 API를 통해<br>문자 발송 서버 IP 등록
|
||||||
|
</dd>
|
||||||
|
</dt>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li class="guide">
|
||||||
|
<p class="step_title">
|
||||||
|
STEP <span>05</span>
|
||||||
|
</p>
|
||||||
|
<div class="step_con">
|
||||||
|
<div class="icon">
|
||||||
|
<img src="/publish/images/api_intro_cont/api_guide_04.jpg"
|
||||||
|
alt="API 연동 아이콘">
|
||||||
|
</div>
|
||||||
|
<dl>
|
||||||
|
<dt>API 연동</dt>
|
||||||
|
<dd>
|
||||||
|
API 사용 매뉴얼 및 샘플링을<br>통해 누구나 손쉽게 연동 가능
|
||||||
|
</dd>
|
||||||
|
</dt>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// 사용 절차 설명-->
|
||||||
|
|
||||||
|
|
||||||
|
<div class="api_intro api_guide kakao_intro" id="tab5_2">
|
||||||
|
<div class="title">
|
||||||
|
<h3>카카오톡 연동(API) 사용 절차</h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title-line">
|
||||||
|
<div class="left-line"></div>
|
||||||
|
<div class="right-line"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="con">
|
||||||
|
<ul class="api_process_guide">
|
||||||
|
<li class="guide">
|
||||||
|
<a href="/web/user/sendNumberManage.do">
|
||||||
|
<p class="step_title">
|
||||||
|
STEP <span>01</span>
|
||||||
|
</p>
|
||||||
|
<div class="step_con">
|
||||||
|
<div class="icon">
|
||||||
|
<img src="/publish/images/api_intro_cont/api_guide_00.png"
|
||||||
|
alt="문자 API 신청 아이콘">
|
||||||
|
</div>
|
||||||
|
<dl>
|
||||||
|
<dt>발신프로필 사전 등록</dt>
|
||||||
|
<dd>
|
||||||
|
발송에 필요한 발신프로필<br>등록 필요
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="guide">
|
||||||
|
<p class="step_title">
|
||||||
|
STEP <span>02</span>
|
||||||
|
</p>
|
||||||
|
<div class="step_con">
|
||||||
|
<div class="icon">
|
||||||
|
<img src="/publish/images/api_intro_cont/api_guide_01.jpg"
|
||||||
|
alt="관리자 승인 아이콘">
|
||||||
|
</div>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
카카오톡 연동<br>API 신청
|
||||||
|
</dt>
|
||||||
|
<dd>관리자 승인 후 사용 가능</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li class="guide">
|
||||||
|
<p class="step_title">
|
||||||
|
STEP <span>03</span>
|
||||||
|
</p>
|
||||||
|
<div class="step_con">
|
||||||
|
<div class="icon">
|
||||||
|
<img src="/publish/images/api_intro_cont/api_guide_02.jpg"
|
||||||
|
alt="아이피(IP) 등록 아이콘">
|
||||||
|
</div>
|
||||||
|
<dl>
|
||||||
|
<dt>관리자 승인</dt>
|
||||||
|
<dd>승인 완료 시 문자 안내</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li class="guide">
|
||||||
|
<p class="step_title">
|
||||||
|
STEP <span>04</span>
|
||||||
|
</p>
|
||||||
|
<div class="step_con">
|
||||||
|
<div class="icon">
|
||||||
|
<img src="/publish/images/api_intro_cont/api_guide_03.jpg"
|
||||||
|
alt="API 연동 아이콘">
|
||||||
|
</div>
|
||||||
|
<dl>
|
||||||
|
<dt>아이피(IP) 등록</dt>
|
||||||
|
<dd>
|
||||||
|
카카오톡 API를 통해<br>문자 발송 서버 IP 등록
|
||||||
|
</dd>
|
||||||
|
</dt>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li class="guide">
|
||||||
|
<p class="step_title">
|
||||||
|
STEP <span>05</span>
|
||||||
|
</p>
|
||||||
|
<div class="step_con">
|
||||||
|
<div class="icon">
|
||||||
|
<img src="/publish/images/api_intro_cont/api_guide_04.jpg"
|
||||||
|
alt="API 연동 아이콘">
|
||||||
|
</div>
|
||||||
|
<dl>
|
||||||
|
<dt>API 연동</dt>
|
||||||
|
<dd>
|
||||||
|
API 사용 매뉴얼 및 샘플링을<br>통해 누구나 손쉽게 연동 가능
|
||||||
|
</dd>
|
||||||
|
</dt>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!--// 소개 내용-->
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="title-line">
|
|
||||||
<div class="left-line"></div>
|
|
||||||
<div class="right-line"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="con">
|
|
||||||
<ul class="api_process_guide">
|
|
||||||
<li class="guide">
|
|
||||||
<p class="step_title">STEP <span>01</span></p>
|
|
||||||
<div class="step_con">
|
|
||||||
<div class="icon"><img src="<c:url value='/publish/images/api_intro_cont/api_guide_01.jpg' />" alt="문자 API 신청 아이콘"></div>
|
|
||||||
<dl>
|
|
||||||
<dt>문자연동(API) 신청</dt>
|
|
||||||
<dd>관리자 승인 후 사용 가능</dd>
|
|
||||||
</dl>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li class="guide">
|
|
||||||
<p class="step_title">STEP <span>02</span></p>
|
|
||||||
<div class="step_con">
|
|
||||||
<div class="icon"><img src="<c:url value='/publish/images/api_intro_cont/api_guide_02.jpg' />" alt="관리자 승인 아이콘"></div>
|
|
||||||
<dl>
|
|
||||||
<dt>관리자 승인</dt>
|
|
||||||
<dd>승인 완료 시 문자 안내</dd>
|
|
||||||
</dl>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li class="guide">
|
|
||||||
<p class="step_title">STEP <span>03</span></p>
|
|
||||||
<div class="step_con">
|
|
||||||
<div class="icon"><img src="<c:url value='/publish/images/api_intro_cont/api_guide_03.jpg' />" alt="아이피(IP) 등록 아이콘"></div>
|
|
||||||
<dl>
|
|
||||||
<!-- <dt>아이피<span>(IP)</span> 등록</dt> -->
|
|
||||||
<dt>아이피(IP) 등록</dt>
|
|
||||||
<dd>문자연동(API)를 통해 문자 발송 서버 IP 등록</dd>
|
|
||||||
</dl>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li class="guide">
|
|
||||||
<p class="step_title">STEP <span>04</span></p>
|
|
||||||
<div class="step_con">
|
|
||||||
<div class="icon"><img src="<c:url value='/publish/images/api_intro_cont/api_guide_04.jpg' />" alt="API 연동 아이콘"></div>
|
|
||||||
<dl>
|
|
||||||
<dt>API 연동</dt>
|
|
||||||
<dd>API 사용 매뉴얼 및 샘플링을 통해 누구나 손쉽게 연동 가능</dd>
|
|
||||||
</dt>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!--// 사용 절차 설명-->
|
|
||||||
<!--// 소개 내용-->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||||
|
|
||||||
<ul class="info">
|
<ul class="info">
|
||||||
<li>- 문자온 사이트 및 API를 통해 전송된 문자 발송내역을 조회할 수 있습니다.</li>
|
<li>- 문자온 사이트 및 API를 통해 전송된 발송내역을 조회할 수 있습니다.</li>
|
||||||
<li>- 문자 발송내역은 날짜별로 조회되며, 최근 3개월까지만 조회 가능합니다.</li>
|
<li>- 문자 발송내역은 날짜별로 조회되며, 최근 3개월까지만 조회 가능합니다.</li>
|
||||||
<li>- 발신번호별 문자 발송내역 조회 기능은 제공되지 않습니다.</li>
|
<li>- 발신번호별 문자 발송내역 조회 기능은 제공되지 않습니다.</li>
|
||||||
</ul>
|
</ul>
|
||||||
83
src/main/webapp/WEB-INF/jsp/web/api/top_subTepMenu.jsp
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||||
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
// 현재 url 추출
|
||||||
|
var url = window.location.pathname;
|
||||||
|
// 현재 url에서 uri만 추출
|
||||||
|
var lastPart = url.split('/').pop();
|
||||||
|
|
||||||
|
console.log('lastPart : ', lastPart);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* top 메뉴중 onclick에 있는 uri을 가져와
|
||||||
|
* 현재 호출된 페이지와 uri와 비교해서 맞다면
|
||||||
|
* active로 활성화 시킴
|
||||||
|
*/
|
||||||
|
$('.tabType1 .tab').each(function(index) {
|
||||||
|
var $btn = $(this).children("button");
|
||||||
|
var info = $btn.attr("data-info");
|
||||||
|
|
||||||
|
console.log('info : ', info);
|
||||||
|
console.log('lastPart : ', lastPart);
|
||||||
|
|
||||||
|
if (info.indexOf(lastPart) > -1) {
|
||||||
|
$(this).addClass('active');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 페이지 이동 이벤트
|
||||||
|
$('.goSubPage').click(function(){
|
||||||
|
location.href=$(this).data('info');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// 기업회원 체크
|
||||||
|
function usrDeptChk(){
|
||||||
|
|
||||||
|
var usrDept = '${LoginVO.dept}';
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
/* 2023.09.25 JSPark 개인, 기업 모두 허용
|
||||||
|
// 기업회원 전용체크
|
||||||
|
if(usrDept != 'c'){
|
||||||
|
|
||||||
|
//기업회원 전용 메세지 팝업 띄워주기
|
||||||
|
$('#btnDeptPop').click();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}else{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
// 튤팁에서 취소 클릭 시 이벤트
|
||||||
|
function customPopup(){
|
||||||
|
// 현재 url 추출
|
||||||
|
var url = window.location.pathname;
|
||||||
|
// 현재 url에서 uri만 추출
|
||||||
|
var lastPart = url.split('/').pop();
|
||||||
|
|
||||||
|
// URL을 치고 들어왔을 경우 '문자 API소개' 페이지로 이동
|
||||||
|
if('appMgmt.do'.indexOf(lastPart) > -1){
|
||||||
|
location.href='<c:url value="/web/api/intrdView.do" />';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!--사용안내 내용-->
|
||||||
|
<div class="pay_tab_wrap">
|
||||||
|
<ul class="tabType1">
|
||||||
|
<li class="tab"><button type="button" class="goSubPage" data-info="<c:url value="/web/api/apiSpec.do" />">문자</button></li>
|
||||||
|
<li class="tab"><button type="button" class="goSubPage" data-info="<c:url value="/web/api/apiAtSpec.do" />">알림톡</button></li>
|
||||||
|
<%-- <li class="tab"><button type="button" class="goSubPage" data-info="<c:url value="/web/api/apiFtSpec.do" />">친구톡</button></li> --%>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
@ -17,12 +17,17 @@ $(document).ready(function(){
|
|||||||
* active로 활성화 시킴
|
* active로 활성화 시킴
|
||||||
*/
|
*/
|
||||||
$('.tabType4 .tab').each(function(index) {
|
$('.tabType4 .tab').each(function(index) {
|
||||||
var idAttr = $(this).children("button").attr("id");
|
var $btn = $(this).children("button");
|
||||||
idAttr += '.do';
|
var id = $btn.attr("id");
|
||||||
|
|
||||||
if(idAttr.indexOf(lastPart) > -1){
|
// 개발가이드 그룹
|
||||||
$(this).addClass('active');
|
if (id === 'apiSpec' && /api.*Spec\.do$/.test(lastPart)) {
|
||||||
}
|
$(this).addClass('active');
|
||||||
|
}
|
||||||
|
// 나머지 기본 처리
|
||||||
|
else if (lastPart.indexOf(id) > -1) {
|
||||||
|
$(this).addClass('active');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// 페이지 이동 이벤트
|
// 페이지 이동 이벤트
|
||||||
@ -97,8 +102,8 @@ function customPopup(){
|
|||||||
<button type="button" id="btnDeptPop" data-tooltip="popup01" style="display: none;"></button>
|
<button type="button" id="btnDeptPop" data-tooltip="popup01" style="display: none;"></button>
|
||||||
|
|
||||||
<ul class="tabType4">
|
<ul class="tabType4">
|
||||||
<li class="tab"><button type="button" class="goPage" id="intrdView" data-info="<c:url value="/web/api/intrdView.do" />">문자연동(API)소개</button></li>
|
<li class="tab"><button type="button" class="goPage" id="intrdView" data-info="<c:url value="/web/api/intrdView.do" />">연동 안내</button></li>
|
||||||
<li class="tab"><button type="button" class="goPage" id="apiSpec" data-info="<c:url value="/web/api/apiSpec.do" />">API 사용안내</button></li>
|
<li class="tab"><button type="button" class="goPage" id="apiSpec" data-info="<c:url value="/web/api/apiSpec.do" />">개발 가이드</button></li>
|
||||||
<li class="tab"><button type="button" class="goPage" id="examDown" data-info="<c:url value="/web/api/examDown.do" />">예제 다운로드</button></li>
|
<li class="tab"><button type="button" class="goPage" id="examDown" data-info="<c:url value="/web/api/examDown.do" />">예제 다운로드</button></li>
|
||||||
<li class="tab"><button type="button" class="goPage" id="appMgmt" data-info="<c:url value="/web/api/appMgmt.do" />" >신청/관리</button></li>
|
<li class="tab"><button type="button" class="goPage" id="appMgmt" data-info="<c:url value="/web/api/appMgmt.do" />" >신청/관리</button></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
@ -1532,16 +1532,28 @@ function actionLogin_end(){
|
|||||||
<ul class="menu">
|
<ul class="menu">
|
||||||
<li>
|
<li>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><a href="<c:out value='/web/mjon/msgdata/selectMsgDataView.do'/>">문자전송</a></dt>
|
<dt><a href="<c:out value='/web/mjon/msgdata/selectMsgDataView.do'/>">문자발송</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="<c:out value='/web/mjon/msgdata/selectMsgDataView.do'/>">단문·장문·그림문자</a></li>
|
<li><a href="<c:out value='/web/mjon/msgdata/selectMsgDataView.do'/>">단문·장문·그림문자</a></li>
|
||||||
<li><a href="<c:out value='/web/mjon/msgdata/excel/selectMsgExcelDataView.do'/>">대량문자</a></li>
|
<li><a href="<c:out value='/web/mjon/msgdata/excel/selectMsgExcelDataView.do'/>">대량문자</a></li>
|
||||||
<li><a href="<c:out value='/web/api/intrdView.do'/>">문자연동(API)</a></li>
|
<%-- <li><a href="<c:out value='/web/api/intrdView.do'/>">문자연동(API)</a></li> --%>
|
||||||
</ul>
|
</ul>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<c:if test="${userCandidateYn eq 'Y' }">
|
<dl>
|
||||||
|
<dt><a href="<c:out value='/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do'/>">카톡발송</a></dt>
|
||||||
|
<dd>
|
||||||
|
<ul>
|
||||||
|
<li><a href="<c:out value='/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do'/>">알림톡</a></li>
|
||||||
|
<li><a href="<c:out value='/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do'/>">친구톡</a></li>
|
||||||
|
<li><a href="<c:out value='/web/mjon/kakao/stepinfo/selectKaKaoStepInfo.do'/>" >카카오톡 설정</a></li>
|
||||||
|
<%-- <li><a href="<c:out value='/web/mjon/kakao/alimtalk/kakaoAlimtalkIntrdView.do'/>" >알림톡 소개</a></li> --%>
|
||||||
|
<li><a href="<c:out value='/web/mjon/kakao/alimtalk/kakaotalkIntrdView.do'/>" >카카오톡 소개</a></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<%-- <c:if test="${userCandidateYn eq 'Y' }">
|
||||||
<dl>
|
<dl>
|
||||||
<dt><a href="<c:out value='/web/mjon/msgcampain/selectMsgDataView.do'/>" >선거문자</a></dt>
|
<dt><a href="<c:out value='/web/mjon/msgcampain/selectMsgDataView.do'/>" >선거문자</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
@ -1551,16 +1563,13 @@ function actionLogin_end(){
|
|||||||
</ul>
|
</ul>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</c:if>
|
</c:if> --%>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><a href="<c:out value='/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do'/>">카톡전송</a></dt>
|
<dt><a href="/web/info/mjonInfo.do" >팩스발송</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="<c:out value='/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do'/>">알림톡</a></li>
|
<li><a href="/web/mjon/fax/faxDataView.do">팩스발송</a></li>
|
||||||
<li><a href="<c:out value='/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do'/>">친구톡</a></li>
|
<li><a href="/web/mjon/fax/faxSendList.do" >팩스발송내역</a></li>
|
||||||
<li><a href="<c:out value='/web/mjon/kakao/stepinfo/selectKaKaoStepInfo.do'/>" >카카오톡 설정</a></li>
|
|
||||||
<%-- <li><a href="<c:out value='/web/mjon/kakao/alimtalk/kakaoAlimtalkIntrdView.do'/>" >알림톡 소개</a></li> --%>
|
|
||||||
<li><a href="<c:out value='/web/mjon/kakao/alimtalk/kakaotalkIntrdView.do'/>" >카카오톡 소개</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
@ -1576,27 +1585,6 @@ function actionLogin_end(){
|
|||||||
</ul>
|
</ul>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<dl>
|
|
||||||
<dt><a href="/web/info/mjonInfo.do" >문자온소개</a></dt>
|
|
||||||
<dd>
|
|
||||||
<ul>
|
|
||||||
<li><a href="/web/info/mjonInfo.do" >서비스 소개</a></li>
|
|
||||||
<li><a href="/web/info/mjonFunc.do" >주요기능</a></li>
|
|
||||||
<li><a href="/web/mjon/msgdata/selectBestMsgDataView.do" >베스트문자샘플</a></li>
|
|
||||||
</ul>
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
<dl>
|
|
||||||
<dt><a href="/web/info/mjonInfo.do" >팩스전송</a></dt>
|
|
||||||
<dd>
|
|
||||||
<ul>
|
|
||||||
<li><a href="/web/mjon/fax/faxDataView.do">팩스전송</a></li>
|
|
||||||
<li><a href="/web/mjon/fax/faxSendList.do" >팩스전송내역</a></li>
|
|
||||||
</ul>
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<dl>
|
<dl>
|
||||||
<dt><a href="<c:out value='/web/mjon/addr/selectAddrList.do'/>" >주소록관리</a></dt>
|
<dt><a href="<c:out value='/web/mjon/addr/selectAddrList.do'/>" >주소록관리</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
@ -1608,8 +1596,6 @@ function actionLogin_end(){
|
|||||||
</ul>
|
</ul>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<dl>
|
<dl>
|
||||||
<dt><a href="<c:out value='/web/mjon/msgsent/selectMsgSentView.do'/>">발송결과</a></dt>
|
<dt><a href="<c:out value='/web/mjon/msgsent/selectMsgSentView.do'/>">발송결과</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
@ -1618,14 +1604,33 @@ function actionLogin_end(){
|
|||||||
</ul>
|
</ul>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<%-- <dl>
|
</li>
|
||||||
<dt><a href="<c:out value='/web/mjon/reservmsg/selectReservMsgView.do'/>">예약관리</a></dt>
|
<li>
|
||||||
|
<dl>
|
||||||
|
<dt><a href="<c:out value='/web/member/pay/PayList.do'/>" >결제관리</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="<c:out value='/web/mjon/reservmsg/selectReservMsgView.do'/>">예약관리</a></li>
|
<li><a href="<c:out value='/web/pay/PayGuide.do'/>" >요금안내/견적내기</a></li>
|
||||||
|
<li><a href="<c:out value='/web/member/pay/PayView.do'/>" >결제하기</a></li>
|
||||||
|
<li><a href="<c:out value='/web/member/pay/PayList.do'/>" >요금 결제내역</a></li>
|
||||||
|
<li><a href="<c:out value='/web/member/pay/payUserSWList.do'/>" >요금 사용내역</a></li>
|
||||||
|
<!-- 현금영수증 자동발행 주석 -->
|
||||||
|
<%-- <li><a href="<c:out value='/web/member/pay/BillPub.do'/>" >계산서/현금영수증 발행 등록</a></li> --%>
|
||||||
|
<li><a href="<c:out value='/web/member/pay/BillPub.do'/>" >세금계산서 발행</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</dd>
|
</dd>
|
||||||
</dl> --%>
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt><a href="<c:out value='/web/api/intrdView.do'/>">API 연동</a></dt>
|
||||||
|
<dd>
|
||||||
|
<ul>
|
||||||
|
<li><a href="<c:out value='/web/api/intrdView.do'/>">연동안내</a></li>
|
||||||
|
<li><a href="<c:out value='/web/api/apiSpec.do'/>" >개발 가이드</a></li>
|
||||||
|
<li><a href="<c:out value='/web/api/examDown.do'/>" >예제 다운로드</a></li>
|
||||||
|
<li><a href="<c:out value='/web/api/appMgmt.do'/>" >신청/관리</a></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<dl>
|
<dl>
|
||||||
@ -1647,23 +1652,21 @@ function actionLogin_end(){
|
|||||||
</ul>
|
</ul>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<dl>
|
<dl>
|
||||||
<dt><a href="<c:out value='/web/member/pay/PayList.do'/>" >결제관리</a></dt>
|
<dt><a href="/web/info/mjonInfo.do" >문자온소개</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="<c:out value='/web/pay/PayGuide.do'/>" >요금안내/견적내기</a></li>
|
<li><a href="/web/info/mjonInfo.do" >서비스 소개</a></li>
|
||||||
<li><a href="<c:out value='/web/member/pay/PayView.do'/>" >결제하기</a></li>
|
<li><a href="/web/info/mjonFunc.do" >주요기능</a></li>
|
||||||
<li><a href="<c:out value='/web/member/pay/PayList.do'/>" >요금 결제내역</a></li>
|
<li><a href="/web/mjon/msgdata/selectBestMsgDataView.do" >베스트문자샘플</a></li>
|
||||||
<li><a href="<c:out value='/web/member/pay/payUserSWList.do'/>" >요금 사용내역</a></li>
|
|
||||||
<!-- 현금영수증 자동발행 주석 -->
|
|
||||||
<%-- <li><a href="<c:out value='/web/member/pay/BillPub.do'/>" >계산서/현금영수증 발행 등록</a></li> --%>
|
|
||||||
<li><a href="<c:out value='/web/member/pay/BillPub.do'/>" >세금계산서 발행</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
|
<!-- <li> -->
|
||||||
|
<!-- <li> -->
|
||||||
|
<!-- </li> -->
|
||||||
|
<!-- </li> -->
|
||||||
<li>
|
<li>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><a href="<c:out value='/web/cop/bbs/NoticeList.do'/>" >고객센터</a></dt>
|
<dt><a href="<c:out value='/web/cop/bbs/NoticeList.do'/>" >고객센터</a></dt>
|
||||||
|
|||||||
@ -5,6 +5,11 @@
|
|||||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
|
<style>
|
||||||
|
.custom_layer .body_cont table tr.custom_put1 td .custom_put1_txt{margin:8px 0 0 0;}
|
||||||
|
.custom_layer .body_cont table tr.custom_put1 td .custom_put1_txt p{line-height:1.2;}
|
||||||
|
.custom_layer .body_cont table tr.custom_put1 td .custom_put1_txt p:first-child{margin:0;}
|
||||||
|
</style>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
$("input:text[numberOnly]").on("keyup", function() {
|
$("input:text[numberOnly]").on("keyup", function() {
|
||||||
@ -410,7 +415,8 @@ function customProvisionView(obj){
|
|||||||
</div>
|
</div>
|
||||||
<div class="custom_put1_txt">
|
<div class="custom_put1_txt">
|
||||||
<p><span class="vMiddle">*</span> <span class="c_e40000">캘리그래피체는 수정이 불가</span>합니다.</p>
|
<p><span class="vMiddle">*</span> <span class="c_e40000">캘리그래피체는 수정이 불가</span>합니다.</p>
|
||||||
<p><span class="vMiddle">*</span> <spanspan class="c_e40000">제작형태와 요청사항이 상이</span>한 경우 <spanspan class="c_e40000">추가로 비용이 발생</span>할 수 있습니다.</p>
|
<p><span class="vMiddle">*</span> <span class="c_e40000">제작형태와 요청사항이 상이</span>한 경우 <span class="c_e40000">추가로 비용이 발생</span>할 수 있습니다.</p>
|
||||||
|
<p><span class="vMiddle">*</span> <span class="c_e40000">제작된 이미지는 <span class="c_e40000">알림톡 및 친구톡</span> 발송에는 사용할 수 없습니다.</p>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -418,7 +424,7 @@ function customProvisionView(obj){
|
|||||||
<th>제공방법</th>
|
<th>제공방법</th>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" id="storage" checked="checked" disabled="disabled"> <label for="storage">내보관함</label>
|
<input type="checkbox" id="storage" checked="checked" disabled="disabled"> <label for="storage">내보관함</label>
|
||||||
<input type="checkbox" name="customProvision" id="radio11" value="01"> <label for="radio11">카카오톡</label>
|
<input type="checkbox" name="customProvision" id="radio11" value="01"> <label for="radio11">문자</label>
|
||||||
<input type="checkbox" name="customProvision" id="radio12" value="02"> <label for="radio12">이메일</label>
|
<input type="checkbox" name="customProvision" id="radio12" value="02"> <label for="radio12">이메일</label>
|
||||||
<input type="text" class="radio12_input" name="customResultEmail" placeholder="이메일주소를 입력해주세요" onfocus="''" onblur="this.placeholder='이메일주소를 입력해주세요'">
|
<input type="text" class="radio12_input" name="customResultEmail" placeholder="이메일주소를 입력해주세요" onfocus="''" onblur="this.placeholder='이메일주소를 입력해주세요'">
|
||||||
<!-- <span>중복선택 가능(최대2개)</span> -->
|
<!-- <span>중복선택 가능(최대2개)</span> -->
|
||||||
|
|||||||
@ -535,6 +535,7 @@ function fn_sentDetailView(msgGroupId) {
|
|||||||
<select name="searchCondition" id="searchCondition" class="selType2">
|
<select name="searchCondition" id="searchCondition" class="selType2">
|
||||||
<%-- <option value="4" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >채널ID</option> --%>
|
<%-- <option value="4" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >채널ID</option> --%>
|
||||||
<option value="3" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >내용</option>
|
<option value="3" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >내용</option>
|
||||||
|
<option value="4" <c:if test="${kakaoSentVO.searchCondition == '4'}">selected</c:if> >수신번호</option>
|
||||||
<%-- <option value="3" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >수신번호</option> --%>
|
<%-- <option value="3" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >수신번호</option> --%>
|
||||||
</select>
|
</select>
|
||||||
<div class="search">
|
<div class="search">
|
||||||
|
|||||||
@ -888,10 +888,11 @@ function subContent(){
|
|||||||
<button type="button" class="btnType6" onClick="javascript:fnSearch(1); return false;">조회</button>
|
<button type="button" class="btnType6" onClick="javascript:fnSearch(1); return false;">조회</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="btn_right">
|
<div class="btn_right">
|
||||||
<label for="searchCondition" class="label">검색 조건: ${mjonMsgSentVO.searchCondition == '2' ? '발신번호' : '문자내용'}</label>
|
<label for="searchCondition" class="label">검색 조건: ${mjonMsgSentVO.searchCondition == '2' ? '발신번호' : mjonMsgSentVO.searchCondition == '3' ? '문자내용' : '수신번호'}</label>
|
||||||
<select name="searchCondition" id="searchCondition" class="selType2 select_btn">
|
<select name="searchCondition" id="searchCondition" class="selType2 select_btn">
|
||||||
<option value="2" <c:if test="${mjonMsgSentVO.searchCondition == '2'}">selected</c:if> >발신번호</option>
|
<option value="2" <c:if test="${mjonMsgSentVO.searchCondition == '2'}">selected</c:if> >발신번호</option>
|
||||||
<option value="3" <c:if test="${mjonMsgSentVO.searchCondition == '3'}">selected</c:if> >문자내용</option>
|
<option value="3" <c:if test="${mjonMsgSentVO.searchCondition == '3'}">selected</c:if> >문자내용</option>
|
||||||
|
<option value="4" <c:if test="${mjonMsgSentVO.searchCondition == '4'}">selected</c:if> >수신번호</option>
|
||||||
</select>
|
</select>
|
||||||
<div class="search">
|
<div class="search">
|
||||||
<label for="id" class="label"></label>
|
<label for="id" class="label"></label>
|
||||||
|
|||||||
@ -10,22 +10,24 @@
|
|||||||
<link rel="stylesheet" href="/publish/css/reset.css">
|
<link rel="stylesheet" href="/publish/css/reset.css">
|
||||||
<link rel="stylesheet" href="/publish/css/jquery.mCustomScrollbar.css">
|
<link rel="stylesheet" href="/publish/css/jquery.mCustomScrollbar.css">
|
||||||
<link rel="stylesheet" href="/publish/css/common.css">
|
<link rel="stylesheet" href="/publish/css/common.css">
|
||||||
|
<link rel="stylesheet" href="/publish/css/style.css">
|
||||||
<link rel="stylesheet" href="/publish/css/button.css">
|
<link rel="stylesheet" href="/publish/css/button.css">
|
||||||
<link rel="stylesheet" href="/publish/css/content.css">
|
<link rel="stylesheet" href="/publish/css/content.css">
|
||||||
<link rel="stylesheet" href="/publish/css/adrbook.css">
|
<link rel="stylesheet" href="/publish/css/adrbook.css">
|
||||||
<link rel="stylesheet" href="/publish/css/font.css">
|
<link rel="stylesheet" href="/publish/css/font.css">
|
||||||
<link rel="stylesheet" href="/publish/css/popupLayer.css">
|
<link rel="stylesheet" href="/publish/css/popupLayer.css">
|
||||||
|
|
||||||
|
|
||||||
<script src="/publish/js/jquery-3.5.0.js"></script>
|
<script src="/publish/js/jquery-3.5.0.js"></script>
|
||||||
<script src="/publish/js/jquery.mCustomScrollbar.concat.min.js"></script>
|
<script src="/publish/js/jquery.mCustomScrollbar.concat.min.js"></script>
|
||||||
<script src="/publish/js/common.js"></script>
|
<script src="/publish/js/common.js"></script>
|
||||||
<script src="/publish/js/content.js"></script>
|
<script src="/publish/js/content.js"></script>
|
||||||
<script src="/publish/js/calendar.js"></script>
|
<script src="/publish/js/calendar.js"></script>
|
||||||
<script src="/publish/js/popupLayer.js"></script>
|
<script src="/publish/js/popupLayer.js"></script>
|
||||||
|
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div class="mask"></div>
|
<div class="mask"></div>
|
||||||
<div data-include-path="/publish/layout/_header.html"></div>
|
<div data-include-path="/publish/layout/_header.html"></div>
|
||||||
@ -36,14 +38,9 @@
|
|||||||
<!-- send top -->
|
<!-- send top -->
|
||||||
<div class="send_top">
|
<div class="send_top">
|
||||||
<!-- tab button -->
|
<!-- tab button -->
|
||||||
<ul class="tabType4">
|
<!-- <%@include file="/WEB-INF/jsp/web/addr/include/topMenu.jsp" %> -->
|
||||||
<li class="tab"><button type="button" onclick="location.href='/publish/adrbook1.html'">주소록관리</button></li>
|
<!--// tab button -->
|
||||||
<li class="tab"><button type="button" onclick="location.href='/publish/adrbook_fax.html'">팩스 주소록관리</button></li>
|
<!-- 주소록 관리 - 폰주소록 등록 -->
|
||||||
<li class="tab"><button type="button" onclick="location.href='/publish/adrbook2.html'">수신거부</button></li>
|
|
||||||
<li class="tab active"><button type="button" onclick="TabType5(this,'4');">폰주소록 등록</button></li>
|
|
||||||
<li class="tab"><button type="button" onclick="location.href='/publish/adrbook3.html'">주소록 입력 대행(무료)</button></li>
|
|
||||||
</ul><!--// tab button -->
|
|
||||||
<!-- 주소록 관리 - 폰주소록 등록 -->
|
|
||||||
<div class="adr_cont current" id="tab5_3">
|
<div class="adr_cont current" id="tab5_3">
|
||||||
<div class="heading">
|
<div class="heading">
|
||||||
<h2>폰주소록 등록</h2>
|
<h2>폰주소록 등록</h2>
|
||||||
@ -53,167 +50,223 @@
|
|||||||
<ul class="tabType1">
|
<ul class="tabType1">
|
||||||
<li class="tab active"><button type="button" onclick="TabType6(this,'1');">네이버 주소록을 이용하여 폰주소록 등록</button></li>
|
<li class="tab active"><button type="button" onclick="TabType6(this,'1');">네이버 주소록을 이용하여 폰주소록 등록</button></li>
|
||||||
<li class="tab"><button type="button" onclick="TabType6(this,'2');">핸드폰 VCF파일로 변환하여 등록</button></li>
|
<li class="tab"><button type="button" onclick="TabType6(this,'2');">핸드폰 VCF파일로 변환하여 등록</button></li>
|
||||||
</ul><!--// tab button -->
|
</ul>
|
||||||
|
<!--// tab button -->
|
||||||
</div>
|
</div>
|
||||||
<!-- 네이버 주소록을 이용하여 등록 -->
|
<!-- 네이버 주소록을 이용하여 등록 -->
|
||||||
<div class="enroll_cont current" id="tab6_1">
|
<div class="enroll_cont current" id="tab6_1">
|
||||||
|
<!-- tab button 주석처리_240423 -->
|
||||||
|
<!-- <ul class="adr_depth3">
|
||||||
|
<li class="tab active"><button type="button" onclick="listTab(this,'1');">안드로이드</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="listTab(this,'2');">아이폰</button></li>
|
||||||
|
</ul> -->
|
||||||
|
<!--// tab button -->
|
||||||
<!-- 네이버 주소록을 이용하여 등록 - 안드로이드 -->
|
<!-- 네이버 주소록을 이용하여 등록 - 안드로이드 -->
|
||||||
<div class="addWrap android eleType_cont current" id="listTab_1">
|
<div class="addWrap android eleType_cont current address" id="listTab_1">
|
||||||
<ul class="add_and">
|
<ul class="add_and">
|
||||||
<li>
|
<li>
|
||||||
<p class="number">01</p>
|
<p class="number">01</p>
|
||||||
<p>구글 플레이 스토어 · 애플 앱스토어에서<strong> 네이버</strong> 앱 다운</p>
|
<p>구글 플레이 스토어 · 애플 앱스토어에서<strong> 네이버</strong> 앱 다운</p>
|
||||||
<img src="/publish/images/content/address_img01.png">
|
<img src="/publish/images/content/address_img01.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">02</p>
|
<p class="number">02</p>
|
||||||
<p>왼쪽 상단 <strong>메뉴</strong> 선택</p>
|
<p>왼쪽 상단 <strong>메뉴</strong> 선택</p>
|
||||||
<img src="/publish/images/content/address_img02.png">
|
<img src="/publish/images/content/address_img02.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">03</p>
|
<p class="number">03</p>
|
||||||
<p>하단 스크롤 후 <br><strong>[내도구] → 주소록</strong> 선택</p>
|
<p>하단 스크롤 후 <br /><strong>[내도구] → 주소록</strong> 선택</p>
|
||||||
<img src="/publish/images/content/address_img03.png">
|
<img src="/publish/images/content/address_img03.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">04</p>
|
<p class="number">04</p>
|
||||||
<p>오른쪽 상단 <strong>메뉴</strong> 선택</p>
|
<p>오른쪽 상단 <strong>메뉴</strong> 선택</p>
|
||||||
<img src="/publish/images/content/address_img04.png">
|
<img src="/publish/images/content/address_img04.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">05</p>
|
<p class="number">05</p>
|
||||||
<p>폰 연락처 <strong>업로드</strong> 선택</p>
|
<p>폰 연락처 <strong>업로드</strong> 선택</p>
|
||||||
<img src="/publish/images/content/address_img05.png">
|
<img src="/publish/images/content/address_img05.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">06</p>
|
<p class="number">06</p>
|
||||||
<p class="txt"><strong>새로고침</strong> 선택</p>
|
<p class="txt"><strong>새로고침</strong> 선택</p>
|
||||||
<img src="/publish/images/content/address_img06.png">
|
<img src="/publish/images/content/address_img06.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">07</p>
|
<p class="number">07</p>
|
||||||
<p>연락처 접근 <strong>허용</strong> 선택</p>
|
<p>연락처 접근 <strong>허용</strong> 선택</p>
|
||||||
<img src="/publish/images/content/address_img07.png">
|
<img src="/publish/images/content/address_img07.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">08</p>
|
<p class="number">08</p>
|
||||||
<p><strong>폰 연락처 업로드</strong> 완료</p>
|
<p><strong>폰 연락처 업로드</strong> 완료</p>
|
||||||
<img src="/publish/images/content/address_img08.png">
|
<img src="/publish/images/content/address_img08.png" />
|
||||||
</li>
|
</li>
|
||||||
<li class="nine">
|
<li class="nine">
|
||||||
<p class="number">09</p>
|
<p class="number">09</p>
|
||||||
<p>PC에서 네이버 메일 접속 후 <strong>상단 주소록 아이콘</strong> 선택</p>
|
<p>PC에서 네이버 메일 접속 후 <strong>상단 주소록 아이콘</strong> 선택</p>
|
||||||
<img src="/publish/images/content/address_img09.png">
|
<img src="/publish/images/content/address_img09.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">10</p>
|
<p class="number">10</p>
|
||||||
<p>연락처 저장 · 내보내기 선택 후 파일 형식(<strong>CSV 또는 XLSX</strong>), 항목, 대상 선택 후 <strong>파일로 저장하기</strong> 클릭</p>
|
<p>연락처 저장 · 내보내기 선택 후 파일 형식(<strong>CSV 또는 XLSX</strong>), 항목, 대상 선택 후 <strong>파일로 저장하기</strong> 클릭</p>
|
||||||
<img src="/publish/images/content/address_img10.png">
|
<img src="/publish/images/content/address_img10.png" />
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="btnWrap">
|
<div class="btnWrap">
|
||||||
<button type="button">주소록 입력 무료대행</button>
|
<button type="button" onclick="moveTab('addrApply'); return false;">주소록 입력 무료대행</button>
|
||||||
<button type="button">주소록 관리 바로가기</button>
|
<button type="button" onclick="moveTab('addr'); return false;">주소록 관리 바로가기</button>
|
||||||
</div>
|
</div>
|
||||||
</div><!--// 네이버 주소록을 이용하여 등록 - 안드로이드 -->
|
</div>
|
||||||
|
<!--// 네이버 주소록을 이용하여 등록 - 안드로이드 -->
|
||||||
|
|
||||||
<!-- 네이버 주소록을 이용하여 등록 - 안드로이드 -->
|
<!-- 네이버 주소록을 이용하여 등록 - 안드로이드 -->
|
||||||
<div class="addWrap iphone eleType_cont" id="listTab_2">
|
<!-- <div class="addWrap iphone eleType_cont" id="listTab_2"> -->
|
||||||
|
<div class="addWrap iphone eleType_cont">
|
||||||
<ul class="add_and">
|
<ul class="add_and">
|
||||||
<li>
|
<li>
|
||||||
<p class="number">01</p>
|
<p class="number">01</p>
|
||||||
<p>애플 앱스토어에서<br/><strong>네이버 주소록</strong> 앱 다운</p>
|
<p>애플 앱스토어에서<br /><strong>네이버 주소록</strong> 앱 다운</p>
|
||||||
<img src="/publish/images/content/add_iphone_img01.png"/>
|
<img src="/publish/images/content/add_iphone_img01.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">02</p>
|
<p class="number">02</p>
|
||||||
<p>네이버 주소록 앱 실행 후<br/><strong>주소록 접근 권한 승인 선택</strong></p>
|
<p>네이버 주소록 앱 실행 후<br /><strong>주소록 접근 권한 승인 선택</strong></p>
|
||||||
<img src="/publish/images/content/add_iphone_img02.png"/>
|
<img src="/publish/images/content/add_iphone_img02.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">03</p>
|
<p class="number">03</p>
|
||||||
<p><strong>원하는 모드를 선택</strong> 후<br/>
|
<p><strong>원하는 모드를 선택</strong> 후<br />
|
||||||
주소록 앱 시작하기 선택</p>
|
주소록 앱 시작하기 선택</p>
|
||||||
<img src="/publish/images/content/add_iphone_img03.png"/>
|
<img src="/publish/images/content/add_iphone_img03.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">04</p>
|
<p class="number">04</p>
|
||||||
<p><strong>내보내기</strong> 완료 후<br/>반드시 확인 버튼 선택</p>
|
<p><strong>내보내기</strong> 완료 후<br />반드시 확인 버튼 선택</p>
|
||||||
<img src="/publish/images/content/add_iphone_img04.png"/>
|
<img src="/publish/images/content/add_iphone_img04.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">05</p>
|
<p class="number">05</p>
|
||||||
<p>PC에서 네이버 주소록 접속 후<br/><strong>연락처 저장·내보내기</strong> 선택</p>
|
<p>PC에서 네이버 주소록 접속 후<br /><strong>연락처 저장·내보내기</strong> 선택</p>
|
||||||
<img src="/publish/images/content/add_iphone_img05.png"/>
|
<img src="/publish/images/content/add_iphone_img05.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">06</p>
|
<p class="number">06</p>
|
||||||
<p class="txt">파일 형식(<strong>CSV 또는 XLSX</strong>), 항목, 대상선택 후<strong>파일로 저장</strong>하기 선택</p>
|
<p class="txt">파일 형식(<strong>CSV 또는 XLSX</strong>), 항목, 대상선택 후<strong>파일로 저장</strong>하기 선택</p>
|
||||||
<img src="/publish/images/content/add_iphone_img06.png"/>
|
<img src="/publish/images/content/add_iphone_img06.png" />
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="btnWrap">
|
<div class="btnWrap">
|
||||||
<button type="button">주소록 입력 무료대행</button>
|
<button type="button" onclick="moveTab('addrApply'); return false;">주소록 입력 무료대행</button>
|
||||||
<button type="button">주소록 관리 바로가기</button>
|
<button type="button" onclick="moveTab('addr'); return false;">주소록 관리 바로가기</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div> <!-- // 네이버 주소록을 이용하여 등록-->
|
</div> <!-- // 네이버 주소록을 이용하여 등록-->
|
||||||
|
|
||||||
<!-- 핸드폰 VCF파일로 변환하여 등록 -->
|
<!-- 핸드폰 VCF파일로 변환하여 등록 -->
|
||||||
<div class="enroll_cont" id="tab6_2">
|
<div class="enroll_cont" id="tab6_2">
|
||||||
<div class="addWrap vcf">
|
<ul class="adr_depth3">
|
||||||
|
<li class="tab active"><button type="button" onclick="listTab(this,'2');">안드로이드</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="listTab(this,'3');">아이폰</button></li>
|
||||||
|
</ul>
|
||||||
|
<div class="addWrap list_cont current galexy" id="listTab_2">
|
||||||
<ul class="add_and">
|
<ul class="add_and">
|
||||||
<li>
|
<li>
|
||||||
<p class="number">01</p>
|
<p class="number">01</p>
|
||||||
<p class="txt">휴대폰 <strong>연락처 앱</strong> 선택</p>
|
<p class="txt">휴대폰 <strong>연락처 앱</strong> 선택</p>
|
||||||
<img src="/publish/images/content/add_vcf_img01.png"/>
|
<img src="/publish/images/content/add_vcf_img01.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">02</p>
|
<p class="number">02</p>
|
||||||
<p>왼쪽 메뉴 클릭 후<br/><strong>연락처 관리 선택</strong></p>
|
<p>왼쪽 메뉴 클릭 후<br /><strong>연락처 관리 선택</strong></p>
|
||||||
<img src="/publish/images/content/add_vcf_img02.png"/>
|
<img src="/publish/images/content/add_vcf_img02.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">03</p>
|
<p class="number">03</p>
|
||||||
<p>연락처 관리에서 <strong>연락처</strong><br/><strong>가져오기/내보내기</strong> 선택</p>
|
<p>연락처 관리에서 <strong>연락처</strong><br /><strong>가져오기/내보내기</strong> 선택</p>
|
||||||
<img src="/publish/images/content/add_vcf_img03.png"/>
|
<img src="/publish/images/content/add_vcf_img03.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">04</p>
|
<p class="number">04</p>
|
||||||
<p class="txt"><strong>연락처 내보내기</strong> 선택</p>
|
<p class="txt"><strong>연락처 내보내기</strong> 선택</p>
|
||||||
<img src="/publish/images/content/add_vcf_img04.png"/>
|
<img src="/publish/images/content/add_vcf_img04.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">05</p>
|
<p class="number">05</p>
|
||||||
<p><strong>내장메모리</strong> 선택 후<br/><strong>핸드폰과 PC 연결</strong></p>
|
<p><strong>내장메모리</strong> 선택 후<br /><strong>핸드폰과 PC 연결</strong></p>
|
||||||
<img src="/publish/images/content/add_vcf_img05.png"/>
|
<img src="/publish/images/content/add_vcf_img05.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">06</p>
|
<p class="number">06</p>
|
||||||
<p><strong>내 PC</strong>에서<br/><strong>본인 핸드폰 기종</strong> 선택</p>
|
<p><strong>내 PC</strong>에서<br /><strong>본인 핸드폰 기종</strong> 선택</p>
|
||||||
<img src="/publish/images/content/add_vcf_img06.png"/>
|
<img src="/publish/images/content/add_vcf_img06.png" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="number">07</p>
|
<p class="number">07</p>
|
||||||
<p><strong>연락처(VCF) 파일</strong> 선택 후<br/>PC 복사(Ctrl+C/Ctrl+V),<br>드래그앤드롭)</p>
|
<p><strong>연락처(VCF) 파일</strong> 선택 후<br />PC 복사(Ctrl+C/Ctrl+V),<br>드래그앤드롭)</p>
|
||||||
<img src="/publish/images/content/add_vcf_img07.png"/>
|
<img src="/publish/images/content/add_vcf_img07.png" />
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="btnWrap">
|
<div class="btnWrap">
|
||||||
<button type="button">주소록 입력 무료대행</button>
|
<button type="button" onclick="moveTab('addrApply'); return false;">주소록 입력 무료대행</button>
|
||||||
<button type="button">주소록 관리 바로가기</button>
|
<button type="button" onclick="moveTab('addr'); return false;">주소록 관리 바로가기</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div><!--// 핸드폰 VCF파일로 변환하여 등록 -->
|
<div class="addWrap list_cont iphone vCard" id="listTab_3">
|
||||||
|
<ul class="add_and">
|
||||||
|
<li>
|
||||||
</div><!--// 주소록 관리 - 폰주소록 등록 -->
|
<p class="number">01</p>
|
||||||
</div><!--// send top -->
|
<p class="txt">
|
||||||
|
<strong>iCloud.com</strong> 접속 후<br> <strong>Apple 계정</strong>으로 로그인
|
||||||
|
</p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img01.png" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="number">02</p>
|
||||||
|
<p><strong>‘연락처’</strong> 앱 선택 및 실행 </p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img02.png" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="number">03</p>
|
||||||
|
<p><strong>모든 연락처</strong> 선택</p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img03.png" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="number">04</p>
|
||||||
|
<p class="txt"><strong>vCard</strong> 내보내기</p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img04.png" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="number">05</p>
|
||||||
|
<p><strong>다운로드 폴더</strong>에<br><strong>iCloud vCards</strong> 파일로 저장</p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img05.png" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="number">06</p>
|
||||||
|
<p><strong>연락처(vCards)</strong>파일 선택 후<br>
|
||||||
|
<strong>PC 바탕화면</strong>에 <br>
|
||||||
|
<strong>복사/붙여넣기</strong>(Ctrl+C/Ctrl+V)</p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img06.png" />
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="btnWrap">
|
||||||
|
<button type="button" onclick="moveTab('addrApply'); return false;">주소록 입력 무료대행</button>
|
||||||
|
<button type="button" onclick="moveTab('addr'); return false;">주소록 관리 바로가기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// 핸드폰 VCF파일로 변환하여 등록 -->
|
||||||
|
</div>
|
||||||
|
<!--// 주소록 관리 - 폰주소록 등록 -->
|
||||||
|
</div>
|
||||||
|
<!--// send top -->
|
||||||
</div>
|
</div>
|
||||||
</div><!--// content 영역 -->
|
</div>
|
||||||
|
<!--// content 영역 -->
|
||||||
<!-- footer -->
|
<!-- footer -->
|
||||||
<div data-include-path="/publish/layout/_footer.html"></div>
|
<div data-include-path="/publish/layout/_footer.html"></div>
|
||||||
<!--// footer 영역 -->
|
<!--// footer 영역 -->
|
||||||
</body></html>
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@ -180,12 +180,24 @@ button.group_move i {background-image: url(/publish/images/content/adress_inters
|
|||||||
.add_and .number {position:absolute;top:-25px;left:50%;transform:translate(-50%, 0);background:url('/publish/images/content/btn_addBg.png') no-repeat 0 0;width:61px;height:61px;background-size: 100%;color:#fff;font-size:16px;text-align: center;line-height:60px;letter-spacing: 0;}
|
.add_and .number {position:absolute;top:-25px;left:50%;transform:translate(-50%, 0);background:url('/publish/images/content/btn_addBg.png') no-repeat 0 0;width:61px;height:61px;background-size: 100%;color:#fff;font-size:16px;text-align: center;line-height:60px;letter-spacing: 0;}
|
||||||
.addWrap.iphone .add_and li:last-child {width: calc(72.5%);margin-right: 0 !important;padding-bottom: 20px;}
|
.addWrap.iphone .add_and li:last-child {width: calc(72.5%);margin-right: 0 !important;padding-bottom: 20px;}
|
||||||
.addWrap.vcf {margin-top:40px;}
|
.addWrap.vcf {margin-top:40px;}
|
||||||
|
.addWrap.galaxy {margin-top:40px;}
|
||||||
|
.addWrap.iphone.vCard{display:none;}
|
||||||
.addWrap .btnWrap {text-align:center;margin: 20px 0;}
|
.addWrap .btnWrap {text-align:center;margin: 20px 0;}
|
||||||
.addWrap .btnWrap button {width:220px;height:60px;font-size:20px;border-radius: 5px;transition: 0.3s ease;}
|
.addWrap .btnWrap button {width:220px;height:60px;font-size:20px;border-radius: 5px;transition: 0.3s ease;}
|
||||||
.addWrap .btnWrap button:hover {box-shadow:0px 0px 5px 4px rgb(0 44 154 / 15%);transition: 0.3s ease;}
|
.addWrap .btnWrap button:hover {box-shadow:0px 0px 5px 4px rgb(0 44 154 / 15%);transition: 0.3s ease;}
|
||||||
.addWrap .btnWrap button:nth-child(1) {background-color:#002c9a;color:#fff;margin-right:5px;}
|
.addWrap .btnWrap button:nth-child(1) {background-color:#002c9a;color:#fff;margin-right:5px;}
|
||||||
.addWrap .btnWrap button:nth-child(2) {background-color:#fff;color:#002c9a;border:1px solid #002c9a;}
|
.addWrap .btnWrap button:nth-child(2) {background-color:#fff;color:#002c9a;border:1px solid #002c9a;}
|
||||||
|
|
||||||
|
|
||||||
|
.addWrap.iphone.vCard li{position:relative;width:calc((100%/4) - 32px);height:480px;}
|
||||||
|
.addWrap.iphone.vCard li:nth-child(n+4){height:440px;}
|
||||||
|
.addWrap.iphone.vCard img{position:absolute;width:100%;bottom:0;left:0;}
|
||||||
|
.addWrap.iphone.vCard li:nth-child(2){width:47%;}
|
||||||
|
.addWrap.iphone.vCard li:nth-child(3)::after{display:none;}
|
||||||
|
.addWrap.iphone.vCard li:nth-child(4){margin:25px 32px 25px 0;}
|
||||||
|
.addWrap.iphone.vCard .add_and li:nth-child(4)::after{display:block;background: url(/publish/images/content/icon_arrR.png) no-repeat 0 0;}
|
||||||
|
.addWrap.iphone.vCard .add_and li:last-child{width:calc((100%/4) - 32px);}
|
||||||
|
|
||||||
/* 주소록 등록_수정 */
|
/* 주소록 등록_수정 */
|
||||||
.eleType_cont.current.address{margin:40px 0 0 0;}
|
.eleType_cont.current.address{margin:40px 0 0 0;}
|
||||||
.addWrap.android .add_and .nine {width:calc(100%);}
|
.addWrap.android .add_and .nine {width:calc(100%);}
|
||||||
@ -226,6 +238,16 @@ button.group_move i {background-image: url(/publish/images/content/adress_inters
|
|||||||
.search_group_bottom2 .btnWrap2::after {display:none;}
|
.search_group_bottom2 .btnWrap2::after {display:none;}
|
||||||
.search_group_bottom2 .btnWrap2::before {display:none;}
|
.search_group_bottom2 .btnWrap2::before {display:none;}
|
||||||
.search_group_bottom2 .btnWrap2 .selType2 {width:125px;}
|
.search_group_bottom2 .btnWrap2 .selType2 {width:125px;}
|
||||||
|
|
||||||
|
/* 폰주소록 등록 */
|
||||||
|
.addWrap.iphone.vCard li{width:calc((100%/3) - 32px);height:550px}
|
||||||
|
.addWrap.iphone.vCard li:nth-child(n+4){height:550px;}
|
||||||
|
.addWrap.iphone.vCard li:nth-child(2){width:63%;}
|
||||||
|
.addWrap.iphone.vCard li:nth-child(2)::after,.addWrap.iphone.vCard li:nth-child(5)::after{display:none;}
|
||||||
|
.addWrap.iphone.vCard li:nth-child(3)::after{display:block;}
|
||||||
|
.addWrap.iphone.vCard li:nth-child(4){margin:25px 32px 25px 0;}
|
||||||
|
.addWrap.iphone.vCard .add_and li:nth-child(4)::after{display:block;background: url(/publish/images/content/icon_arrR.png) no-repeat 0 0;}
|
||||||
|
.addWrap.iphone.vCard .add_and li:last-child{width:calc((100%/3) - 32px);}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 159 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 27 KiB |
@ -739,11 +739,14 @@ function TabType2(obj, tabId) {
|
|||||||
$('.tab_depth3.tDep2_cateCode a').removeClass('on');
|
$('.tab_depth3.tDep2_cateCode a').removeClass('on');
|
||||||
$('.tab_depth3.tDep2_cateCode a').eq(0).addClass('on');
|
$('.tab_depth3.tDep2_cateCode a').eq(0).addClass('on');
|
||||||
//해시태그
|
//해시태그
|
||||||
$('.tab_depth4 .tDep2_hashTag a').removeClass('on');
|
// $('.tab_depth4 .tDep2_hashTag a').removeClass('on');
|
||||||
$('.tab_depth4 .tDep2_hashTag a').eq(0).addClass('on');
|
// $('.tab_depth4 .tDep2_hashTag a').eq(0).addClass('on');
|
||||||
|
//
|
||||||
|
// $(".api_guide_con").not($tabCn).removeClass("current");
|
||||||
|
// $(".api_guide_con").not($tabCn).fadeOut(0);
|
||||||
|
|
||||||
$(".api_guide_con").not($tabCn).removeClass("current");
|
+ $(".api_guide_con").not($tabCn).removeClass("current").fadeOut(0);
|
||||||
$(".api_guide_con").not($tabCn).fadeOut(0);
|
+ $(".api_guide").not($tabCn).removeClass("current").fadeOut(0);
|
||||||
|
|
||||||
$(".api_guide_con").not($tabCn).removeClass("current");
|
$(".api_guide_con").not($tabCn).removeClass("current");
|
||||||
$(".api_guide_con").not($tabCn).fadeOut(0);
|
$(".api_guide_con").not($tabCn).fadeOut(0);
|
||||||
@ -822,7 +825,7 @@ function TabType5(obj, tabId) {
|
|||||||
function TabType6(obj, tabId) {
|
function TabType6(obj, tabId) {
|
||||||
var $tab = $(obj).closest("li");
|
var $tab = $(obj).closest("li");
|
||||||
var $tabPrev = $(obj).closest("li").prev("li");
|
var $tabPrev = $(obj).closest("li").prev("li");
|
||||||
$tab.addClass("active");
|
$tab.addClass("active").find("button").removeAttr("style");
|
||||||
$tab.find("button").attr("title", "선택됨");
|
$tab.find("button").attr("title", "선택됨");
|
||||||
$tab.siblings("li.tab").removeClass("active");
|
$tab.siblings("li.tab").removeClass("active");
|
||||||
$tab.siblings("li.tab").find("button").removeAttr("title");
|
$tab.siblings("li.tab").find("button").removeAttr("title");
|
||||||
|
|||||||
@ -1,66 +1,119 @@
|
|||||||
pre code.hljs {
|
pre code.hljs {
|
||||||
display: block;
|
display: block;
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
padding: 1em
|
padding: 1em
|
||||||
}
|
}
|
||||||
|
|
||||||
code.hljs {
|
code.hljs {
|
||||||
padding: 3px 5px
|
padding: 3px 5px
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
Date: 17.V.2011
|
Date: 17.V.2011
|
||||||
Author: pumbur <pumbur@pumbur.net>
|
Author: pumbur <pumbur@pumbur.net>
|
||||||
*/
|
*/
|
||||||
.hljs {
|
.hljs {
|
||||||
background: #222;
|
background: #222;
|
||||||
color: #aaa
|
color: #aaa
|
||||||
}
|
}
|
||||||
|
|
||||||
.hljs-subst {
|
.hljs-subst {
|
||||||
color: #aaa
|
color: #aaa
|
||||||
}
|
}
|
||||||
|
|
||||||
.hljs-section {
|
.hljs-section {
|
||||||
color: #fff
|
color: #fff
|
||||||
}
|
}
|
||||||
.hljs-comment,
|
|
||||||
.hljs-quote,
|
.hljs-comment, .hljs-quote, .hljs-meta {
|
||||||
.hljs-meta {
|
color: #444
|
||||||
color: #444
|
|
||||||
}
|
}
|
||||||
.hljs-string,
|
|
||||||
.hljs-symbol,
|
.hljs-string, .hljs-symbol, .hljs-bullet, .hljs-regexp {
|
||||||
.hljs-bullet,
|
color: #ffcc33
|
||||||
.hljs-regexp {
|
|
||||||
color: #ffcc33
|
|
||||||
}
|
}
|
||||||
.hljs-number,
|
|
||||||
.hljs-addition {
|
.hljs-number, .hljs-addition {
|
||||||
color: #00cc66
|
color: #00cc66
|
||||||
}
|
}
|
||||||
.hljs-built_in,
|
|
||||||
.hljs-literal,
|
.hljs-built_in, .hljs-literal, .hljs-type, .hljs-template-variable,
|
||||||
.hljs-type,
|
.hljs-attribute, .hljs-link {
|
||||||
.hljs-template-variable,
|
color: #32aaee
|
||||||
.hljs-attribute,
|
|
||||||
.hljs-link {
|
|
||||||
color: #32aaee
|
|
||||||
}
|
}
|
||||||
.hljs-keyword,
|
|
||||||
.hljs-selector-tag,
|
.hljs-keyword, .hljs-selector-tag, .hljs-name, .hljs-selector-id,
|
||||||
.hljs-name,
|
.hljs-selector-class {
|
||||||
.hljs-selector-id,
|
color: #6644aa
|
||||||
.hljs-selector-class {
|
|
||||||
color: #6644aa
|
|
||||||
}
|
}
|
||||||
.hljs-title,
|
|
||||||
.hljs-variable,
|
.hljs-title, .hljs-variable, .hljs-deletion, .hljs-template-tag {
|
||||||
.hljs-deletion,
|
color: #bb1166
|
||||||
.hljs-template-tag {
|
|
||||||
color: #bb1166
|
|
||||||
}
|
}
|
||||||
.hljs-section,
|
|
||||||
.hljs-doctag,
|
.hljs-section, .hljs-doctag, .hljs-strong {
|
||||||
.hljs-strong {
|
font-weight: bold
|
||||||
font-weight: bold
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.hljs-emphasis {
|
.hljs-emphasis {
|
||||||
font-style: italic
|
font-style: italic
|
||||||
|
}
|
||||||
|
|
||||||
|
pre code.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 1em
|
||||||
|
}
|
||||||
|
|
||||||
|
code.hljs {
|
||||||
|
padding: 3px 5px
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Date: 17.V.2011
|
||||||
|
Author: pumbur <pumbur@pumbur.net>
|
||||||
|
*/
|
||||||
|
.hljs {
|
||||||
|
background: #222;
|
||||||
|
color: #aaa
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-subst {
|
||||||
|
color: #fff
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-section {
|
||||||
|
color: #fff
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment, .hljs-quote, .hljs-meta {
|
||||||
|
color: #444
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string, .hljs-symbol, .hljs-bullet, .hljs-regexp {
|
||||||
|
color: #ffcc33
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-number, .hljs-addition {
|
||||||
|
color: #fff
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-built_in, .hljs-literal, .hljs-type, .hljs-template-variable,
|
||||||
|
.hljs-attribute, .hljs-link {
|
||||||
|
color: #32aaee
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword, .hljs-selector-tag, .hljs-name, .hljs-selector-id,
|
||||||
|
.hljs-selector-class {
|
||||||
|
color: #6644aa
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-title, .hljs-variable, .hljs-deletion, .hljs-template-tag {
|
||||||
|
color: #bb1166
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-section, .hljs-doctag, .hljs-strong {
|
||||||
|
font-weight: bold
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic
|
||||||
}
|
}
|
||||||