package com.ypp.sms.sdk.ali;
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.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.google.gson.Gson;
import com.ypp.sms.sdk.SmsService;
import com.ypp.sms.sdk.ali.model.AliSmsProperties;
import com.ypp.sms.sdk.model.SmsRequest;
import com.ypp.sms.sdk.model.SmsResponse;
import lombok.extern.slf4j.Slf4j;
/**
* 阿里云短信服务实现
*
* @author ypp
* @version 1.0.0
* @date 2020-04-22 20:54
**/
@Slf4j
public class AliSmsServiceImpl implements SmsService {
private IAcsClient acsClient;
private AliSmsProperties aliSmsProperties;
public AliSmsServiceImpl(AliSmsProperties aliSmsProperties) {
this.aliSmsProperties = aliSmsProperties;
}
@Override
public SmsResponse sendSms(SmsRequest smsRequest) throws Exception {
String templateCode = smsRequest.getTemplateCode();
String phoneNumber = smsRequest.getPhoneNumber();
initAcsClient();
//组装请求对象
SendSmsRequest request = new SendSmsRequest();
//使用post提交
request.setMethod(MethodType.POST);
//必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式;发送国际/港澳台消息时,接收号码格式为国际区号+号码,如“85200000000”
request.setPhoneNumbers(phoneNumber);
//必填:短信签名-可在短信控制台中找到
request.setSignName(aliSmsProperties.getSignName());
//必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版
request.setTemplateCode(templateCode);
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
//友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
request.setTemplateParam(new Gson().toJson(smsRequest.getData()));
//可选-上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
//request.setSmsUpExtendCode("90997");
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
request.setOutId(aliSmsProperties.getOutId());
//请求失败这里会抛ClientException异常
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
SmsResponse smsResponse = new SmsResponse();
smsResponse.setValid(sendSmsResponse != null);
smsResponse.setCode(sendSmsResponse.getCode());
smsResponse.setMessage(sendSmsResponse.getMessage());
smsResponse.setRequestId(sendSmsResponse.getRequestId());
smsResponse.setBizId(sendSmsResponse.getBizId());
return smsResponse;
}
/**
* 初始化阿里云客户端对象
*
* @return
*/
public void initAcsClient() {
if (acsClient != null) {
return;
}
//设置超时时间-可自行调整
System.setProperty("sun.net.client.defaultConnectTimeout", String.valueOf(aliSmsProperties.getConnectionTimeout()));
System.setProperty("sun.net.client.defaultReadTimeout", String.valueOf(aliSmsProperties.getReadTimeout()));
//初始化ascClient需要的几个参数
//短信API产品名称(短信产品名固定,无需修改)
final String product = aliSmsProperties.getProduct();
//短信API产品域名(接口地址固定,无需修改)
final String domain = aliSmsProperties.getDomain();
//替换成你的AK
//你的accessKeyId
final String accessKeyId = aliSmsProperties.getAccessKeyId();
//你的accessKeySecret
final String accessKeySecret = aliSmsProperties.getAccessKeySecret();
//初始化ascClient,暂时不支持多region(请勿修改)
IClientProfile profile = DefaultProfile.getProfile(aliSmsProperties.getRegion(), accessKeyId,
accessKeySecret);
try {
DefaultProfile.addEndpoint(aliSmsProperties.getRegion(), aliSmsProperties.getRegion(), product, domain);
} catch (ClientException e) {
log.error("初始化阿里云短信接口服务出现异常", e);
}
acsClient = new DefaultAcsClient(profile);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
短信发送Java SDK.zip (9个子文件)
pom.xml 1KB
src
main
java
com
ypp
sms
sdk
tencent
TencentSmsServiceImpl.java 2KB
model
TencentSmsProperties.java 344B
ali
AliSmsServiceImpl.java 5KB
model
AliSmsProperties.java 1KB
model
SmsResponse.java 761B
SmsCodeEnum.java 2KB
SmsRequest.java 595B
SmsService.java 415B
共 9 条
- 1
资源评论
来了就走下去
- 粉丝: 111
- 资源: 19
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功