SMS를 이용한 전화번호 인증 서비스를 개발하기 위해 많은 서비스들을 찾아봤다.
서비스를 제공하는 업체가 Twillo, 퍼플북등 다양하게 있었다.
그 중에서도 나에게 친숙하고 국내에 있는 대기업인 네이버 클라우드 플랫폼을 이용하기로 했다.
링크 ->https://www.ncloud.com/?language=ko-KR
해당 화면에서 프로젝트 생성하기를 누르고 이용하고자 하는 서비스를 체크하여 프로젝트를 생성하면 된다.
https://apidocs.ncloud.com/ko/ai-application-service/sens/에 해당 API에 관한 설명이 자세하게 설명이 되어 있다.
해당 문자 서비스 API를 쓰려면 다음과 같이 4가지 요소가 필요하다. 시그니쳐 키를 얻는 방법은
다음과 같다.
String getSignature(
String serviceId, String timeStamp, String accessKey, String secretKey) {
var space = " "; // one space
var newLine = "\n"; // new line
var method = "POST"; // method
var url = "/sms/v2/services/$serviceId/messages";
var buffer = new StringBuffer();
buffer.write(method);
buffer.write(space);
buffer.write(url);
buffer.write(newLine);
buffer.write(timeStamp);
buffer.write(newLine);
buffer.write(accessKey);
print(buffer.toString());
/// signing key
var key = utf8.encode(secretKey);
var signingKey = new Hmac(sha256, key);
var bytes = utf8.encode(buffer.toString());
var digest = signingKey.convert(bytes);
String signatureKey = base64.encode(digest.bytes);
return signatureKey;
}
출처 : https://g-y-e-o-m.tistory.com/167 (원작자님 감사합니다.......)
TimeStamp는 사용하는 그날인 DateTime.now()를 사용하면 된다.
accesskey 발급 방법 : NaverCloudPlatform - 내 계정 관리 - 인증키 관리 - 인증키 발급 / 발급한 인증키 사용
secretKey 발급 방법 : NaverCloudPlatform - 내 계정 관리 - 인증키 관리 - 발급한 인증키의 SecretKey 사용
void sendSMS(String phoneNumber) async{
Map data = {
"type":"SMS",
"contentType":"COMM",
"countryCode":"82",
"from":"1234567890",
"content" : "ABCD" -- (A),
"messages":[
{
"to":phoneNumber,
"content":"EFGH" -- (B)
}
],
};
var result = await http.post(
"https://sens.apigw.ntruss.com/sms/v2/services/${Uri.encodeComponent('SecretKey')}/messages",
headers: <String, String>{
"accept" : "application/json",
'content-Type': 'application/json; charset=UTF-8',
'x-ncp-apigw-timestamp' :timeStamp,
'x-ncp-iam-access-key': AccessKey,
'x-ncp-apigw-signature-v2' : getSignature(Uri.encodeComponent(OpenAPIKey-ID),timeStamp,
AccessKey, SecretKey)
},
body: json.encode(data)
);
print(result.body);
}
함수내에 명사로 들어가 있는 값들은 4번항목의 설명에 맞추어 변환을 해주면 된다.
Map data안에 content가 두 개가 있는데 실제로 문자가 발송 되는 내용은 (B)의 Text를 따라간다.
그렇지만 A부분을 지우고 사용을 하면 에러가 발생한다.
그렇기에 비우지 않고 사용하면 아무 문제 없이 사용할 수 있을 것이다.
혹시 사이드 프로젝트나 회사 업무에 필요하게 되어서 이 기능을 처음 사용하게 될 때 요금에 대한 걱정이 있을수도 있다. 네이버 플랫폼을 선택한 이유중 하나는 무료 크래딧이다. 기본적으로 매월 50건의 무료 메세지를 발송 할 수 있으며 처음 네이버 클라우드 플랫폼 가입하는 사람에게는 10만 크래딧이 무료 제공된다. 그렇기에 요금에 대한 걱정 없이 개발만 열심히 하면 될 것이다!!
안녕하세요 제가 위 내용 따라 했을 때 error:200이 나오는데 해결 방법이 있을까요?