본문 바로가기
Javascript

[Node js] SMS 문자 전송 with Vue js

by YoYoHa 2021. 11. 2.
728x90
반응형

 - SMS 전송 서비스 알리고 API 사용 ( https://smartsms.aligo.in/main.html )

 - 백엔드 ( Node js express )

 - 프론트엔드 ( Vue js )

 

 

1. 알리고 API 셋팅

 - 포인트 충전 : 최소 5만원부터 시작 ㅠㅠ

 - 담당자 추가

 - API Key 발급 신청 : IdenTifier, 발급키 사용해야함

 - 발송 서버 IP 추가 : NodeJS 설치한 서버 IP 추가

- 발신번호 추가

 

2. SMS 전송 백엔드

 - npm install aligoapi --save

var express = require('express');
const aligoapi = require('aligoapi');

var router = express.Router();

var AuthData = {

	// (알리고셋팅 - 발급키)
    key: '',
    
    // (알리고셋팅 - IdenTifier)
    user_id: '',
}

async function sendAction(req, res, cellPhone, authenticationCode) {
    var result = false;
    req.body = {
        /*** 필수값입니다 START ***/
        sender: '01012341234', // (최대 16bytes) 발신번호(알리고셋팅에서 설정한 발신번호)
        receiver: `${cellPhone}`, // 컴마()분기 입력으로 최대 1천명
        msg: `[YOYOSTUDY] SMS 인증번호 [${authenticationCode}]`	// (1~2,000Byte)
        /*** 필수값입니다 END ***/
        //   msg_type: SMS(단문), LMS(장문), MMS(그림문자)
        //   title: 문자제목(LMS, MMS만 허용) // (1~44Byte)
        //   destination: %고객명% 치환용 입력
        //   rdate: 예약일(현재일이상) // YYYYMMDD
        //   rtime: 예약시간-현재시간기준 10분이후 // HHMM
        //   image: 첨부이미지 // JPEG, PNG, GIF
    }
    // req.body 요청값 예시입니다.

    await aligoapi.send(req, AuthData)
        .then((r) => {
            console.log(r)
            if (r.result_code == 1) {
                result = true;
            } else {
                result = false;
            }

        })
        .catch((e) => {
            console.log(r)
            result = false;
        })

    return result;
}

/*  */
router.post('/', async function (req, res, next) {

    var phone = req.body.phone;

    var authentication_code = Math.floor(Math.random() * 90000) + 1;
    var smsSend = sendAction(req, res, phone, authentication_code);

    if(smsSend){
        res.send(JSON.stringify({result: 'success'}));
    }else{
        res.send(JSON.stringify({result: 'fail'}));
    }


});

module.exports = router;

 

3. SMS 전송 프론트엔드

<template>
  <section class="sms_send_container">
    <div class="sms_send_form">
      <span class="sms_send_title">핸드폰 인증</span>
      <input type="number" v-model="phone" />
      <div v-on:click="submit">전송</div>
    </div>
  </section>
</template>

<script>
export default {
  name: "test",
  data(){
    return{
      phone: null
    }
  },
  methods:{
    submit:async function(){
      const res = await fetch('https://test.funidea.co.kr/technology_stack/phone_verification', {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
        },
        body: JSON.stringify({
          'phone': this.phone
        })
      });
      const data = await res.json();
      if(data.result === 'success'){
        alert("SMS 전송 완료");
      }else{
        alert("SMS 전송 실패");
      }
    }
  }
}
</script>

<style scoped>
input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
input{ font-size:15px; }
.sms_send_container{ width:100vw; height:100vh; display:flex; justify-content: center; align-items: center; }
.sms_send_form{ width:450px; height:40px; border:0; display:flex; flex-wrap: wrap; }
.sms_send_title{ width:100%; font-size:22px; font-weight: bold; line-height:40px; border-bottom:2px solid; margin-bottom:20px; }
.sms_send_form input{ width:300px; height:40px; border:0; padding:0; margin:0; border-bottom:1px solid; }
.sms_send_form div{ width:100px; height:40px; margin-left:50px; display:flex; justify-content: center; align-items: center;
  font-size:17px; font-weight:bold; color:white; background-color: #5366cf; cursor:pointer; box-sizing: border-box; padding-top: 3px; }

</style>

 

 

4. RESULT

 

 + 알리고 사이트에서 전송내역 확인 가능

 

728x90
반응형

댓글