直接上代码,亲测可用

package org.jeecg.common.util;

import java.security.SecureRandom;
import java.util.Random;

import org.apache.commons.lang.StringUtils;

import com.alibaba.fastjson.JSONObject;
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 lombok.extern.slf4j.Slf4j;

/**
 * 
 * @ClassName: AliCloudSmsUtils
 * @Description: 阿里云发送短信
 * @author WangJing
 * @date 2020年2月4日
 *
 */
@Slf4j
public class AliCloudSmsUtils {

// 产品名称:云通信短信API产品,开发者无需替换
    private static final String product = "Dysmsapi";
    // 产品域名,开发者无需替换
    private static final String domain = "dysmsapi.aliyuncs.com";
    // 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
    private final static String ACCESS_KEY_ID = "";
    private final static String ACCESS_KEY_SECRET = "";

public static void main(String[] args) throws ClientException {
        // 发短信
        String phoneNumbers = "";//接收短信的手机号码
        String templateParam = "";//短信模板变量对应的实际值,JSON格式
        String templateCode = "";//短信模板ID。请在控制台模板管理页面模板CODE一列查看
        String signName = "";//短信签名名称。请在控制台签名管理页面签名名称一列查看
        String smsUpExtendCode = null;//上行短信扩展码,无特殊需要此字段的用户请忽略此字段
        String outId = null;//外部流水扩展字段
        Pair<Boolean, String> sendCurrencySMS = AliCloudSmsUtils.sendCurrencySMS(phoneNumbers, templateParam, templateCode,
                signName, smsUpExtendCode, outId);
        System.out.println("短信接口返回的数据----------------");
        System.out.println("key=" + sendCurrencySMS.getKey());//true 发送成功,false 发送失败
        System.out.println("value=" + sendCurrencySMS.getValue());//发送失败的msg
    }

/**
     * 
     * @Title: sendCurrencySMS  
     * @Description: 发送通用短信
     * @param @param phoneNumbers        接收短信的手机号码
     * @param @param templateParam         短信模板变量对应的实际值,JSON格式
     * @param @param templateCode        短信模板ID。请在控制台模板管理页面模板CODE一列查看
     * @param @param signName            短信签名名称。请在控制台签名管理页面签名名称一列查看
     * @param @param smsUpExtendCode    上行短信扩展码,无特殊需要此字段的用户请忽略此字段
     * @param @param outId                外部流水扩展字段
     * @param @return
     * @param @throws ClientException    参数  
     * @return Pair<Boolean,String>    返回类型  
     * @throws
     */
    public static Pair<Boolean, String> sendCurrencySMS(String phoneNumbers, String templateParam, String templateCode,
            String signName, String smsUpExtendCode, String outId) throws ClientException{
        Pair<Boolean, String> pair = new Pair<Boolean, String>(true, "发送成功");
        try {
            if(StringUtils.isBlank(phoneNumbers)
                    || StringUtils.isBlank(templateCode)
                    || StringUtils.isBlank(signName)){
                log.error("AliCloudSmsUtils--sendCurrencySMS--必填字段不可为空");
                pair = new Pair<Boolean, String>(true, "必填字段不可为空");
                return pair;
            }
            SendSmsResponse sendSms = sendSms(phoneNumbers, templateParam, templateCode, signName, smsUpExtendCode, outId);
            if(!"OK".equals(sendSms.getCode())){
                log.info("AliCloudSmsUtils--sendCurrencySMS,sendSms返回发送失败;msg:{}", JSONObject.toJSONString(sendSms));
                pair = new Pair<Boolean, String>(false, sendSms.getMessage());
            }else{
                pair = new Pair<Boolean, String>(true, "发送成功");
            }
        } catch (Exception e) {
            pair = new Pair<Boolean, String>(false, "接口异常");
            log.error("AliCloudSmsUtils--sendCurrencySMS--发生异常,error:{}", e);
        }
        return pair;
    }
    
