Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- G1다이아몬드
- 스프링 프레임 워크
- DATABASE
- Windows 10
- G1diamond
- NAVER SMS
- 지원다이아몬드
- Spring
- 허먼밀러
- NAVER API
- java
- pom.xml
- SpringMVC
- 종로다이아반지
- 웨딩밴드
- WINDOWS10
- PKIX
- 웨딩링
- ora-00984
- naver cloud platform
- ORA-65096
- 종로예물
- 당근마켓
- 포맷
- ServerTimeZone
- Oracle
- oracle db
- 윈도우10
- cloud outbound mailer
- SENS API
Archives
- Today
- Total
더 나은 개발자가 되고싶다..
[java]Naver 문자 API SENS SMS 사용하기 본문
api 문서
https://apidocs.ncloud.com/ko/ai-application-service/sens/sms_v2/
public class sens_sms_v2 {
public static void main(String[] args) {
String hostNameUrl = "https://sens.apigw.ntruss.com"; // 호스트 URL
String requestUrl= "/sms/v2/services/"; // 요청 URL
String requestUrlType = "/messages"; // 요청 URL
String accessKey = ""; // 네이버 클라우드 플랫폼 회원에게 발급되는 개인 인증키
String secretKey = ""; // 2차 인증을 위해 서비스마다 할당되는 service secret
String serviceId = ""; // 프로젝트에 할당된 SMS 서비스 ID
String method = "POST"; // 요청 method
String timestamp = Long.toString(System.currentTimeMillis()); // current timestamp (epoch)
requestUrl += serviceId + requestUrlType;
String apiUrl = hostNameUrl + requestUrl;
// JSON 을 활용한 body data 생성
JSONObject bodyJson = new JSONObject();
JSONObject toJson = new JSONObject();
JSONArray toArr = new JSONArray();
toJson.put("subject",""); // 메시지 제목 * LMS Type에서만 사용할 수 있습니다.
toJson.put("content",""); // 메시지 내용 * Type별로 최대 byte 제한이 다릅니다.* SMS: 80byte / LMS: 2000byte
toJson.put("to",""); // 수신번호 목록 * 최대 50개까지 한번에 전송할 수 있습니다.
toArr.add(toJson);
bodyJson.put("type",""); // 메시지 Type (sms | lms)
bodyJson.put("contentType",""); // 메시지 내용 Type (AD | COMM) * AD: 광고용, COMM: 일반용 (default: COMM) * 광고용 메시지 발송 시 불법 스팸 방지를 위한 정보통신망법 (제 50조)가 적용됩니다.
bodyJson.put("countryCode","82"); // 국가 전화번호
bodyJson.put("from",""); // 발신번호 * 사전에 인증/등록된 번호만 사용할 수 있습니다.
bodyJson.put("subject",""); // 메시지 제목 * LMS Type에서만 사용할 수 있습니다.
bodyJson.put("content",""); // 메시지 내용 * Type별로 최대 byte 제한이 다릅니다.* SMS: 80byte / LMS: 2000byte
bodyJson.put("messages", toArr);
String body = bodyJson.toJSONString();
System.out.println(body);
try {
URL url = new URL(apiUrl);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setUseCaches(false);
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestProperty("content-type", "application/json");
con.setRequestProperty("x-ncp-apigw-timestamp", timestamp);
con.setRequestProperty("x-ncp-iam-access-key", accessKey);
con.setRequestProperty("x-ncp-apigw-signature-v2", makeSignature(requestUrl, timestamp, method, accessKey, secretKey));
con.setRequestMethod(method);
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.write(body.getBytes());
wr.flush();
wr.close();
int responseCode = con.getResponseCode();
BufferedReader br;
System.out.println("responseCode" +" " + responseCode);
if(responseCode==202) { // 정상 호출
br = new BufferedReader(new InputStreamReader(con.getInputStream()));
} else { // 에러 발생
br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
}
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = br.readLine()) != null) {
response.append(inputLine);
}
br.close();
System.out.println(response.toString());
} catch (Exception e) {
System.out.println(e);
}
}
public static String makeSignature(String url, String timestamp, String method, String accessKey, String secretKey) throws NoSuchAlgorithmException, InvalidKeyException {
String space = " "; // one space
String newLine = "\n"; // new line
String message = new StringBuilder()
.append(method)
.append(space)
.append(url)
.append(newLine)
.append(timestamp)
.append(newLine)
.append(accessKey)
.toString();
SecretKeySpec signingKey;
String encodeBase64String;
try {
signingKey = new SecretKeySpec(secretKey.getBytes("UTF-8"), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(signingKey);
byte[] rawHmac = mac.doFinal(message.getBytes("UTF-8"));
encodeBase64String = Base64.getEncoder().encodeToString(rawHmac);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
encodeBase64String = e.toString();
}
return encodeBase64String;
}
}
문자 보내는 요청 java파일 필요한 부분에 값만 넣어서 실행하면 된다.!!
※ 간혹 전송에 성공했다고 나오는데 막상 문자가 오지 않는 경우가 있다.
3018번 에러코드가 나오는데 이는 발신번호가 통신사 부가서비스중 번호 도용 문자서비스 차단 에 가입되었어서 그렇다.. KT기준 해지하고나서 약 4시간정도 후 정상 작동 하였다.
'코딩 > Java' 카테고리의 다른 글
[Java] Naver Cloud Platform _ Cloud Outbound Mailer 사용하기 (0) | 2020.12.10 |
---|---|
[Java Day01]변수와 타입 (0) | 2020.05.26 |