一、开通阿里云短信服务,为开发时需要用到的信息做准备

1、注册或者使用自己的支付宝账号登录阿里云官网

2、搜索并找到短信服务,进行开通(开通是不要钱的,发送短信的时候才需要钱)

3、注册自己的短信签名,得到签名(区分国内外)

4、注册自己的短信模板,得到模板 code (区分国内外)

5、鼠标悬浮到右上角自己的用户头像,点击 AccessKey 进去 ,获取 AccessKey 的 ID 和 Secret

此处注意选择,继续使用 AccessKey 和 使用子用户 AccessKey ,一个是获得所有权限,一个是获得部分权限。
请记住如果申请完子用户AccessKey后不要立即关闭窗口,先将申请的AccessKeySecret进行保存,因为关闭后,再也没办法进行查看AccessKeySecret,只能查看到AccessKeyId

二、Java 中调用 阿里云 的短信服务接口

1、maven 中导入以下依赖

<!--阿里云短信接口api--><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.0.3</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dysmsapi</artifactId><version>2.0.0</version></dependency>

2、具体调用实现类,短信发送方法

package com.testaliyun.api.aliyun;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 java.text.SimpleDateFormat;
import java.util.Dictionary;
import java.util.regex.Pattern;// 阿里短信发送
public class SendSmsUtil {// 产品名称:云通信短信API产品,开发者无需替换private static final String product = "Dysmsapi";// 产品域名,开发者无需替换private static final String domain = "dysmsapi.aliyuncs.com";// 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)private static String mobile = "13145678901";private static String accessKeyId = "Access Key ID";private static String accessKeySecret = "Access Key Secret";private static String signName = "短信签名";private static String templeteCode = "短信模版Code(一般都是SMS_********格式)";// 发送短信方法/*** @param mobile 接收号码* @param signName 短信签名* @param templeteCode  短信模板Code(一般都是SMS_********格式)* @param templeteContent   短信模板对应内容* @return* @throws ClientException*/public SendSmsResponse sendSms(String mobile, String signName, String templeteCode, String templeteContent) 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(mobile);// 必填:短信签名-可在短信控制台中找到request.setSignName(signName);// 必填:短信模板-可在短信控制台中找到request.setTemplateCode(templeteCode);// 可选:模板中的变量替换JSON串,如模板内容为"尊敬的用户,您的验证码为${code}"时,此处的值为// String templeteContent= "{\"code\":\""+code+"\"}";request.setTemplateParam(templeteContent);// hint 此处可能会抛出异常,注意catchSendSmsResponse sendSmsResponse = null;try {sendSmsResponse = acsClient.getAcsResponse(request);} catch (ClientException e) {throw new RuntimeException(e.getMessage());}return sendSmsResponse;}//已短信短信查询方法
/*** @param mobile 接收号码* @param bizId 调用发送短信接口时返回的BizId(选填)* @param pageSize  页大小(10L)* @param currentPage   当前页码(1L)* @param sendDate   短信发送的日期,支持30天内记录查询(可查其中一天的发送数据),格式yyyyMMdd* @return* @throws ClientException*/public QuerySendDetailsResponse selectSendSms(String mobile, String bizId, Long pageSize, Long currentPage,String sendDate) throwsClientException {//初始化ascClientIClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);IAcsClient acsClient = new DefaultAcsClient(profile);//组装请求对象QuerySendDetailsRequest request = new QuerySendDetailsRequest();//必填-号码request.setPhoneNumber(mobile);//可选-调用发送短信接口时返回的BizIdif(bizId != null){request.setBizId(bizId);}//必填-短信发送的日期 支持30天内记录查询(可查其中一天的发送数据),格式yyyyMMddrequest.setSendDate(sendDate);//必填-页大小request.setPageSize(pageSize);//必填-当前页码从1开始计数request.setCurrentPage(currentPage);//hint 此处可能会抛出异常,注意catchQuerySendDetailsResponse querySendDetailsResponse = null;try {querySendDetailsResponse = acsClient.getAcsResponse(request);} catch (ClientException e) {throw new RuntimeException(e.getMessage());}//获取返回结果if(querySendDetailsResponse.getCode() != null && querySendDetailsResponse.getCode().equals("OK")){//代表请求成功}return querySendDetailsResponse;}/*** 验证手机号码是否合法* @param mobile* @return true 合法 false 不合法*/public static boolean IsMobile(String mobile){Pattern pattern = Pattern.compile("^[1]\\d{10}$");Matcher matcher = pattern.matcher(mobile);return matcher.matches();}/*** 短信发送后返回消息处理机制* @param str 传入发送短信后,返回的状态码code* @return 根据 code 返回对应异常信息*/public static String smsMessageHandle(String str){String result = "";switch (str){case "OK":result = "短信发送成功!";break;case "isp.RAM_PERMISSION_DENY":result = "RAM权限DENY";break;case "isv.OUT_OF_SERVICE":result = "业务停机";break;case "isv.PRODUCT_UN_SUBSCRIPT":result = "未开通云通信产品的阿里云客户";break;case "isv.PRODUCT_UNSUBSCRIBE":result = "产品未开通";break;case "isv.ACCOUNT_NOT_EXISTS":result = "账户不存在";break;case "isv.ACCOUNT_ABNORMAL":result = "账户异常    ";break;case "isv.SMS_TEMPLATE_ILLEGAL":result = "短信模板不合法";break;case "isv.SMS_SIGNATURE_ILLEGAL":result = "短信签名不合法";break;case "isv.INVALID_PARAMETERS":result = "参数异常";break;case "isv.MOBILE_NUMBER_ILLEGAL":result = "非法手机号";break;case "isv.MOBILE_COUNT_OVER_LIMIT":result = "手机号码数量超过限制";break;case "isv.TEMPLATE_MISSING_PARAMETERS":result = "模板缺少变量";break;case "isv.BUSINESS_LIMIT_CONTROL":result = "业务限流";break;case "isv.INVALID_JSON_PARAM":result = "JSON参数不合法,只接受字符串值";break;case "isv.PARAM_LENGTH_LIMIT":result = "参数超出长度限制";break;case "isv.PARAM_NOT_SUPPORT_URL":result = "不支持URL";break;case "isv.AMOUNT_NOT_ENOUGH":result = "账户余额不足";break;case "isv.TEMPLATE_PARAMS_ILLEGAL":result = "模板变量里包含非法关键字";break;}return result;}//测试 短信发送 与 短信查询 的方法public void sendSms() throws InterruptedException {//验证手机号码if (IsMobile(mobile)) {try {//调用发送短信方法SendSmsResponse sendSmsResponse = sendSms(mobile, signName, templeteCode, templeteContent);if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {//请求成功//发送短信之后睡眠3秒Thread.sleep(3000L);//查询已发送短信QuerySendDetailsResponse querySendDetailsResponse = selectSendSms(mobile, sendSmsResponse.getBizId(), 10L,1L,new SimpleDateFormat("yyyyMMdd").format(new Date()));for (QuerySendDetailsResponse.SmsSendDetailDTO smsSendDetailDTO : querySendDetailsResponse.getSmsSendDetailDTOs()) {content = smsSendDetailDTO.getContent();}}else{//请求失败,根据错误码获取问题String s = smsMessageHandle(sendSmsResponse.getCode());}} catch (ClientException e) {throw new RuntimeException(e.getMessage());}}else{System.out.println("电话号码不合理");}}}

关注公众号查看更多资源

Java 对接 阿里云 的短信服务完成短信的发送与查询相关推荐

  1. java对接阿里云短信服务详解(验证码,推广短信,通知短信)

    前言 小前提: - java:springboot框架,maven版本管理. - 阿里云:有账号,已经进行实名认证. java对接阿里云短信服务详解(验证码,推广短信,通知短信) 前言 1. 登录阿里 ...

  2. Java对接阿里云短信平台(快速上手)

    一.首先阿里云管理控制台添加短信服务功能 二.接着在应用开发模块下,配置签名,模版,不清楚的地方可以查看帮助文档 三.下载对应的SDK及其DEMO,我下的Java 四.将api_demo代码导入自己的 ...

  3. java对接阿里云短信平台

    一. 阿里云管理平台部分: 第一步: 注册阿里云账号(钉钉或者支付宝或淘宝都可以登录) 第二步: 开通短信服务 第三步: 申请短信签名(说是要两个小时审核,其实半小时到1小时之间就差不多了.~~阿里效 ...

  4. java对接阿里云短信服务器,附代码和截图

    获取阿里云短信调用java例子 短信发送官网地址​​​​​​API概览 - 短信服务 - 阿里云 短信发送API(SendSms)---Java https://help.aliyun.com/doc ...

  5. Java对接阿里云号码隐私保护

    一.前期准备 阿里云号码隐私保护地址:https://help.aliyun.com/document_detail/110258.htm 二.目前需求概括 配送服务 需要将用户手机号脱敏处理 配送员 ...

  6. java对接阿里云实名认证接口

    今天在工作中用到了对用户进行实名认证的需求,完成需求后借着摸鱼的空闲,把实名认证进行总结,方便刚入行的小白学习与讨论. 认证四要素:姓名.身份证号.人像身份证照片.国徽身份证照片 目录 实名认证地址获 ...

  7. 使用java开发阿里云OSS开放云存储服务

    购买了阿里云后,我们发现一般ECS的存储空间都比较小,当然我们可以动态的扩展一些存储空间.但是作为开发者,我们在日常使用中需要一些更大的灵活性,因此就需要我们自己对OSS存储有一些自己的扩展.今天就为 ...

  8. wordpress使用阿里云邮件推送服务实现发送邮件

    之前用腾迅云时,配置了wordpress是可以使用邮件服务的,然而到了阿里云,却无法使用了,有人说是因为阿里云关了25端口,但腾迅好像也关了. 百度看看有没有其他方法,最终让我找到个方法,可惜不是很完 ...

  9. 手把手教你对接阿里云短信服务

    正好双十二,最近在做一个小项目需要用到短信业务,注册了新用户125买了5000条短信,有效期2年. 那么如何对接阿里云短信,需要做哪些操作? 可以参考https://help.aliyun.com/d ...

最新文章

  1. 生成树、最小生成树的一些性质以及邻域的概念
  2. pyqt5 子线程更新ui
  3. python的类的super()
  4. CeneOS中使用Docker安装Gitlab
  5. mysql 常用配置_mysql 常用配置
  6. authpuppy mysql_authpuppy 认证服务器搭建
  7. 二叉树的锯齿形层次遍历—leetcode103
  8. Android 第十九课 大喇叭--广播机制----动态注册监听网络变化与静态注册实现开机启动
  9. 在上司面前硬不起来?教你如何快速将字符串转换为可执行代码
  10. node中定时器, process.nextTick(), setImediate()的区别与联系
  11. ROS笔记(18) Gazebo仿真
  12. 【转载】6种.net分布式缓存解决方案
  13. Python入门--Os.path模块常用函数
  14. 安装quickLook插件以及解决如何不能读取offic问题
  15. 分享微软官方Demo用的SharePoint 2010, Exchange 2010, Lync 2010虚拟机
  16. JavaScript数字精度丢失的一些问题
  17. python爬取视频代码
  18. spring boot整合第三方微信开发工具 weixin-java-miniapp 实现小程序微信登录
  19. 最好用的WIN7WIN10激活工具
  20. 如何在命令行卸载mysql_如何彻底卸载MySQL

热门文章

  1. 使用PE镜像修改VMware中Windows镜像的方法
  2. Python random模块(获取随机数)常用方法和使用例子
  3. 微软project服务器搭建,Project Server 2013 安装和部署概述
  4. 印度软件巨头Infosys的成功之道
  5. 一线城市上海的户口有多好?
  6. 记一次jenkins 构建go项目经历
  7. 明日之后登录显示服务器连接中断,明日之后连接中断怎么办 无法登陆服务器解决方法...
  8. 腹板拼接宽度_钢结构工程部件拼接一般规定
  9. PYA 练习2-3 输出倒三角图案
  10. 测试学习笔记之--pytest使用和断言处理以及setup,theardown使用