阿里云开通三网106短信
①、在阿里云市场搜索“短信”,开通三网短信,并可以查看其中的请求示例(java PHP^)
并在个人中心的管理控制台中查到,获取其中的AppKey AppCode
②、接口开发
service-user模块中依赖spring-boot-stater-data-redis(配置文件中连接redis的信息)
cmmon-utils模块中依赖httpclient,httpcore,commons.lang,jetty-util
@RestController
@RequestMapping("api/user/sms")
public class SmsController{@Autowiredprivate SmsService smsService;@GetMapping(value="/sendCode/{phone}")public Result sendValidateCode(@PathVariable String phone){smsService.sendValidateCode(phone);return Reuslt.build(null,ResultCodeEnum.SUCCESS);}
}
@Service
public class SmsServiceImpl implements SmsService{@Autowiredprivate RedisTemplate<String,String> redisTemplate;@Overridepublic void sendCode(String phone){//生成验证码(通过common.lang工具生成4位验证码)String code = RandomStringUtils.randomNumeric(4);//将验证码放到redis,并设置过期时间redisTemplate.opsForValue().set(phone,code,5,TimeUnit.MINUTES);//向手机号发送短信验证码sendMessage(phone,code);}private void sendMessage(String phone,String code){String host = "https://dfsns.market.alicloudapi.com";String path = "/data/send_sms";String method = "POST";String appcode = "开通阿里云短信服务时的code";Map<String,String> headers = new HashMap<>();headers.put("Authorization","APPCODE" + appcode);headers.put("Content-Type","application/x-www-form-urlencoded";charset-UTF-8);Map<String,String> querys = new HashMap<>();Map<String,String> bodys = new HashMap<>();bodys.put("content","code:"+code);bodys.put("template_id","CST-ptdie100");bodys.put("phone_number",phone);try{//通过HttpUtils工具类进行短信的发送HttpResponse response = HttpUtils.doPost(host,path,method,headers,querys,body);System.out.println(response.toString())}catch(Exception e){e.printStackTrace()}}
}
HttpUtils工具类及其依赖,从github中aliyun下载
public class HttpUtils{public static HttpRespose doGet(String host,String path,String method,Map<String,String> headers,Map<String,String> querys) throws Exception{HttpClient httpClient = wrapClient(host);HttpGet request = new HttpGet(buildUrl(host,path,querys));for(Map.Entry<String,String> e:headers.entrySet){request.addHeader(e.getKey(),e.getValue());}return httpClient.execute(request);}public static HttpResponse doPost(String host,String path,String method,Map<String,String> headers,Map<String,String> querys,Map<String,String> bodys)throws Exception{HttpClient httpClient = wrapClient(host);HttpPost request = new HttpPost(buildUrl(host,path,querys));for(Map.Entry<String,String> e:headers.entrySet()){request.addHeader(e.getKey(),e.getValue());}}
}
====================================================================
①、依赖
<dependency><groupId>com.github.qcloudsms</groupId><artifactId>qcloudsms</artifactId><version>1.0.6</version>
</dependency>
②、
public interface SmsService {/*** 发送还款短信通知* @param mobile 还款人手机号* @param date 日期* @param amount 应还金额*/void sendRepaymentNotify(String mobile, String date, BigDecimal amount);
}
@Service
@Slf4j
public class QCloudSmsServiceImpl implements SmsService{@Value("${sms.qcloud.appId}")private int appId;@Value("${sms.qcloud.appKey}")private String appKey;@Value("{sms.qcloud.templateId}")private int templateId;@Value("{sms.qcloud.sign}")private String sign;@Overridepublic void sendRepaymentNotify(String mobile, String date, BigDecimal amount){log.info("给手机号{},发送还款提醒:{},金额:{}",mobile,date,amount);SmsSingleSender ssender = new SmsSingleSender(appId, appKey);//qcloudsms-1.0.6try{ssender.sendWithParam("86", mobile,templateId, new String[]{date, amount.toString()}, sign, "", "");}catch(Exception ex){log.error("发送失败:{}",ex .getMessage());}}
}
③、业务服务调用
@Override
public void sendRepaymentNotify(String date){//1.查询到期的还款计划List<RepaymentPlan> repaymentPlanList = selectDueRepayment(date);//2.遍历还款计划repaymentPlanList.forEach(repaymentPlan -> {//3.得到还款人的信息RestResponse<BorrowerDTO> consumerReponse = consumerApiAgent.getBorrowerMobile(repaymentPlan.getConsumerId());//4.得到还款人的手机号String mobile = consumerReponse.getResult().getMobile();//5.发送还款短信smsService.sendRepaymentNotify(mobile,date,repaymentPlan.getAmount());});
}