阿里云接口----短信服务

2 篇文章 0 订阅
1 篇文章 0 订阅
  1. 阿里云控制台操作
    搜索短信服务在这里插入图片描述
    按图操作,添加签名和短信模板
    在这里插入图片描述
    按要求添加完毕之后,记下模板管理的模版CODE

然后点击头像的右上角,AccessKey管理,获取秘钥。

  1. 代码方面。(springboot项目中的代码节选)
    配置文件中配置一下模板的code和两个秘钥。

在这里插入图片描述
控制器层代码

/**
     * 验证手机验证码
     * @param
     * @return
     */
    @GetMapping(value = "sms/code")
    @ResponseBody
    public ResultObj smsCode(@RequestParam("telephone") String telephone) {
        ServiceResult<String> result = smsService.sendSms(telephone);
        if (result.isSuccess()) {
            return new ResultObj(200, "成功");
        } else {
            return new ResultObj(-1, "验证码错误");
        }
    }

前端代码,发送短信请求
在这里插入图片描述

$(function () {
        $('#smsCodeBtn').on('click', function () {
           var telephone=$('#telephone').val();
            $.ajax({
                url: '/order/sms/code?telephone=' + telephone,
                type: 'GET',
                success: function (data) {
                    if (data.code === 200) {
                        var smsBtn = $('#smsCodeBtn');
                        smsBtn.attr('disabled', 'disabled');
                        smsBtn.css("background-color", "#b4b2b3");

                        var time = 60;
                        var clock = setInterval(function () {
                            if (time-- <= 0) {
                                smsBtn.removeAttr('disabled');
                                smsBtn.css('background-color', '#00b4ef');
                                smsBtn.text('获取验证码');
                                clearInterval(clock);
                            } else {
                                smsBtn.text(time + 's 重新发送');
                            }
                        }, 1000);
                        layer.msg('获取验证码成功', {icon: 6, time: 2000});
                    } else {
                        layer.msg('获取失败: ' + data.message, {icon: 5, time: 2000});
                    }
                },
                error: function (xhr, response, error) {
                    layer.msg('服务器错误: ' + response, {icon: 5, time: 2000});
                }
            });
        });

    });

在这里插入图片描述

业务层代码

@Service
public class SmsServiceImpl implements SmsService, InitializingBean {
    @Value("${aliyun.sms.accessKey}")
    private String accessKey;

    @Value("${aliyun.sms.accessKeySecret}")
    private String secertKey;

    @Value("${aliyun.sms.template.code}")
    private String templateCode;
    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    private IAcsClient acsClient;

    private final static String SMS_CODE_CONTENT_PREFIX = "SMS::CODE::CONTENT";

    private static final String[] NUMS = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
    private static final Random random = new Random();
    @Override
    public ServiceResult<String> sendSms(String telephone) {
        String gapKey = "SMS::CODE::INTERVAL::" + telephone;
        String result = redisTemplate.opsForValue().get(gapKey);
        if (result != null) {
            return new ServiceResult<String>(false, "请求次数太频繁");
        }
        String code = generateRandomSmsCode();
        //短信模板
        String templateParam = String.format("{\"code\": \"%s\"}", code);
        // 组装请求对象
        SendSmsRequest request = new SendSmsRequest();
        // 使用post提交
        request.setMethod(MethodType.POST);
        request.setPhoneNumbers(telephone);
        request.setTemplateParam(templateParam);
        request.setTemplateCode(templateCode);
        request.setSignName("小码仔验证");

        boolean success = false;
        try {
            SendSmsResponse response = acsClient.getAcsResponse(request);
            if ("OK".equals(response.getCode())) {
                success = true;
            } else {
                // TODO log this question
            }
        } catch (ClientException e) {
            e.printStackTrace();
        }
        if (success) {
            redisTemplate.opsForValue().set(gapKey, code, 300, TimeUnit.SECONDS);
            redisTemplate.opsForValue().set(SMS_CODE_CONTENT_PREFIX + telephone, code, 2, TimeUnit.MINUTES);
            return ServiceResult.of(code);
        } else {
            return new ServiceResult<String>(false, "服务忙,请稍后重试");
        }
    }

    @Override
    public String getSmsCode(String telephone) {
        return this.redisTemplate.opsForValue().get(SMS_CODE_CONTENT_PREFIX + telephone);
    }

    @Override
    public void remove(String telephone) {
        this.redisTemplate.delete(SMS_CODE_CONTENT_PREFIX + telephone);
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        // 设置超时时间
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");

        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKey, secertKey);

        String product = "Dysmsapi";
        String domain = "dysmsapi.aliyuncs.com";

        DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
        this.acsClient = new DefaultAcsClient(profile);

    }

    /**
     * 六位验证码生成
     * @return
     */
    private static String generateRandomSmsCode() {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            int index = random.nextInt(10);
            sb.append(NUMS[index]);
        }
        return sb.toString();
    }
}

短信验证的流程大概就是:前端用户获取验证码请求触发,后端代码获取随机6位数字,一份放入缓存,一份交由短信发送至目标手机。用户获取验证码输入,和缓存中的验证码就行对比验证。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Java调用阿里云短信接口的步骤: 1. 首先,你需要在阿里云官网注册并创建一个短信服务。你可以参考阿里云官网提供的文档来了解如何创建短信服务。 2. 在你的Java项目中,你需要引入阿里云短信SDK的依赖。你可以在Maven项目中的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.aliyun</groupId> <artifactId>dysmsapi20170525</artifactId> <version>2.0.6</version> </dependency> ``` 3. 在你的Java代码中,你需要导入阿里云短信SDK的相关类和方法。例如: ```java import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import com.aliyuncs.sms.model.v20170525.*; ``` 4. 创建一个DefaultAcsClient对象,并设置好AccessKey和SecretKey。例如: ```java String accessKeyId = "your_access_key_id"; String accessKeySecret = "your_access_key_secret"; IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); DefaultAcsClient client = new DefaultAcsClient(profile); ``` 5. 构造一个SendSmsRequest对象,并设置好短信相关的参数,例如短信签名、模板ID、手机号码和模板参数。例如: ```java SendSmsRequest request = new SendSmsRequest(); request.setSignName("your_sign_name"); request.setTemplateCode("your_template_code"); request.setPhoneNumbers("your_phone_number"); request.setTemplateParam("{\"code\":\"123456\"}"); ``` 6. 调用client的sendSms方法发送短信,并处理发送结果。例如: ```java try { SendSmsResponse response = client.getAcsResponse(request); if (response.getCode() != null && response.getCode().equals("OK")) { System.out.println("短信发送成功"); } else { System.out.println("短信发送失败,错误码:" + response.getCode()); } } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } ``` 请注意,以上代码仅为示例,你需要根据你的实际情况进行相应的修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值