[Node.js] 네이버 문자 전송 api 사용

송현·2022년 9월 30일

Node.js

목록 보기
4/4
post-thumbnail

개요

회원가입 / 로그인 쪽 추가개발을 진행하다가 디비 구조도 바꾸고, 이것저것 기능이 추가되었다. 그 중 한가지가 네이버 문자 전송 api를 활용해서 휴대폰 번호에 문자를 발송해서 아이디 찾기 / 비밀번호 찾기를 구현해봤다. 그러기 위해서는 Naver Cloud 서비스 중 하나인 SENS를 사용해서 구현해봤다.

필요 API KEY

NCP_serviceID: Service의 ID
구성형태 ex) : ncp:sms:kr:123456789000:test
NCP_accessKey: 마이페이지-인증키 관리에서 얻은 Access Key ID
구성형태 ex) : kDD2lXT1f2jO5jTPlkkk
NCP_secretKey: Access Key ID 옆의 Secret Key
구성형태 ex) : LiLdEUrLs7a5XMzBHcs0DDDF1KyzibH7GU2ENp9d

클라이언트 업체에서 API와 발신번호를 등록해줬다.
header 정보의 x-ncp-iam-access-key를 위해 마이페이지-계정관리-인증키 관리로 이동하여서 Access Key 및 Secret Key를 확인한다.

Access Key ID와 Secret Key

NCP_serviceID

개발화면

인증 번호 받기 버튼을 클릭하면 해당 db내에 저장되어 있는 휴대폰 번호를 우선 조회하고, 휴대폰 번호가 있다면 api를 타고 저장된 번호가 없으면 '해당 번호가 없습니다' 라는 alert창이 나오게 된다.

db에 해당 휴대폰 번호를 조회해서 있으면 위의 사진처럼 인증번호가 오게되고 인증번호를 알맞게 입력해주면 해당 휴대폰번호의 아이디 확인 / 비밀번호 변경으로 이동하게 된다.

작성코드

Access Key, Secret Key, Service Id를 환경변수(.env)에 저장

모듈 전역 변수 선언

const finErrCode = 404;
const axios = require('axios');
const CryptoJS = require('crypto-js');
const date = Date.now().toString();

환경변수에 저장되어 있는 코드 불러오기

const serviceId = process.env.SENS_SERVICE_ID;
const secretKey = process.env.SENS_SECRET_KEY;
const accessKey = process.env.SENS_ACCESS_KEY;
const my_number = process.env.SENS_MYNUM;

휴대폰 번호 및 랜덤문자

const ranStr = randomstring.generate(7);
const phone = req.query.phone

그 외 url 관련

const method = "POST";
const space = " ";
const newLine = "\n";
const url = https://sens.apigw.ntruss.com/sms/v2/services/${uri}/messages;
const url2 = /sms/v2/services/${uri}/messages;

crypto-js 모듈을 이용하여 암호화, 중요 키 암호화

const hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, secretKey);
hmac.update(method);
hmac.update(space);
hmac.update(url2);
hmac.update(newLine);
hmac.update(date);
hmac.update(newLine);
hmac.update(accessKey);
const hash = hmac.finalize();
const signature = hash.toString(CryptoJS.enc.Base64);

axios 사용 api 호출

이런식으로 본인의 코드를 응용하면 직접 web발신 메시지를 보내볼 수 있을 것이다.

API 개발 가이드

https://api.ncloud-docs.com/docs/ko/ai-application-service-sens-smsv2

참고 블로그

  1. https://jae04099.tistory.com/entry/Nodejs-%EB%84%A4%EC%9D%B4%EB%B2%84-%EB%AC%B8%EC%9E%90-%EC%A0%84%EC%86%A1-API-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0feat-axios
  2. https://jae04099.tistory.com/entry/Nodejs-%EB%84%A4%EC%9D%B4%EB%B2%84-%EB%AC%B8%EC%9E%90-%EC%A0%84%EC%86%A1-API-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0feat-axios
profile
송린이

0개의 댓글