创蓝253短信平台的实现

  • 前台调用发送验证码接口,首先进行用户校验,判断用户是否存在,存在就生成验证码然后调用平台接口进行短信发送,之后以一定格式存到redis,再进行验证
  • 发送内容需要去平台配置,有一个短信模板,里面的内容要和代码的一样
  • 将应用所在的服务器ip配置到短信平台。ps:一定要能和外网通讯,之前因为服务器的问题排查了半天没找到原因
 /*** 缓存key-前台有效验证码*/String CACHE_KEY_TOKEN_API_VERIFICATION = "yanzhen:verification:";/*** 缓存时间(单位秒):5分钟*/long CACHE_TIME_5_MINUTE = 300L;@ApiOperation("/发送手机验证码")@PostMapping("/sendVerification")public ApiResult sendVerification(@RequestBody Map<String,String> Data){String phoneNumber = Data.get("phoneNumber");//验证用户是否存在SysUser user = userMapper.checkPhoneUnique(phoneNumber);if (StringUtils.isNull(user)){return new ApiResult<>(500,"账户不存在!");} else {//生成数字验证码String verification = String.valueOf((int) ((Math.random() * 9 + 1) * Math.pow(10, 6 - 1)));smsComponent.sendCodes(phoneNumber,verification);//将验证码缓存到redis 过期时间5min redisComponent.set(CACHE_KEY_TOKEN_API_VERIFICATION + phoneNumber, verification, CACHE_TIME_5_MINUTE);return new ApiResult<>(true);}}
 /*** 验证码-账号*/private static final String CODE_API_URL_CHANGE = "账号";/*** 验证码-密码*/private static final String CODE_PASSWORD_CHANGE = "密码";/*** 验证码-接口URL*/private static final String CODE_API_URL = "http://smssh1.253.com/msg/send/json";/*** 缓存key-短信每天条数限制*/String CACHE_KEY_TOKEN_SMS_LIMIT = "duanxin:sms:limit:";/*** 验证码短信模板*/private final static String LOGIN_CODE_SMS_TEMPLATE_CHANGE = "【验证短信】验证码{s10},您正在修改密码,若非本人操作,请勿泄露。";/*** 发送验证码短信** @param phone 手机号* @param code  验证码*/public void sendCodes(String phone, String code) {checkSMSLimit(phone);// 短信内容 String msg = LOGIN_CODE_SMS_TEMPLATE_CHANGE.replace("{s10}", code);//状态报告String report = "true";SmsSendRequest smsSingleRequest = new SmsSendRequest(CODE_API_URL_CHANGE, CODE_PASSWORD_CHANGE, msg, phone, report);String requestJson = JSON.toJSONString(smsSingleRequest);log.debug("发送短信,requestJson:{}", requestJson);//验证码-接口URL  CODE_API_URLString response = ChuangLanSmsUtil.sendSmsByPost(CODE_API_URL, requestJson);log.info("发送短信,response result :{}", response);}//校验担任验证码发送数量private void checkSMSLimit(String phone) {long expire = (DateUtils.getTodayEndTime() - System.currentTimeMillis()) / 1000;//redis短信递增long count = redisComponent.incr(CacheConstants.CACHE_KEY_TOKEN_SMS_LIMIT + phone, 1, expire);if (count > 20) {log.error("今天短信次数超过限制,手机号:{},发送次数:{}", phone, count);throw new ServerException(100,"今天短信次数超过限制");}}

public class ChuangLanSmsUtil {/**** @author tianyh* @Description* @param path* @param postContent* @return String* @throws*/public static String sendSmsByPost(String path, String postContent) {URL url = null;try {url = new URL(path);HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();httpURLConnection.setRequestMethod("POST");// 提交模式httpURLConnection.setConnectTimeout(10000);//连接超时 单位毫秒httpURLConnection.setReadTimeout(10000);//读取超时 单位毫秒// 发送POST请求必须设置如下两行httpURLConnection.setDoOutput(true);httpURLConnection.setDoInput(true);httpURLConnection.setRequestProperty("Charset", "UTF-8");httpURLConnection.setRequestProperty("Content-Type", "application/json");//           PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
//          printWriter.write(postContent);
//          printWriter.flush();httpURLConnection.connect();OutputStream os=httpURLConnection.getOutputStream();os.write(postContent.getBytes("UTF-8"));os.flush();StringBuilder sb = new StringBuilder();int httpRspCode = httpURLConnection.getResponseCode();if (httpRspCode == HttpURLConnection.HTTP_OK) {// 开始获取数据BufferedReader br = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(), "utf-8"));String line = null;while ((line = br.readLine()) != null) {sb.append(line);}br.close();return sb.toString();}} catch (Exception e) {e.printStackTrace();}return null;}}
    /*** 验证手机号,验证码是否匹配* @return* 前台输入的账号密码验证码进行验证*/@ApiOperation("/验证手机号,和验证码")@PostMapping(value = "/Verification",produces = MediaType.APPLICATION_JSON_VALUE)public ApiResult Verification(@RequestBody Map<String,String> Data){String phoneNumber = Data.get("phoneNumber");String verification = Data.get("verification");String password = Data.get("password");//判断状态码是否为空if(org.springframework.util.StringUtils.isEmpty(verification)){return new ApiResult<>("请输入验证码!");}//获取缓存状态码Object code = redisComponent.get(CACHE_KEY_TOKEN_API_VERIFICATION + phoneNumber);//判断状态码是否存在if(org.springframework.util.StringUtils.isEmpty(code)){return new ApiResult<>(10003,"该验证码已过期!请重新获取~");}String code1 = (String)code;//判断状态码是否一致if(code1.equalsIgnoreCase(verification)){SysUser user = userMapper.checkPhoneUnique(phoneNumber);//密码加密user.setPassword(SecurityUtils.encryptPassword(password));user.setUpdateBy(user.getUserName());//设置密码userService.resetPwd(user);return new ApiResult<>(200,"修改成功!");}else {//不一致return new ApiResult<>(10005,"验证码输入有误!");}}

创蓝253短信平台代码实现相关推荐

  1. ThinkPHP3.2短信验证码 (创蓝253短信验证码)

    创蓝253短信验证码 创蓝253短信验证码使用起来比阿里云的短信验证码简单. 下面放创蓝短信验证码的开发代码 我这里使用的框架是TP3,可能与你们的api放置位置不一样, class Chuangla ...

  2. java接入短信_java接入创蓝253短信验证码的实例讲解

    说明 项目是springboot框架 1.短信配置文件 包含验证码发送路径.用户名.密码 chuanglan.requesturl= chuanglan.account= chuanglan.pswd ...

  3. 如何利用C#/C++调取创蓝253短信验证码

    创蓝253短信服务平台 短信验证码接口调用demo #include <arpa/inet.h> #include <assert.h> #include <errno. ...

  4. python api调用 验证码_Python语言调用创蓝253短信验证码API文档

    本文主要向大家介绍了Python语言调用创蓝253短信验证码API文档,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. #!/usr/local/bin/python #-*- c ...

  5. python api调用 验证码_Python调用创蓝253短信验证码API文档

    #!/usr/local/bin/python #-*- coding:utf-8 -*- # Author: jacky # Time: 14-2-22 下午11:48 # Desc: 短信http ...

  6. 创蓝253短信验证码接口接入常见问题

    1.登录https://zz.253.com/site/login.html 2.获取接口API账号,密码:选择任意产品>激活>企业认证(上传公司营业执照)以及请求地址 demo接入账号( ...

  7. php创蓝253四要素认证_【PHP】创蓝253云通讯平台国际短信API接口demo

    PHP接口请求类 header("Content-type:text/html; charset=UTF-8"); /* * * 类名:ChuanglanSmsApi * 功能:创 ...

  8. 【Python】创蓝253云通讯平台---国际短信API接口demo

    #!/usr/local/bin/python #-*- coding:utf-8 -*- # Author: jacky # Time: 14-2-22 下午11:48 # Desc: 短信http ...

  9. 【Python】创蓝253云通讯平台国际短信API接口DEMO

    #!/usr/local/bin/python #-*- coding:utf-8 -*- # Author: jacky # Time: 14-2-22 下午11:48 # Desc: 短信http ...

最新文章

  1. 【ACM】LightOJ - 1010 Knights in Chessboard(不是搜索...)
  2. 天大和武大计算机考研,985大学排名出炉,天大和武大并列第10,榜首是哪所?...
  3. 网络安全 / crt、pem、pfx、cer、key 作用及区别
  4. .NET5都来了,你还不知道怎么部署到linux?最全部署方案,总有一款适合你
  5. 【SQL】服务器环境下的SQL
  6. 知道 | 同学,你都了解关系型数据库,确定不了解一下这种数据库吗?
  7. C++ 头文件使用规范建议
  8. php接口ip验证,php – IP地址验证帮助
  9. 最常见30种NLP任务练手项目汇总
  10. jar命令 解压/压缩 war、jar文件
  11. html自定义修改单选框多选框样式以及获取选中的值
  12. SpringMVC工作原理概述
  13. Android隐藏app桌面图标
  14. 使用deno和oak开发的短链系统2.0
  15. 中国石油大学(北京)-《石油加工工程》第一阶段在线作业
  16. orbot android教程,Android Orbot malformed reply from SOCKS server
  17. 关键服务器加固系统,服务器加固系统
  18. 人力资源系统技术标准
  19. 经验总结:Maven插件找不到问题
  20. 人口、共享单车与地铁数据下载网站整理

热门文章

  1. 规范布线系统光纤跳线管理
  2. i2c 驱动五:gpio模拟i2c
  3. Azure-发布个人静态网站
  4. oracle numa map size mismatch,Oracle启动时提示map size mismatch; abort
  5. flutter填坑之旅(环境搭建篇--mac系统)
  6. pdf合并与拆分软件的使用
  7. 【MySQL】MySQL之权限管理
  8. pptpd linux centos7,centos7配置pptpd
  9. js破解 X笔网登录
  10. Delphi编程中流的使用