1. 实现手机注册的流程图:
    客户端向应用服务器发出手机注册申请,在应用服务器生成短信验证码,通过短信服务商将短信发送到手机,并且回调通知给应用程序。
  2. 接入步骤
    1)注册开发者账号
    注册账号网址:www.yuntongxun.com/user/reg/init
    短信验证码模板:
    免费开发模板为1,形式为:【云通讯】你使用的是云通讯短信模板,你的验证码是{1},请于对{2}分钟内正确输入。
    2)创建应用
    3)对接测试
    4)上线运营
  3. 下载SDK 和DEMO
    下载网址:
    www.yuntongxun.com/doc/images/CCP_REST_SMS_DEMO_JAVA_v2.6r.zip
    开发文档:
    www.yuntongxun.com/doc/rest/sms/3_2_2_3.html
  4. 发送模板短信接口
public HashMap sendTemplateSMS(String to,String templateId,String[] datas)
参数名称 说明
to 短信接收手机号码集合,用英文逗号分开,最多一次发送200个
templateId 模板id,如使用测试模板,id为1,如使用自己创建的模板,则使用自己创建的短信模板id
datas 字符串数组,如模板中有两个占位符,定义方式为new String[]{“3456”,“2”}
  1. 实现手机注册
    a. 在itrip-auth项目的pom.xml文件中添加依赖
    该依赖来源:容联云官网下载
<dependency><groupId>cn.itrip.ccprestsms</groupId><artifactId>itrip-ccprestsms</artifactId><version>1.0</version></dependency>

b. 配置属性文件sms.properties

c. 在SmsService.java中添加短信发送接口

    /*** 发送短信* @param to 是要发送的手机号码,可以用逗号分隔,一次最多支持100个手机号* @param templateId 是模板ID,在【云通讯】平台上创建的短信模板的ID值;测试的时候可以使用系统的默认模板,id为1* @param datas 替换模板"您的验证码是{1},请于{2}分钟内正确输入"中的内容* @throws Exception*/public void send(String to,String templateId,String[] datas) throws Exception;

