BackEnd

[API]coolsms(쿨에스엠에스)를 이용한 문자 전송 구현

Hojung7 2024. 12. 2. 17:21
CoolSMS란?

 

- 카카오 알림톡 및 문자메시지 웹 발송을 지원해주는 REST API 제공 서비스

- 단문, 장문, 포토 메시지 등을 보낼 수 있음

 

 

세상에서 가장 안정적이고 빠른 메시지 발송 플랫폼 - 쿨에스엠에스

손쉬운 결제 전용계좌, 신용카드, 계좌이체 등 국내 결제 뿐만 아니라 해용신용카드로 한번의 카드번호 등록으로 자동충전까지 지원합니다. 전용계좌, 신용카드, 계좌이체 등 다양한 결제 방식

coolsms.co.kr

 

1. 가입후 상단 메뉴에서 개발/연동  → API Key관리 클릭

 

2. 새로운 API Key 생성

 

3. 발급받은 API KEY, SECRET 키 저장해두기

 

[build.gradle] 의존성 주입

implementation 'net.nurigo:sdk:4.3.0'

** Gradle 버전 확인하고 주입하기

 

[config.properties]

coolsms.apikey="발급 받은 apikey"
coolsms.apisecret="발급 받은 apisecret"
coolsms.fromnumber="등록한 발신번호"

 

 

[javaScript]

// 작가 거절
function rejectArtists(memberNo) {
  if (!confirm("이 작가를 거절하시겠습니까?")) return;

   // 해당 작가의 전화번호를 가져옴 (예시로 임시 전화번호 사용)

  // 거절 요청과 문자 전송
  fetch(`/manage/reject`, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: memberNo
  })
    .then((response) => {
      if (!response.ok) { throw new Error("거절 실패"); }
      return response.text();
    })
    .then((data) => {
      alert(`거절 성공 : ${data}`);

      // 문자 전송 호출
      sendRejectionMessage(memberNo);
      getList(4, page4); // 목록 새로고침
    })
    .catch(error => alert(`거절 실패 : ${error.message}`));
}


// 문자 전송 함수 
function sendRejectionMessage(memberNo){
  fetch(`/api/message/send`, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: memberNo
  })
    .then((response) => {
      if (!response.ok) { throw new Error("문자 전송 실패"); }
      return response.text();
    })
    .then((data) => {
      alert(`문자 전송 성공: ${data}`);
    })
    .catch((error) => {
      console.error("문자 전송 에러:", error);
      alert(`문자 전송 실패: ${error}`);
    });
}

 

[Controller]

package edu.kh.plklj.message.controller;

import java.util.Map;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import edu.kh.plklj.message.service.MessageService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
@RequestMapping("/api/message")
public class MessageController {

	private final MessageService messageService;

	// 생성자 주입
	public MessageController(MessageService messageService) {
		this.messageService = messageService;
	}

	// 문자 전송 API
	@PostMapping("/send")
	@ResponseBody
	public String sendRejectionMessage(@RequestBody int memberNo) {

	    // 문자 전송
	    int result = messageService.sendSMS(memberNo); // 문자 전송 서비스 호출
	    if(result > 0) return "거절 및 문자 전송 성공";
	    else return "실패";
	}
	
	

}

 

[service]

package edu.kh.plklj.message.service;



import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Service;

import edu.kh.plklj.main.dto.Member;
import edu.kh.plklj.sms.mapper.SmsMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import javax.annotation.PostConstruct;

import net.nurigo.sdk.NurigoApp;
import net.nurigo.sdk.message.model.Message;
import net.nurigo.sdk.message.request.SingleMessageSendingRequest;
import net.nurigo.sdk.message.response.SingleMessageSentResponse;
import net.nurigo.sdk.message.service.DefaultMessageService;

@Slf4j
@Service
@PropertySource("classpath:/config.properties")
public class MessageServiceImpl implements MessageService {

	@Autowired
	private SmsMapper mapper;
    
    @Value("${coolsms.apikey}")
    private String apiKey;

    @Value("${coolsms.apisecret}")
    private String apiSecret;

    @Value("${coolsms.fromnumber}")
    private String fromNumber;
    
    @Override
    public int sendSMS(int memberNo) {
    
    DefaultMessageService messageService = NurigoApp.INSTANCE.initialize(apiKey, apiSecret, "https://api.coolsms.co.kr");
    	Member member = mapper.getSmsMember(memberNo);
    	Message message = new Message();
        // 발신번호 및 수신번호는 반드시 01012345678 형태로 입력되어야 합니다.
    	message.setFrom(fromNumber);      // 발신 번호
    	message.setTo(member.getMemberPhone());    // 수신 번호
    	message.setText(member.getMemberName()+"님의 작가 신청이 승인되지 않아 안내드립니다.");    // 메시지 내용

        try {
          // 메시지 전송
    	messageService.send(message);	
      } catch (Exception e) {
          e.printStackTrace();
          log.info("Failed to send message. Error: " + e.getMessage());
          return 0;
      }
        return 1;
    }

	
}

 

#결과