记录一下java接入阿里云短信的操作过程

账号注册
  • 进入官网:https://www.aliyun.com/
  • 注册账号:可以直接使用支付宝授权登录
  • 购买短信服务套餐
  • 一般新人都会有比较便宜的或者使用套餐,参考下图购买:
  • 首页找到最下方,点开免费试用
  • 找到短信免费试用套餐包
进入短信服务

云片Java短信接人_验证码

设置签名
个人用户只能设置验证码场景的签名,其他类型的签名需要企业资格认证

云片Java短信接人_java_02

设置模板

云片Java短信接人_阿里云_03

API文档
  • 文档地址:https://api.aliyun.com/new#/?product=Dysmsapi&version=2017-05-25&api=SendSms&params={}&tab=DOC&lang=JAVA
  • 参考短信发送API
获取签名

云片Java短信接人_验证码_04


云片Java短信接人_java_05

代码示例
  • 引入依赖
<!--阿里云短信服务-->
		<dependency>
			<groupId>com.aliyun</groupId>
			<artifactId>aliyun-java-sdk-core</artifactId>
			<version>4.5.0</version>
		</dependency>
  • yml配置文件
ali:
  sms:
    accessKeyId: 自己的accessKeyId
    accessSecret: 自己的accessSecret
    signName: 自己的短信签名
    templateCode: 自己的短信模板
  • 工具类(仅有短信发送的方法)
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;

public class ALiSmsUtil {

    public static CommonResponse sendSms(String accessKeyId, String accessSecret, String phoneNumbers, String signName, String templateCode, String params) throws ClientException {
       //设置区域与秘钥
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessSecret);
        //创建客户端
        IAcsClient client = new DefaultAcsClient(profile);
        //创建请求体
        CommonRequest request = new CommonRequest();
        //设置请求方式为post请求
        request.setSysMethod(MethodType.POST);
        //设置域名(固定域名)
        request.setSysDomain("dysmsapi.aliyuncs.com");
        //设置短信版本
        request.setSysVersion("2017-05-25");
        //设置执行的方法
        request.setSysAction("SendSms");
        //设置区域id
        request.putQueryParameter("RegionId", "cn-hangzhou");
        //设置电话号码,多个电话号码逗号隔开
        request.putQueryParameter("PhoneNumbers", phoneNumbers);
        //设置短信签名
        request.putQueryParameter("SignName", signName);
        //设置选择的模板
        request.putQueryParameter("TemplateCode", templateCode);
        //设置参数
        request.putQueryParameter("TemplateParam", params);
        //发送短信请求
        CommonResponse response = client.getCommonResponse(request);
        System.out.println(response.getData());
        //返回响应结果
        return response;
    }

}
  • 发送短信的代码
/**
 * 验证码操作处理
 *
 * @author ty
 */
@Api(value = "验证码操作" , description = "验证码操作接口" , tags = "验证码操作")
@RestController
public class CaptchaController {
    @Autowired
    private RedisCache redisCache;

    @Value("${ali.sms.accessKeyId}")
    private String accessKeyId;

    @Value("${ali.sms.accessSecret}")
    private String accessSecret;

    @Value("${ali.sms.signName}")
    private String signName;

    @Value("${ali.sms.templateCode}")
    private String templateCode;
      
    /**
     * 短信验证码
     */
    @ApiOperation(value = "短信验证码" , notes = "短信验证码")
    @GetMapping("/getSmsCode")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "phonenumber", value = "电话号码", required = true, dataType = "String", paramType = "query")
    })
    @CrossOrigin
    public AjaxResult getSmsCode(@RequestParam("phonenumber") String phonenumber){
        if(StringUtils.isEmpty(phonenumber)){
            throw new CustomException("手机号码不可以为空");
        }
        //生成随机字串
        String smsCode = VerifyCodeUtils.generateSmsCode(4);
        String smsCodeKey = Constants.SMS_CODE_KEY + phonenumber;
        redisCache.setCacheObject(smsCodeKey, smsCode, Constants.SMSCODE_EXPIRATION, TimeUnit.MINUTES);
        Map<String, String> mapParams = new HashMap<>();
        mapParams.put("code" , smsCode);
        String param = JSON.toJSONString(mapParams);
        //return AjaxResult.success("操作成功",smsCode);
        // 发送短信验证码
        try {
            CommonResponse commonResponse = ALiSmsUtil.sendSms(accessKeyId, accessSecret, phonenumber, signName, templateCode, param);
            String data = commonResponse.getData();
            Map map = JSON.parseObject(data, Map.class);
            String code = (String) map.get("Code");
            String message = (String) map.get("Message");
            if (commonResponse.getHttpStatus() == 200 && "OK".equals(code)) {
                //ajax.put("smsCode" , smsCode);
                return AjaxResult.success("操作成功",smsCode);
            }
            return AjaxResult.error(message);
        } catch (ClientException e) {
            e.printStackTrace();
            return AjaxResult.error(e.getMessage());
        }


    }
 }

至此阿里云短信验证码的接入操作已经完成,对于想要通过api创建模板,查询短信记录的朋友,可以多多参考官方API文档操作即可!