java简单实用的阿里云短信验证码后端API案例

本人刚做java不久,入职一家小微企业,让我写个短信验证码的API,然后网上搜了搜,好多案例都很复杂,其实没那么麻烦,我后来用的官方文档的Demo写的。

访问密钥AccessKey(AK)相当于登录密码,只是使用场景不同。AccessKey用于程序方式调用短信服务API,而登录密码用于登录控制台。
AccessKey包括AccessKeyId和AccessKeySecret。官方创建AccessKe的链接
AccessKeyId用于标识用户。
AccessKeySecret是用来验证用户的密钥。AccessKeySecret必须保密
(AccessKeyId和AccessKeySecret,如果公司已经申请好了就直接拿来用,在下面的工具类中写死即可)

发送短信的工具类:

import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
/**
 * 发送短信的工具类
 */
public class SMSUtils {
	/**
	 * 发送短信
	 * @param templateCode 短信模板code(已注册通过审核的code)
	 * @param phoneNumbers 前端传来的手机号
	 * @param param 模板变量值(这里就是随机生成的验证码)
	 * @throws ClientException
	 */
	public static void sendShortMessage(String templateCode,String phoneNumbers,String param) throws ClientException{
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "AccessKeyId的值", "AccessKeySecret的值");
        IAcsClient client = new DefaultAcsClient(profile);
        // 创建API请求并设置参数
        CommonRequest request = new CommonRequest();
        request.setMethod(MethodType.POST);
        request.setDomain("dysmsapi.aliyuncs.com");
        request.setVersion("2017-05-25");
        request.setAction("SendBatchSms");
        request.putQueryParameter("RegionId", "cn-hangzhou");
        request.putQueryParameter("PhoneNumberJson", "[\""+phoneNumbers+"\"]");
        //短信签名 必须是已添加并通过审核的短信签名(去找自己组的技术老大要)
        request.putQueryParameter("SignNameJson", "[\"飞象物流\"]");
        //短信模板CODE(去找自己组的技术老大要)
        request.putQueryParameter("TemplateCode", templateCode);
        //短信模板变量(验证码)
        request.putQueryParameter("TemplateParamJson", "[{\"code\":\""+param+"\"}]");
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println("输出的是:"+response.getData());
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
	}
}

控制层:

import com.aliyuncs.exceptions.ClientException;

@RestController
@RequestMapping("/api/auth")
public class AuthenticationController {
    /**
     * 发送短信验证码
     * @param phone 前端传来的用户手机号
     * @return
     * @throws ClientException
     */
    @PostMapping("/sendCode")
    public String sendCode(@RequestParam String phone) throws ClientException {
        if(phone.length() == 11){
        	//别人的一个得到6位数验证码的工具类,你们可以自己写个随机数
            String code = CodeUtil.generateVerifyCode(6);
			//发送短信的方法;SMS_181300443是我当时项目的短信模板CODE你们写自己的
            SMSUtils.sendShortMessage("SMS_181300443",phone,code);
           /*
           这里可以处理验证码 比如讲验证码放入到Redis中
			*/
            return "短信发送成功";
        }
        return "手机号不正确";
    }
}

生成随机数工具类:

package io.sage.utils;

import java.util.Random;

/**
 * @Description: 生成6位的随机数工具类
 * @Author: liu
 * @Date: 2019/12/30/19:45
 */
public class CodeUtil {
    //使用到Algerian字体,系统里没有的话需要安装字体,字体只显示大写,去掉了1,0,i,o几个容易混淆的字符
    public static final String VERIFY_CODES = "1234567890";

    /**
     * 使用系统默认字符源生成验证码
     * @param verifySize    验证码长度
     * @return
     */
    public static String generateVerifyCode(int verifySize){
        return generateVerifyCode(verifySize, VERIFY_CODES);
    }

    /**
     * 使用指定源生成验证码
     * @param verifySize    验证码长度
     * @param sources   验证码字符源
     * @return
     */
    public static String generateVerifyCode(int verifySize, String sources){
        if(sources == null || sources.length() == 0){
            sources = VERIFY_CODES;
        }
        int codesLen = sources.length();
        Random rand = new Random(System.currentTimeMillis());
        StringBuilder verifyCode = new StringBuilder(verifySize);
        for(int i = 0; i < verifySize; i++){
            verifyCode.append(sources.charAt(rand.nextInt(codesLen-1)));
        }
        return verifyCode.toString();
    }

}

pom.xml引入:

        <!-- 短信包-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.0.6</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>1.1.0</version>
        </dependency>

新人首发,欢迎各位指点!!!哈哈

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值