提示:阿里云设置方面就省略了。
一、依赖
代码如下(示例):
/*阿里云 短信服务 Java SDK*/
compile group: 'com.aliyun', name: 'aliyun-java-sdk-core', version: '4.5.16'
compile group: 'com.aliyun', name: 'aliyun-java-sdk-dysmsapi', version: '1.1.0'
二、短信工具类
代码如下(示例):
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
* 阿里云短信服务
*/
@Service
public class SmsAliyunService {
private static final Logger log = LoggerFactory.getLogger(SmsAliyunService.class);
// 产品名称:云通信短信API产品,开发者无需替换
private static final String product = "Dysmsapi";
//产品域名,开发者无需替换
private static final String domain = "dysmsapi.aliyuncs.com";
//此处需要替换成开发者自己的AK(在阿里云访问控制台寻找,刚开通的AccessKey)
private static final String accessKeyId = "";
private static final String accessKeySecret = "";
//模板CODE
private static final String templateCode = "";
//短信签名
private static final String signName = "";
/**
* 过程逻辑
*
* @param paramMap
* @return
* @throws com.aliyuncs.exceptions.ClientException
*/
public static SendSmsResponse sendSms(Map<String, String> paramMap) throws ClientException {
//可自助调整超时时间
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
//组装请求对象-具体描述见控制台-文档部分内容
SendSmsRequest request = new SendSmsRequest();
//必填:待发送手机号
request.setPhoneNumbers(paramMap.get("phoneNumber").toString().trim());
//必填:短信签名-可在短信控制台中找到
request.setSignName(paramMap.get("signName").toString()); // TODO 修改成自己的
//必填:短信模板-可在短信控制台中找到
request.setTemplateCode(paramMap.get("templateCode").toString()); // TODO 修改成自己的
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
request.setTemplateParam(paramMap.get("templateParam").toString()); // TODO 修改成自己的
//选填-上行短信扩展码(无特殊需求用户请忽略此字段)
//request.setSmsUpExtendCode(paramMap.get(“extendCode”).toString());
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
//request.setOutId("yourOutId");
//hint 此处可能会抛出异常,注意catch
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
log.info("短信发送成功!");
} else {
log.info("短信发送失败!");
}
return sendSmsResponse;
}
/**
* 发送验证码短信方法,外部调用
* <p>
* 验证码${code},您正在注册成为${product}用户,感谢您的支持!
* templateParam 需要josn格式 替换${code} ${product}内容
*
* @param phoneNumber 接收者的手机号
* @return msg
* @throws com.aliyuncs.exceptions.ClientException
*/
public static String sendMsg(String phoneNumber) throws ClientException {
String randomNum = createRandomNum(4);
String templateParam = "{\"code\": \"" + randomNum + "\",\"product\":\"客服\"}";//转义字符\"
Map<String, String> paramMap = new HashMap<>();
paramMap.put("phoneNumber", phoneNumber);//接收者的手机号
paramMap.put("signName", signName);
paramMap.put("templateCode", templateCode);
paramMap.put("templateParam", templateParam);
SendSmsResponse sendSmsResponse = null;
sendSmsResponse = sendSms(paramMap);
if (!(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK"))) {
if (sendSmsResponse.getCode() == null) {
return "发送失败";
}
if (!sendSmsResponse.getCode().equals("错误")) {
return "发送失败";
}
}
return randomNum;//后台匹配
}
/**
* 生成随机数
*
* @param num 位数
* @return
*/
public static String createRandomNum(int num) {
String randomNumStr = "";
for (int i = 0; i < num; i++) {
int randomNum = (int) (Math.random() * 10);
randomNumStr += randomNum;
}
return randomNumStr;
}
}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家的支持。
希望能给大家带来些许灵感。
XH:别否定自己,你特别的好,如沐春风。