使用阿里云实现短信注册
当前采用的是阿里云的异步sdk模式
详情见
同步与异步模式
前端传送手机号
调用genparam方法获得生成的四位随机数
<dependency><groupId>com.aliyun</groupId><artifactId>alibabacloud-dysmsapi20170525</artifactId><version>4.0.3</version></dependency>
/*** 发送短信验证码至指定手机号码。* * @param signName 短信签名名称,用于标识发送方* @param tempalteCode 短信模板ID(阿里云平台配置的模板编码)* @param phoneNum 接收短信的目标手机号码* @param param 短信模板参数(如验证码内容)* * @return 无返回值,发送成功后将验证码缓存至Redis* @throws 无显式抛出异常,但可能在内部处理异常并打印堆栈跟踪*/
private void sendMessage(String signName,String tempalteCode,String phoneNum,String param) {/** 初始化阿里云短信服务凭证提供者,用于身份验证* 使用配置的accessKeyId和accessKeySecret创建静态凭证*/StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder().accessKeyId(accessKeyId).accessKeySecret(accessKeySecret).build());/** 创建异步短信客户端,配置区域为青岛,设置凭证提供者* 并覆盖端点为阿里云短信服务指定域名*/AsyncClient client = AsyncClient.builder().region("cn-qingdao").credentialsProvider(provider).overrideConfiguration(ClientOverrideConfiguration.create().setEndpointOverride("dysmsapi.aliyuncs.com")).build();/** 构建发送短信请求,设置接收号码、签名名称、模板代码* 及模板参数(JSON格式字符串),参数格式示例:{"code":"123456"}*/SendSmsRequest sendSmsRequest = SendSmsRequest.builder().phoneNumbers(phoneNum).signName(signName).templateCode(tempalteCode).templateParam("{\"code\":\""+param+"\"}").build();/** 发送短信请求并等待响应,若发送成功且返回码为"OK"* 则将验证码缓存至Redis,设置过期时间*/CompletableFuture<SendSmsResponse> response = client.sendSms(sendSmsRequest);try {SendSmsResponse resp = response.get();System.out.println(new Gson().toJson(resp));if (resp.getBody().getCode().equals("OK")){redisCache.setCacheObject(phoneNum,param,Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);}}catch (Exception e){e.printStackTrace();}
}