首页 > 编程知识 正文

阿里云短信api,阿里云 短信平台

时间:2023-05-05 02:30:01 阅读:226712 作者:3037

准备工作:

首先是在阿里买了一个短信服务(云通信)套餐然后设置短信通知模板然后设置应用签名,这是会在短信通知的内容中展示的,最好是公司或网站名称。找到 AccessKeyId 与 AccessKeySecret的位置
AccessKeyId 与 AccessKeySecret是在哪里? 请看 https://help.aliyun.com/document_detail/55288.html?spm=a2c4g.11174283.6.549.12892c42K62Fgj

代码中实现部分:

引入相关依赖包

<!--实现阿里短信--><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>3.3.1</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dysmsapi</artifactId><version>1.0.0</version></dependency>

引入发送短信封装工具类,注意要填写自己的KeyId 和 AccessKey 以及 模板,签名等

/** 实现阿里云短信连接 * https://blog.csdn.net/Colton_Null/article/details/77283193 * Created by huangch on 2019/1/16 21:41 */public class AliyunMessageUtil { private static final String product = "Dysmsapi"; //产品域名,开发者无需替换 private static final String domain = "dysmsapi.aliyuncs.com"; // 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找) TODO private static final String accessKeyId = "LTAI5v8V"; private static final String accessKeySecret = "Wd7jQI7eHTp5Kg"; public static SendSmsResponse sendSms(Map<String, String> paramMap) throws com.aliyuncs.exceptions.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")); //必填:短信签名-可在短信控制台中找到 request.setSignName("天"); //必填:短信模板-可在短信控制台中找到 request.setTemplateCode("SMS_155856335"); //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 request.setTemplateParam(paramMap.get("jsonContent")); //选填-上行短信扩展码(无特殊需求用户请忽略此字段)// request.setSmsUpExtendCode(paramMap.get("extendCode")); //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者// request.setOutId(paramMap.get("outId")); //hint 此处可能会抛出异常,注意catch SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); return sendSmsResponse; }} /** * 实现手机发送 * @param map * @return */ @Override public String sendMobileCode(Map<String, Object> map) throws ClientException { String randomNum = createRandomNum(6); String jsonContent = "{"code":"" + randomNum + ""}"; Map<String, String> paramMap = new HashMap<>(); paramMap.put("phoneNumber", (String) map.get("phoneNumber")); paramMap.put("jsonContent", jsonContent); SendSmsResponse sendSmsResponse = AliyunMessageUtil.sendSms(paramMap); if(!(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK"))) { if(sendSmsResponse.getCode() == null) { //这里可以抛出自定义异常 return ""; } if(!sendSmsResponse.getCode().equals("OK")) { //这里可以抛出自定义异常 return ""; } } return randomNum; }

到此为止就能实现简单的发送了。

在这里补充一点遇到的一点坑,自己把买的云服务器 出站 入站 端口全部关闭,只开放了对应的软件端口,
导致自己服务器无法连接别人的服务,
这里要设置 53 端口开放 ,这里是DNS服务端口,之前导致短信都无法发送,就是无法通过配置的域名解析到对应的 IP 服务器上。

喜欢就扫一扫把

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。