    /**
     * 
     * @Title: sendSms  
     * @Description: 发送短信验证码        
     * @param @param phoneNumbers        接收短信的手机号码
     * @param @param templateParam        短信模板变量对应的实际值,JSON格式
     * @param @param templateCode        短信模板ID。请在控制台模板管理页面模板CODE一列查看
     * @param @param signName            短信签名名称。请在控制台签名管理页面签名名称一列查看
     * @param @param smsUpExtendCode    上行短信扩展码,无特殊需要此字段的用户请忽略此字段
     * @param @param outId                外部流水扩展字段
     * @param @return
     * @param @throws ClientException    参数  
     * @return SendSmsResponse    返回类型  
     * @throws
     */
    public static SendSmsResponse sendSms(String phoneNumbers, String templateParam, String templateCode,
            String signName, String smsUpExtendCode, String outId) throws ClientException {

// 可自助调整超时时间
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
        // 初始化acsClient,暂不支持region化
        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_KEY_SECRET);
        DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
        IAcsClient acsClient = new DefaultAcsClient(profile);

// 组装请求对象-具体描述见控制台-文档部分内容
        SendSmsRequest request = new SendSmsRequest();
        // 必填:待发送手机号
        request.setPhoneNumbers(phoneNumbers);
        // 必填:短信签名-可在短信控制台中找到
        request.setSignName(signName);
        // 必填:短信模板-可在短信控制台中找到
        request.setTemplateCode(templateCode);
        // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
        if (StringUtils.isNotBlank(templateParam)) {
            request.setTemplateParam(templateParam);
        }
        // 选填-上行短信扩展码(无特殊需求用户请忽略此字段)
        if (StringUtils.isNotBlank(smsUpExtendCode)) {
            request.setSmsUpExtendCode(smsUpExtendCode);
        }
        // 选填:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
        if (StringUtils.isNotBlank(outId)) {
            request.setSmsUpExtendCode(outId);
        }
        // hint 此处可能会抛出异常,注意catch
        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
        return sendSmsResponse;
    }

/**
     * 
     * @Title: sendPINSms  
     * @Description: 发送4位短信验证码  
     * @param @param signName        签名
     * @param @param templateCode    手机号
     * @param @param phoneNumbers    模板
     * @param @return    参数  
     * @return Pair<Boolean,String>    返回类型  
     * @throws
     */
    public static Pair<Boolean, String> sendPINSms(String signName, String templateCode, String phoneNumbers) {
        Pair<Boolean, String> pair = new Pair<Boolean, String>(true, "发送成功");
        try {
            JSONObject templateParam = new JSONObject();
            String nonce_str = getNonce_str();
            templateParam.put("code", nonce_str);

pair = new Pair<Boolean, String>(true, nonce_str);
            SendSmsResponse sendSms = sendSms(phoneNumbers, templateParam.toJSONString(), templateCode, signName, null, null);
            if(!"OK".equals(sendSms.getCode())){
                log.info("AliCloudSmsUtils--sendPINSms,sendSms返回发送失败;msg:{}", JSONObject.toJSONString(sendSms));
                pair = new Pair<Boolean, String>(false, nonce_str);
            }else{
                pair = new Pair<Boolean, String>(true, nonce_str);
            }
        } catch (Exception e) {
            pair = new Pair<Boolean, String>(false, "接口异常");
            log.error("AliCloudSmsUtils--sendPINSms--发生异常,error:{}", e);
        }
        return pair;
    }

//===========================================生成4位临时验证码
    private static final String SYMBOLS = "0123456789"; // 数字
    // 字符串
    private static final Random RANDOM = new SecureRandom();

public static String getNonce_str() {

// 如果需要6位,那 new char[6] 即可,其他位数同理可得
        char[] nonceChars = new char[4];
        for (int index = 0; index < nonceChars.length; ++index) {
            nonceChars[index] = SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length()));
        }
        return new String(nonceChars);
    }
}

注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除!

