阿里云开通短信服务

1、进入控制台,搜索短信服务,进入

2、开通短信服务,进入到短信服务的控制台中

3、进入国内消息界面

阿里云点播服务 - 图1

4、我们需要申请签名和模板

阿里云点播服务 - 图2

5、模板申请

阿里云点播服务 - 图3 阿里云点播服务 - 图4

6、签名管理,这个不太好通过

阿里云点播服务 - 图5 阿里云点播服务 - 图6

7、收费标准

验证码每条0.045


代码实现

1、依赖

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>fastjson</artifactId>
  4. <version>1.2.28</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.aliyun</groupId>
  8. <artifactId>aliyun-java-sdk-core</artifactId>
  9. <version>4.3.3</version>
  10. </dependency>

2、编写Controller,根据需求发送短信

@RestController
@RequestMapping("/api/msm")
@CrossOrigin //跨域
public class MsmApiController {

    @Autowired
    private MsmService msmService;

    @GetMapping(value = "/send/{phone}")
    public R code(@PathVariable String phone) {
        //这个code是生成的随机值,这个方法这里没有,自己写一个生成随机数的方法吧
        String code = RandomUtil.getFourBitRandom();

        Map<String,Object> param = new HashMap<>();
        param.put("code", code);

        //阿里云发短信需要:手机号,验证码
        boolean isSend = msmService.send(phone, param);

        if(isSend) {
            return R.ok();
        } else {
            return R.error().message("发送短信失败");
        }
    }
}
@Service
public class MsmServiceImpl implements MsmService {

    /**
     * 发送短信
     */
    public boolean send(String PhoneNumbers, Map<String,Object> param) {

        //判断手机号是否为null
        if(StringUtils.isEmpty(PhoneNumbers)) return false;

        //这个ID和密钥我们之前申请OSS的时候用过
        DefaultProfile profile =
                DefaultProfile.getProfile("default", "阿里云的ID", "阿里云的密钥");

        IAcsClient client = new DefaultAcsClient(profile);

        /*
            设置相关参数,这些不需要改变
        */
        CommonRequest request = new CommonRequest();
        //request.setProtocol(ProtocolType.HTTPS);
        //提交方式,我们是post
        request.setMethod(MethodType.POST);
        //发送时我们请求阿里云中哪个地方的方法,这个不能改
        request.setDomain("dysmsapi.aliyuncs.com");
        //版本号
        request.setVersion("2017-05-25");
        //请求阿里云中的哪个方法,这个不能改
        request.setAction("SendSms");

        /*
            设置值
        */
        //名称PhoneNumbers是固定的,值是你要发送的手机号
        request.putQueryParameter("PhoneNumbers", PhoneNumbers);
        //SignName不能改,值是在阿里云中申请的签名名称,比如:我的谷粒在线教育网站
        request.putQueryParameter("SignName", "我的谷粒在线教育网站");
        //TemplateCode不能改,发送短信模板的模板CODE,也就是在阿里云模板管理中的模板CODE
        request.putQueryParameter("TemplateCode", templateCode);
        //TemplateParam不能改,值为验证码,值需要一个JSON的格式,我们可以使用fastjson将Map直接转为JSON格式,当然可以使用其他的,比如GSON,jackson等等
        request.putQueryParameter("TemplateParam", JSONObject.toJSONString(param));

        try {
            //最终发送
            CommonResponse response = client.getCommonResponse(request);
            //发送成功/失败
            return response.getHttpResponse().isSuccess();
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return false;
    }
}