스프링 부트에서 Chuanglan 253 SMS 인증 연동

스프링 부트 프로젝트에서 SMS 인증 기능을 구현하기 위한 설정 및 코드 예시입니다.

1. SMS 설정 프로퍼티

sms.url=
sms.username=
sms.password=

실제 값은 Chuanglan 공식 사이트에서 확인 가능합니다.

2. 요청 데이터 모델

public class SmsRequest {
  private String user;
  private String pass;
  private String content;
  private String variables;
  private String schedule;
  private String reportFlag;
  private String ext;
  private String uid;
  private String messageId;
  private String failedCount;
  private String successCount;
  private String recipient;

  // 기본 생성자
  public SmsRequest() {}

  // 필수 파라미터 생성자
  public SmsRequest(String user, String pass, String content, String variables) {
    this.user = user;
    this.pass = pass;
    this.content = content;
    this.variables = variables;
  }

  // 게터/세터 생략
}

3. 응답 데이터 모델

public class SmsReply {
  private String timestamp;
  private String messageId;
  private String error;
  private String failed;
  private String succeeded;
  private String statusCode;

  public String getTimestamp() { return timestamp; }
  public void setTimestamp(String timestamp) { this.timestamp = timestamp; }
  
  // 기타 게터/세터 생략
  
  @Override
  public String toString() {
    return String.format("SmsReply[time=%s, id=%s, error=%s]", 
                         timestamp, messageId, error);
  }
}

4. SMS 발송 유틸리티

public class SmsSender {
  public static String postRequest(String endpoint, String jsonData) {
    try {
      URL url = new URL(endpoint);
      HttpURLConnection conn = (HttpURLConnection) url.openConnection();
      conn.setRequestMethod("POST");
      conn.setConnectTimeout(15000);
      conn.setReadTimeout(3000);
      conn.setDoOutput(true);
      conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
      
      try (OutputStream os = conn.getOutputStream()) {
        os.write(jsonData.getBytes(StandardCharsets.UTF_8));
      }
      
      if (conn.getResponseCode() == 200) {
        return new String(conn.getInputStream().readAllBytes(), StandardCharsets.UTF_8);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }
}

5. 인증 코드 발송 구현

@Service
public class AuthService {
  @Value("${sms.url}") private String apiUrl;
  @Value("${sms.username}") private String apiUser;
  @Value("${sms.password}") private String apiPass;

  public void sendCode(String code, String phone) {
    String message = "【테스트】인증번호: " + code;
    SmsRequest request = new SmsRequest(apiUser, apiPass, message, null, "true", phone);
    
    String jsonPayload = JSON.toJSONString(request);
    String response = SmsSender.postRequest(apiUrl, jsonPayload);
    
    SmsReply reply = JSON.parseObject(response, SmsReply.class);
    if (!"0".equals(reply.getStatusCode())) {
      log.error("SMS 전송 실패: {}", reply);
    }
  }
}

주의사항

  • 【】안의 서명은 Chuanglan에서 승인된 것만 사용 가능
  • API 응답 코드 '0'이 성공을 의미
  • 공식 라이브 데모를 참고할 것
  • 에러 처리 시 API 문서 확인 필수

태그: spring-boot SMS-API java Chuanglan253 Verification-Code

7월 8일 19:22에 게시됨