阿里云--短信服务--java实现代码相关推荐

  1. 阿里云短信服务Java实现

    文章目录 1.阿里云用户权限 2.开通阿里云短信服务 3.帮助文档 4.编写测试代码 真实项目应用 1.阿里云用户权限 阿里云平台有很多业务,用户登录阿里云之后,要想使用业务,必须开通该业务的权限 登 ...

  2. 阿里云短信服务(JAVA)

    官网:Java SDK - 短信服务 - 阿里云 您可以直接添加Maven依赖或下载阿里云Java SDK开发工具包的方式安装阿里云Java SDK. 前提条件 在安装和使用阿里云Java SDK前, ...

  3. java 阿里云短信服务

    提示:阿里云设置方面就省略了. 一.依赖 代码如下(示例): /*阿里云 短信服务 Java SDK*/compile group: 'com.aliyun', name: 'aliyun-java- ...

  4. SpringBoot-短信验证码-快速入门Demo(含redis)(手把手教你开通阿里云短信服务到写出个最终代码来)

    B站小狂神-此博客的内容就是看了这个视频的总结(博主自己写的哦~并非转载) 视频链接-[狂神说]通俗易懂的阿里云短信业务实战教程(露脸) 您是否还在为别人的项目有短信功能自己的却没有? 您是否还在为自 ...

  5. 阿里云短信服务(申请与代码)

    目前阿里云短信签名审核更加严格了,如果不通过请转至<腾讯云短信申请与代码>,腾讯云简单易通过 记录申请短信服务签名的坑 短信服务签名申请注意事项: 自2020年12月17日开始,阿里云短信 ...

  6. Java常用工具类-发短信(集成阿里云短信服务)

    1.注册阿里账号并开通短信服务 注册阿里账号后,并进行个人或企业实名认证,实名认证后,才能开通短信服务. 界面如下: 2.获取AccessKey 参考获取AccessKey方法 创建成功后,如下图: ...

  7. Java实现短信验证码(阿里云短信服务)

    前言: 很多时候我们做的项目都需要上图这样的验证码来帮助我们完成更好的功能,比如:什么登录注册,忘记密码需要发送手机验证码之类的啊...下面分享我今天通过阿里云短信服务实现的短信验证码,操作都很简单, ...

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

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

  9. Java 阿里云短信服务的集成

    Java 阿里云短信服务的集成 1.短信发送API(SendSms)---JAVA  [ https://help.aliyun.com/document_detail/55284.html?spm= ...

  10. java实现阿里云短信服务发送验证码

    在写注册接口时,需引入短信第三方接口,故使用了阿里云短信服务,在这里简单描述一下 1.引入依赖 <!--手机发送短信验证码--><dependency><groupId& ...

最新文章

  1. Python 炫技操作:海象运算符的三种用法
  2. 使用python中的socket实现服务器和客户端,并完成图片的传输
  3. linux rc4,Linux kernel 4.8-rc4发布下载,正式版越来越近
  4. Linux 启/关 自启动服务
  5. Pytorch 为什么每一轮batch需要设置optimizer.zero_grad
  6. python 查看变量_剖析python运算符is和==的区别
  7. 十年无果,Linux 开发者放弃 VMware 诉讼
  8. Chapter 05 绘图基础
  9. 西威变频器avo下载调试资料_西门子变频器使用BOP-2 面板调试 G120
  10. 内置RTK北斗高精度定位的智能安全帽完成调试,上报至smarteye平台
  11. 尽管凭借主持人的身份成名,张绍刚先生在内心深处却对这一角色认可度很低
  12. kuberntes集群不能解析service ip故障排查记录
  13. 活动总曝光超1亿,单场引导GMV超1000万,华少快手生活服务专场首战告捷!
  14. C51单片机 AT89S52 定时器使用方法及总结
  15. Android使用DX工具
  16. 下一个风电”黑马“诞生,数字孪生 3D 智慧风电
  17. java计算机毕业设计-物料采购合同管理系统-源程序+mysql+系统+lw文档+远程调试
  18. Oracle数据库安全-版本补丁版本计划(202207更新)
  19. 全球及中国高速公路行业未来建设规划与十四五盈利前景分析报告2022版
  20. 机器学习(Machine Learning)入门科普

热门文章

  1. MFC学习之路(五)让人菊花一紧的错误
  2. 法信智推搜索引擎_法学工具分享
  3. 2019蓝桥杯Java决赛题答案_2019第十届蓝桥杯Java题
  4. 《设计模式》学习笔记——开闭原则
  5. ADC的计算策略.针对ADC值经常跳变的电路获取正确结果
  6. win10里面的linux可以分屏吗,Win10上下分屏怎么弄 教你让Win10上下分屏的方法
  7. 程序员用实力把公司干倒闭了
  8. cad图层置顶的lisp_cad中如何将一个图层置于上层
  9. pandas excel合并去重
  10. 国内镜像站——国外资源的代理站点