Spring Boot配置阿里云短信SDK V2(Kotlin版)

251 阅读1分钟

业务需求需要对接阿里云短信,根据阿里云官方文档固有此文。

阿里云短信V2

package com.demo.service

import com.aliyuncs.CommonRequest
import com.aliyuncs.CommonResponse
import com.aliyuncs.DefaultAcsClient
import com.aliyuncs.IAcsClient
import com.aliyuncs.exceptions.ClientException
import com.aliyuncs.exceptions.ServerException
import com.aliyuncs.profile.DefaultProfile
import org.springframework.beans.factory.annotation.Value
import org.springframework.stereotype.Service

/**
 * @author watson haw
 * @date 2021/5/21 2:30 下午
 */

interface IAliyunSmsService {
    fun sendSms(PhoneNumbers: String, 
                SignName: String, 
                TemplateCode: String,
                TemplateParam: String): String
    fun sendSmsBatch(
        PhoneNumberList: String,
        SignName: String,
        TemplateCode: String,
        TemplateParam: String
    ): String
}

@Service
class AliyunSmsService : IAliyunSmsService {
    @Value("\${aliyun.accessKeyId}")
    lateinit var accessKeyId: String

    @Value("\${aliyun.accessSecret}")
    lateinit var accessSecret: String

    @Value("\${aliyun.sms.region}")
    lateinit var region: String

    @Value("\${aliyun.sms.signName}")
    lateinit var signName: String


    override fun sendSms(
        PhoneNumbers: String,
        SignName: String,
        TemplateCode: String,
        TemplateParam: String
    ): String {
        // 初始化参数
        val profile = DefaultProfile.getProfile(region, accessKeyId, accessSecret)
        val client: IAcsClient = DefaultAcsClient(profile)
        // 拼装请求
        val request = CommonRequest()
        request.sysMethod = com.aliyuncs.http.MethodType.POST
        request.sysDomain = "dysmsapi.aliyuncs.com"
        request.sysVersion = "2017-05-25"
        request.sysAction = "SendSms"
        request.putQueryParameter("TemplateCode", TemplateCode)
        request.putQueryParameter("TemplateParam", TemplateParam)
        request.putQueryParameter("SignName", SignName)
        request.putQueryParameter("PhoneNumbers", PhoneNumbers)
        // 发送请求
        try {
            val response: CommonResponse = client.getCommonResponse(request)
            return response.data
        } catch (e: ServerException) {
            e.printStackTrace()
        } catch (e: ClientException) {
            e.printStackTrace()
        }
        return "获取短信接口失败"
    }

    override fun sendSmsBatch(
        PhoneNumberList: String,
        SignName: String,
        TemplateCode: String,
        TemplateParam: String
    ): String {
        val profile = DefaultProfile.getProfile(region, accessKeyId, accessSecret)
        val client: IAcsClient = DefaultAcsClient(profile)
        // 拼装请求
        val request = CommonRequest()
        request.sysMethod = com.aliyuncs.http.MethodType.POST
        request.sysDomain = "dysmsapi.aliyuncs.com"
        request.sysVersion = "2017-05-25"
        request.sysAction = "SendBatchSms"
        request.putQueryParameter("TemplateCode", TemplateCode)
        request.putQueryParameter("TemplateParamJson", TemplateParam)
        request.putQueryParameter("SignNameJson", SignName)
        request.putQueryParameter("PhoneNumberJson", PhoneNumberList)
        // 发送请求
        try {
            val response: CommonResponse = client.getCommonResponse(request)
            return response.data
        } catch (e: ServerException) {
            e.printStackTrace()
        } catch (e: ClientException) {
            e.printStackTrace()
        }
        return "获取短信接口失败"
    }
}

Spring Boot application.yml配置

aliyun:
  accessKeyId: 你的阿里云keyid
  accessSecret: 你的阿里云秘钥
  sms:
    region: 你的短信资源
    signName: 你的过审短信签名