用户注册(阿里云手机验证码)

阿里云开通三网106短信

①、在阿里云市场搜索"短信",开通三网短信,并可以查看其中的请求示例(java PHP^)

并在个人中心的管理控制台中查到,获取其中的AppKey AppCode

②、接口开发

service-user模块中依赖spring-boot-stater-data-redis(配置文件中连接redis的信息)

cmmon-utils模块中依赖httpclient,httpcore,commons.lang,jetty-util

java 复制代码
@RestController
@RequestMapping("api/user/sms")
public class SmsController{
	
	@Autowired
	private SmsService smsService;

	@GetMapping(value="/sendCode/{phone}")
	public Result sendValidateCode(@PathVariable String phone){
		smsService.sendValidateCode(phone);
		return Reuslt.build(null,ResultCodeEnum.SUCCESS);
	}
}
java 复制代码
@Service
public class SmsServiceImpl implements SmsService{

	@Autowired
	private RedisTemplate<String,String> redisTemplate;
	
	@Override
	public 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下载

java 复制代码
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());
		}
	}
}

====================================================================

①、依赖

xml 复制代码
<dependency>
    <groupId>com.github.qcloudsms</groupId>
    <artifactId>qcloudsms</artifactId>
    <version>1.0.6</version>
</dependency>

②、

java 复制代码
public interface SmsService {
    /**
     * 发送还款短信通知
     * @param mobile 还款人手机号
     * @param date 日期
     * @param amount 应还金额
     */
    void sendRepaymentNotify(String mobile, String date, BigDecimal amount);
}
java 复制代码
@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;

	@Override
	public void sendRepaymentNotify(String mobile, String date, BigDecimal amount){
		
		log.info("给手机号{},发送还款提醒:{},金额:{}",mobile,date,amount);
		
		SmsSingleSender ssender = new SmsSingleSender(appId, appKey);//qcloudsms-1.0.6
		try{
			ssender.sendWithParam("86", mobile,
                    templateId, new String[]{date, amount.toString()}, sign, "", "");
		}catch(Exception ex){
			log.error("发送失败:{}",ex .getMessage());
		}
	}
}

③、业务服务调用

java 复制代码
@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());
        });
}
相关推荐
镭封7 小时前
从视频文案提取到 AI 配音,短视频制作需要哪些工具?
人工智能·智能手机·音视频·语音识别·媒体
lll23526917799 小时前
线下多人发言对比与录音操作
笔记·智能手机
ndsc_d17 小时前
AI生成UI如何兼顾电脑端和手机端?一份需求检查布局、组件与页面状态
人工智能·智能手机·电脑
知已难寻19 小时前
第 5 篇 · 云原生生态与实践:微服务、DevOps、可观测性与 Serverless
大数据·linux·服务器·微服务·云原生·云计算·devops
Anhty20 小时前
2026三款AI变声器测评:iOS男变女自然声线实测
人工智能·功能测试·ios·智能手机
Vitaliy Kostrov(柯维远)20 小时前
Multi-CDN 决策闭环:QoE、成本、安全与内容正确性如何进入同一个策略引擎?
安全·网络安全·云计算·音视频·负载均衡·cdn
长不大的杨瑞杰21 小时前
OpenCode v2 远程开发实战:Web UI、Pair、SSH 隧道与 OpenTunnel 安全接入
人工智能·安全·云计算·软件工程·devops
T量子永生21 小时前
Android SISO 分布式编译集群配置方案
android·分布式·云计算·源代码管理
rich_Chan.21 小时前
阿里云百炼联网搜索教程:web_search 工具开启方法、web_extractor 网页抓取与 json 检索轨迹
前端·阿里云·json
Yan-英杰21 小时前
手机/平板远控电脑哪个好用?ToDesk、向日葵、TeamViewer 六大维度实测对比
人工智能·智能手机·电脑·teamviewer·ai开发工具