引言
在当今数字化时代,短信服务在各种项目中扮演着重要角色,如用户注册验证、订单通知、营销推广等。阿里云短信服务凭借其稳定、高效和丰富的功能,成为众多开发者和企业的首选。本文将详细介绍如何在项目中集成阿里云短信服务,帮助开发者快速上手并实现相关功能。
阿里云短信服务简介
-
服务特点
-
高送达率:依托阿里云强大的通信网络和优化算法,确保短信能够快速、准确地送达用户手机。
-
高并发处理能力:能够支持大规模的短信发送请求,满足企业级应用的需求。
-
丰富的功能:提供多种短信模板类型,支持变量替换,方便个性化定制短信内容。
-
安全可靠:采用多重安全防护机制,保障用户数据和隐私安全。
-
-
应用场景
-
用户注册与登录:发送验证码短信,实现用户身份验证。
-
订单通知:及时通知用户订单状态更新,如发货、配送、完成等。
-
营销推广:向用户发送促销活动、新品推荐等短信,提升用户活跃度和转化率。
-
其他通知:如账户余额提醒、系统公告等。
-
集成步骤
1、注册阿里云账号,开通短信服务
2、创建AccessKey ID和AccessKey Secret
3、创建模板、签名(可直接使用测试模板)
4、在项目中引入依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibabacloud-dysmsapi20170525</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
5、创建工具类
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 org.springframework.stereotype.Component;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
@Component
public class ALIMessageUtil {
public static final String ALIBABA_CLOUD_ACCESS_KEY_ID = "";
public static final String ALIBABA_CLOUD_ACCESS_KEY_SECRET = "";
public static final String ALIBABA_CLOUD_REGION_ID = "cn-qingdao";
public static final String ALIBABA_CLOUD_ENDPOINT = "dysmsapi.aliyuncs.com";
public static final String ALIBABA_CLOUD_SIGNNAME = "阿里云短信测试";
public static final String ALIBABA_CLOUD_TEMPLATE_CODE = "SMS_154950909";
public static boolean sendMessage(String phone, Map<String, Object> params) {
// 阿里云账号凭证配置
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
.accessKeyId(ALIBABA_CLOUD_ACCESS_KEY_ID)
.accessKeySecret(ALIBABA_CLOUD_ACCESS_KEY_SECRET)
.build());
// 异步客户端
AsyncClient client = AsyncClient.builder()
.region(ALIBABA_CLOUD_REGION_ID) // Region ID
.credentialsProvider(provider)
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setEndpointOverride(ALIBABA_CLOUD_ENDPOINT)
)
.build();
// 发送API参数配置
SendSmsRequest sendSmsRequest = SendSmsRequest.builder()
.signName(ALIBABA_CLOUD_SIGNNAME) //签名
.templateCode(ALIBABA_CLOUD_TEMPLATE_CODE) //模板CODE
.phoneNumbers(phone) //接收短信的手机号码
.templateParam(JSONObject.toJSONString(params)) //短信内容
.build();
// 发送短信并且获得返回结果
CompletableFuture<SendSmsResponse> response = client.sendSms(sendSmsRequest);
try {
SendSmsResponse resp = response.get();
System.out.println(new Gson().toJson(resp.getBody()));
return "OK".equals(resp.getBody().getCode());
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭客户端
client.close();
}
return false;
}
}
6、项目中使用即可(发送验证码)
@GetMapping("/getCode")
@Operation(summary = "获取验证码")
public void getCode(@RequestParam String Phone) {
//随机生成六位数字验证码
String code = String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
Map<String, Object> params = new HashMap<>();
params.put("code", code);
ALIMessageUtil.sendMessage(Phone, params);
log.info(Phone+"-已发送短信:" + "验证码为: "+ code);
//将验证码存在Redis中,并且5分钟内有效
}
7、验证测试