Java使用阿里大于发送手机短信

废话少说,先说步骤
  • 申请阿里云账号
  • 购买短信套餐
  • 配置签名以及消息模板
  • 创建Accesskey以及获取AccessKeySecret(妥善保存)
  • 代码实现
配置签名和消息模板
  • 这个消息签名需要审核,但是一般在申请中说明需要使用的功能和使用的地点(网站或者App的名称)是很快的,我大概半个小时两个都审核完成了,官方签名和消息模板介绍
  • 这个签名是你发送消息的名称,表明了是什么公司或者那个App给你的消息,例如: [百度账号]验证码: 234234.您正在使用短信验证码登录功能,该验证码仅用于身份验证,请勿泄露给他人使用!
    在这里插入图片描述
  • 这个模板ID和签名名称还是比较重要的,后续发请求的必带参数之一
    在这里插入图片描述
创建Accesskey以及获取AccessKeySecret(妥善保存)
  • 点击右上角的人物头像创建AccessKeyAccessKeySecret在这里插入图片描述
  • 申请创建AccessKey的时候会向登陆者绑定的手机号发送一条验证码消息
    在这里插入图片描述
代码实现
// 这个ApiReqHeader是请求对象,根据项目的不同可以把相关的代码注释掉
public SysSmsLogBO sendCode(ApiReqHeader reqHeader,String code, String mobile) {

        //获取云存储配置信息,下列这些参数由于配置不同,可以在配置文件中配置用注解获取(我的在数据库配置)
        AliyunSmsConfig config = sysSettingsService.getConfigObject(ConfigKey.SMS_CONFIG_KEY, AliyunSmsConfig.class);
        if (StringUtils.isNullOrEmpty(config)) {
            throw new ReqFailedException("请先配置短信平台信息");
        }
        if (StringUtils.isNullOrEmpty(config.getAccessKeyId())) {
            throw new ReqFailedException("请先配置短信平台AccessKeyId");
        }
        if (StringUtils.isNullOrEmpty(config.getAccessKeySecret())) {
            throw new ReqFailedException("请先配置短信平台AccessKeySecret");
        }
        if (StringUtils.isNullOrEmpty(config.getSign())) {
            throw new ReqFailedException("请先配置短信平台签名");
        }

        //可自助调整超时时间
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
        //定义响应对象,用于接收发送请求后的结果
        SendSmsResponse sendSmsResponse = null;
        boolean sendFail = false;
        try {
            //初始化acsClient,暂不支持region化
            IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", config.getAccessKeyId(), config.getAccessKeySecret());
            DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
            IAcsClient acsClient = new DefaultAcsClient(profile);
            //组装请求对象-具体描述见控制台-文档部分内容
            SendSmsRequest request = new SendSmsRequest();
            //使用POST提交
            request.setMethod(MethodType.POST);
            //必填:待发送手机号
            request.setPhoneNumbers(mobile);
            //必填:短信签名-可在短信控制台中找到
            request.setSignName(config.getSign());
            //必填:短信模板-可在短信控制台中找到
            request.setTemplateCode(config.getCheckCodeTemplateCode());
            //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值
            request.setTemplateParam("{\"code\":\""+code+"\"}");
            //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
            //request.setSmsUpExtendCode("90997");
            //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
            request.setOutId("yourOutId");
            //hint 此处可能会抛出异常,注意catch
            sendSmsResponse = acsClient.getAcsResponse(request);
        } catch (Exception e) {
            sendFail = true;
            e.printStackTrace();
        }
        if (sendFail) {
            throw new ReqFailedException("短信发送失败");
        }
        // 短信发送记录日志对象
        SysSmsLogBO smsLogBO = new SysSmsLogBO();
        smsLogBO.setSendId(sendSmsResponse.getBizId());
        smsLogBO.setInvalidNum(0);
        smsLogBO.setSuccessNum(1);
        //返回消息是String类型的,看下官方文档就知道,可以用"OK"来判断
        smsLogBO.setReturnMsg(sendSmsResponse.getMessage());
        smsLogBO.setSendStatus(!sendFail ?1:0);
        smsLogBO.setSign(config.getSign());
        smsLogBO.setContent("手机验证码:"+code);
        smsLogBO.setSendTime(new Date());
        smsLogBO.setMobile(mobile);
        try {
            smsLogBO.setMemberId(Long.parseLong(reqHeader.getUserNo()));
        } catch (Exception e) {
            //外部发送短信, 这里应该是数据库设置的主键不能为null,所有才强制设置一个数避免报错
            smsLogBO.setMemberId(0L);
        }
        //保存发送记录
        sysSmsLogService.save(reqHeader,smsLogBO);
        return smsLogBO;
    }
  • 代码是别人的写的,项目之前配置的阿里云失效了,今天重新购买了短信套餐,以前也没有用过阿里大于,趁着机会看了下,不深究
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值