d. 在SmsServiceImpl.java中实现以上短信发送

 public void send(String to, String templateId, String[] datas) throws Exception {HashMap<String,Object> result = null;//初始化SDKCCPRestSmsSDK restAPI=new CCPRestSmsSDK();//初始化服务器地址和端口restAPI.init(systemConfig.getSmsServerIP(), systemConfig.getSmsServerPort());//初始化主帐号和主帐号令牌,对应官网开发者主账号下的ACCOUNT SID和AUTH TOKENrestAPI.setAccount(systemConfig.getSmsAccountSid(),systemConfig.getSmsAuthToken());//初始化应用IDrestAPI.setAppId(systemConfig.getSmsAppID());//调用发送模板短信的接口发送短信   to:是要发送的手机号码 ;templateId:是模板ID;datas:要替换的内容数组。result = restAPI.sendTemplateSMS(to,templateId,datas);System.out.println("SDKTestGetSubAccounts result=" + result);if("000000".equals(result.get("statusCode"))){//正常返回输出data包体信息(map)HashMap<String,Object> data = (HashMap<String, Object>) result.get("data");Set<String> keySet = data.keySet();for(String key:keySet){Object object = data.get(key);System.out.println(key +" = "+object);}}else{//异常返回输出错误码和错误信息System.out.println("错误码=" + result.get("statusCode") +" 错误信息= "+result.get("statusMsg"));//logger.error("错误码=" + result.get("statusCode") +" 错误信息= "+result.get("statusMsg"));throw new Exception("错误码=" + result.get("statusCode") +" 错误信息= "+result.get("statusMsg"));}}

e. 在UserService.java中添加接口

 /*** 使用手机号创建用户账号* @param user* @throws Exception*/public void itriptxCreateUserByPhone(ItripUser user) throws Exception;

f.在UserServiceImpl.java中实现手机号创建用户账号

public void itriptxCreateUserByPhone(ItripUser user) throws Exception {//生成验证码String code = String.valueOf(MD5.getRandomCode());//发送验证码smsService.send(user.getUserCode(),"1",new String[]{code,"1"});//缓存验证码到RedisredisAPI.set("activition:"+user.getUserCode(),2*60,code);//保存用户信息itripUserMapper.insertItripUser(user);}

g. UserController.java

@RequestMapping(value="/registerbyphone",method=RequestMethod.POST,produces = "application/json")public @ResponseBody Dto registerByPhone(@RequestBody ItripUserVO userVO){if(!validPhone(userVO.getUserCode())){return  DtoUtil.returnFail("请使用正确的手机号注册",ErrorCode.AUTH_ILLEGAL_USERCODE);}//vo对象转换成pojoItripUser user=new ItripUser();user.setUserCode(userVO.getUserCode());user.setUserPassword(userVO.getUserPassword());user.setUserType(0);  //用户类型(标识:0 自注册用户 1 微信登录 2 QQ登录 3 微博登录)user.setUserName(userVO.getUserName());try {if(null==userService.findByUsername(user.getUserCode())){user.setUserPassword(MD5.getMd5(user.getUserPassword(), 32));userService.itriptxCreateUserByPhone(user);return DtoUtil.returnSuccess();}else{return DtoUtil.returnFail("用户已存在,注册失败", ErrorCode.AUTH_USER_ALREADY_EXISTS);}} catch (Exception e) {e.printStackTrace();return DtoUtil.returnFail(e.getMessage(), ErrorCode.AUTH_UNKNOWN);}}/*** 验证是否合法的手机号* @param phone* @return*/private boolean validPhone(String phone) {String regex="^1[3578]{1}\\d{9}$";return Pattern.compile(regex).matcher(phone).find();}

h.接下需要完成验证,修改UserService.java

/*** 短信验证手机号* @param phoneNumber* @return* @throws Exception*/public boolean validatePhone(String phoneNumber,String code) throws Exception;

i. 实现短信验证接口

public boolean validatePhone(String phoneNumber, String code) throws Exception {String key = "activition:"+phoneNumber;if(redisAPI.exist(key)){if(redisAPI.get(key).equals(code)){ItripUser user = this.findByUsername(phoneNumber);if(EmptyUtils.isNotEmpty(user)){user.setActivated(1);//激活用户user.setFlatID(user.getId());itripUserMapper.updateItripUser(user);return true;}}}return false;}

j.修改UserController.java

@RequestMapping(value="/validatephone",method=RequestMethod.PUT,produces= "application/json")public @ResponseBody Dto validatePhone(@RequestParam String user,@RequestParam String code){try {if(userService.validatePhone(user,code)){return DtoUtil.returnSuccess("验证成功");}else{return DtoUtil.returnSuccess("验证失败");}} catch (Exception e) {e.printStackTrace();return DtoUtil.returnFail("验证失败", ErrorCode.AUTH_ACTIVATE_FAILED);}}

爱旅行项目中实现手机注册相关推荐

  1. 爱旅行项目中实现邮箱注册

    实现邮箱注册需要发送电子邮件,使用spring发送电子邮件会使用到两个类,JavaMailSenderImpl这个类用来发送电子邮件,org.springframework.mail.SimpleMa ...

  2. 爱旅行项目中完成微信支付

    1.配置微信支付的部分请求参数 <!-- 微信手机网站支付 --><bean class="cn.itrip.trade.config.WXPayConfig" ...

  3. 爱旅行项目中使用任务调度

    在itrip-biz模块中搭建起SSM环境,将下面素材复制到工程中resources目录下: 2.下面进行注解式任务调度的配置 在springmvc-servlet.xml中添加如下配置: <b ...

  4. 爱旅行项目中实现支付宝支付

    在ssm框架的基础上,按照以下步骤完成支付功能 1.配置文件 applicationContext-alipay.xml <bean class="cn.itrip.trade.con ...

  5. 爱旅行项目中使用solr实现酒店搜索

    准备工作: 在酒店搜索业务中,搜索内容来自于多张表,查询语句比较复杂.素材中会有提供 我们只需要把提供的solr_home覆盖掉练习时的solr_home即可. 接下来即可在itrip-search模 ...

  6. 爱旅行项目-环境搭建

    爱旅行项目-环境搭建 B2C 商家对客户 professional专业的 前后端分离:前端只负责进行数据显示 后端只负责接口的提供 后端通常以一个对象来返回数据 酒店模块: 1.注册 登录 首页查看推 ...

  7. 在vue项目中使用手机打开控制台(调试)

    项目中实现手机端调试 安装依赖: npm install vconsole -s 在main.js 文件中: import Vconsole from 'vconsole';let vconsole ...

  8. android 项目中打开手机上优酷,腾讯等播放器或任何软件。

    项目中点击一个空间打开手机上以安装的播放器, PackageManager packageManager = getActivity().getPackageManager();            ...

  9. 爱旅行项目-查询酒店位置及酒店特色代码

    在itrip-biz中创建以下接口和类 以下是代码: HotelController.java @Controller @RequestMapping(value = "/api/hotel ...

最新文章

  1. 《CCNP ROUTE (642-902 )认证考试指南》一1.2 将考试主题与典型网络工程师的工作关联起来...
  2. shell__常用命令__awk
  3. 【paddlepaddle速成】paddlepaddle图像分类从模型自定义到测试
  4. Lesson3 Shader着色器
  5. brew更新的时候不更新某个应用_这样用 Git 想不升职加薪都难!
  6. 在VS2010 中使用subversion 进行代码的分支与合并
  7. [系统安全] 四十六.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法
  8. ant-design table 分页(tableProps)
  9. 【OS学习笔记】三 计算机的启动过程
  10. 前后端分离使用 Token 登录解决方案
  11. bash 别名_必不可少的Bash别名
  12. 台风路径超级计算机,厄尔尼诺又要来了?2号台风或要生成,超级计算机:路径争议大...
  13. AutoCAD打印设置
  14. 下载百度网盘资源不限速的两种方法
  15. JAVA_OPTS(JVM相关运行参数的变量)设置
  16. 设计原则SOLD之 —— 单一职责原则SRP
  17. AndroidQ SystemUI之锁屏加载(上)滑动锁屏
  18. Mysql 5.7 免安装版windows安装完整教程
  19. 安卓屏幕坏了怎么把资料拷出来_选择苹果还是安卓呢?(老安卓转苹果11用户体验)...
  20. Cesium中加载地形影像切片,以及3dtiles和shp及kml方法

热门文章

  1. 【机器人规划】DWA解析
  2. java计算机毕业设计贵州农产品交易系统MyBatis+系统+LW文档+源码+调试部署
  3. dwa评价分析更新中
  4. Java学习日记8:文件上传工具类的实现和服务器给客户端发送图片
  5. 使用计算机录音,傻瓜式录音,教你如何利用电脑录音!
  6. 介绍一个字符串转换的函数组SCMS_CONV
  7. ubuntu16.04下使用Modbus RTU协议控制Robotiq
  8. 网速网吧服务器型号,轻松搭建网吧影视服务器 让网速快起来
  9. 移动联通基站接口以及电信基站接口分享
  10. 微信支付宝收款码转账H5免签高并发出码带备注可回调成功率99.9%支持重复支付