如果通过阿里云短信服务产品发送短信。需要做以下操作
- 1、登录阿里云,开启短信服务。
- 2、创建短信api模板及短信内容类型,定义短信内容的时候如果有变量,则使用如${code}的形式,如果使用其他内容则查看产品文档。
- 3、获取阿里云ACCESS_ID和密钥
- 4、代码如下
添加短信依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibabacloud-dysmsapi20170525</artifactId>
<version>2.0.22</version>
</dependency>
import cn.hutool.core.date.DateUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.sdk.service.dysmsapi20170525.AsyncClient;
import com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsResponse;
import com.google.gson.Gson;
import darabonba.core.client.ClientOverrideConfiguration;
import lombok.extern.slf4j.Slf4j;
import java.util.Date;
import java.util.TimerTask;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
/**
* 短信发送服务
* @author zmd
*/
@Slf4j
public class SendSmsService extends TimerTask {
private AppletUser appletUser;
private RepairOrder repairOrder;
public SendSmsService(AppletUser appletUser, RepairOrder repairOrder){
this.appletUser = appletUser;
this.repairOrder = repairOrder;
}
@Override
public void run() {
SmsProperties smsProperties = SpringUtil.getBean(SmsProperties.class);
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
.accessKeyId(OCRConstant.ACCESS_ID)
.accessKeySecret(OCRConstant.ACCESS_SECRET)
.build());
AsyncClient client = AsyncClient.builder()
.region("cn-hangzhou")
.credentialsProvider(provider)
.overrideConfiguration(ClientOverrideConfiguration.create()
.setEndpointOverride("dysmsapi.aliyuncs.com")).build();
// String timeStr = DateUtil.format(this.repairOrder.getDateOfArrival(),"yyyy-MM-dd HH:mm:ss");
String timeStr = DateUtil.format(new Date(),"yyyy-MM-dd");
JSONObject jsonObject = new JSONObject();
jsonObject.put(smsProperties.getTemplateParam(),timeStr);
//{"time":"2022-12-12"}
SendSmsRequest sendSmsRequest = SendSmsRequest.builder()
//接收短信的手机号码
.phoneNumbers(this.appletUser.getPhonenumber())
//短信签名名称
.signName(smsProperties.getSignName())
//短信模板code
.templateCode(smsProperties.getTemplateCode())
//短信模板变量对应的实际值
.templateParam(String.valueOf(jsonObject))
.build();
CompletableFuture<SendSmsResponse> response = client.sendSms(sendSmsRequest);
SendSmsResponse resp = null;
try {
resp = response.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
log.info(new Gson().toJson(resp));
client.close();
}
}