阿里云SDK实现短信发送

实现短信发送业务

准备工作

阿里云短信服务:AccessKey相关信息:短信模板/短信签名/AccessKeyId/AccessKeySecret

1、申请短信模板,获取code

 2、申请短信签名

注:一般是签名先于模板申请,审批成功概率大 

3、申请ak信息

阿里云地址:获取AccessKey - 新手上云指南 - 阿里云

配置文件(application.properties)

#SMS
aliyun.sms.accessKeyId=申请的accessKeyId
aliyun.sms.accessKeySecret=申请的accessKeySecret
aliyun.sms.endpoint=dysmsapi.aliyuncs.com//默认值,无需修改
aliyun.sms.verifySMS=短信模板code
aliyun.sms.noticeSMS=短信模板code

封装实体类

@Component
@PropertySource("classpath:application.properties") //默认路径下可不加
@Data
@Configuration
public class AliyunConfig {
    // sms
    @Value("${aliyun.sms.endpoint}")
    private String endpointSMS;
    @Value("${aliyun.sms.accessKeyId}")
    private String accessKeyIdSMS;
    @Value("${aliyun.sms.accessKeySecret}")
    private String accessKeySecretSMS;
    @Value("${aliyun.sms.verifySMS}")
    private String verifySMS;
    @Value("${aliyun.sms.noticeSMS}")
    private String noticeSMS;

    public AliyunConfig() {
    }

    public String getAccessKeyIdSMS() {
        return accessKeyIdSMS;
    }

    public void setAccessKeyIdSMS(String accessKeyIdSMS) {
        this.accessKeyIdSMS = accessKeyIdSMS;
    }

    public String getAccessKeySecretSMS() {
        return accessKeySecretSMS;
    }

    public void setAccessKeySecretSMS(String accessKeySecretSMS) {
        this.accessKeySecretSMS = accessKeySecretSMS;
    }

    public String getEndpointSMS() {
        return endpointSMS;
    }

    public void setEndpointSMS(String endpointSMS) {
        this.endpointSMS = endpointSMS;
    }

    public String getVerifySMS() {
        return verifySMS;
    }

    public void setVerifySMS(String verifySMS) {
        this.verifySMS = verifySMS;
    }

    public String getNoticeSMS() {
        return noticeSMS;
    }

    public void setNoticeSMS(String noticeSMS) {
        this.noticeSMS = noticeSMS;
    }
}

封装实体类

public class sendSMSUtil {

//生成六位数随机验证码
	public String getRandom(){
		String randNum = new Random().nextInt(1000000)+"";
		System.out.println("生成"+randNum);
		if(randNum.length()!=6){   //如果生成的不是6位数随机数则返回该方法继续生成
			return getRandom();
		}else{
			return randNum;
		}
	}

//创建客户端,将ak相关信息传入值config中
	public static Client createClient(AliyunConfig aliyunConfig) throws Exception {
		Config config = new Config()
				// 您的AccessKey ID
				.setAccessKeyId(aliyunConfig.getAccessKeyIdSMS())
				// 您的AccessKey Secret
				.setAccessKeySecret(aliyunConfig.getAccessKeySecretSMS());
		// 访问的域名
		config.endpoint = aliyunConfig.getEndpointSMS();
		return new Client(config);
	}

//验证码发送方法
	public Result verifySMS(String uphone, AliyunConfig aliyunConfig) throws Exception {
		Result result = new Result();
		JSONObject json = new JSONObject();

//设置处理时间为1秒,单位为毫秒
		System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
		System.setProperty("sun.net.client.defaultReadTimeout", "10000");

//创建发送客户端
		Client client = createClient(aliyunConfig);
//生成六位随机验证码
		String code = getRandom();

		SendSmsRequest sendSmsRequest = new SendSmsRequest()
//设置手机号
				.setPhoneNumbers(uphone)
//设置签名
				.setSignName("你的签名")
//获取申请的验证码模板id
				.setTemplateCode(aliyunConfig.getVerifySMS())
//传入验证码模板的code值
				.setTemplateParam("{\"code\": \""+code+"\"}");
//获得发送的返回
		SendSmsResponse response = client.sendSms(sendSmsRequest);
//输出查看返回状态
		System.out.println(response.getBody().getCode());
//判断发送情况是否成功
        if(response.getBody().getCode().equals("OK")){
			json.put("verifyCode",code);
			return Result.succ("发送成功",json);
		}else if(response.getBody().getCode().equals("isv.BUSINESS_LIMIT_CONTROL")){
//短信发送出现频繁请求		
        	return Result.fail("请勿频繁请求");
		}else{
//其他情况,通过自定义异常抛出
			throw new resultException(ResultEnum.MISTAKE_BY_SENDSMS);
		}
}

调试时出现isp.RAM_PERMISSION_DENY报错

该错误意味着RAM权限不足,前往阿里云开启相关权限

前往并开启以下两个权限即可进行短信发送操作

阿里云短信api返回码

返回码地址:API错误码 - 短信服务 - 阿里云 

依赖支持:

<!-- 阿里云短信依赖支持 -->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
    <version>1.1.0</version>
</dependency>
<!-- 阿里云依赖支持 -->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.5.16</version>
</dependency>
<!-- openapi依赖支持 版本20170525 -->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>dysmsapi20170525</artifactId>
    <version>2.0.4</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>tea-openapi</artifactId>
    <version>0.0.19</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>tea-console</artifactId>
    <version>0.0.1</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>darabonba-env</artifactId>
    <version>0.1.1</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>tea-util</artifactId>
    <version>0.2.11</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>darabonba-time</artifactId>
    <version>0.0.1</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>darabonba-string</artifactId>
    <version>0.0.3</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>tea</artifactId>
    <version>[1.0.3, 2.0.0)</version>
</dependency>

注:依赖版本要确保正确,依赖版本不对等可能出现如下错误

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oct1025

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值