爱旅行项目中实现手机注册

9 篇文章 5 订阅 ¥9.90 ¥99.00
本文档详细介绍了如何在爱旅行项目中实现手机注册功能。首先,客户端向服务器发送注册请求,服务器生成短信验证码并通过短信服务商发送。接着,详细阐述了接入云通讯的步骤,包括注册开发者账号、创建应用、对接测试以及上线运营。此外,提供了SDK下载链接和开发文档,指导开发者在Java项目中添加依赖、配置属性文件,实现短信发送接口,以及在UserService和UserController中实现手机注册和短信验证的相关功能。
摘要由CSDN通过智能技术生成
  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;
        //初始化SDK
        CCPRestSmsSDK restAPI=new CCPRestSmsSDK();
        //初始化服务器地址和端口
        restAPI.init(systemConfig.getSmsServerIP(), systemConfig.getSmsServerPort());
        //初始化主帐号和主帐号令牌,对应官网开发者主账号下的ACCOUNT SID和AUTH TOKEN
        restAPI.setAccount(systemConfig.getSmsAccountSid(),systemConfig.getSmsAuthToken());
        //初始化应用ID
        restAPI.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"});
        //缓存验证码到Redis
        redisAPI.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对象转换成pojo
        ItripUser 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);
        }
    }
运用HTML、CSS、JavaScript、jQuery等相关技术和DreamweaverCS6工具设计一个旅行旅游网站,要求网站具有用户登录验证、用户登陆后显示用户名,分为管理员、注册用户、游客三种访问权限,管理员可以修改后台信息、用户可以浏览和提交相关信息、游客可以浏览网站信息。网站具有图片轮播效果、鼠标对图片的进入和移出特效、点击小图放大图片特效、文字超链接、图片超链接、锚链接、菜单栏、景点预定须知、景点简介、交通指南、用户点评功能、div分块、CSS样式、下拉菜单、景点门票预订、酒店预订,表单输入验证功能,提交后提示预定信息,导航栏功能、AJAX城市天气预报查询功能,网站界面美观,布局配色合理,方便和吸引用户的使用。包含10个以上自己设计的超链接页面。 具体要求为: (1) 网站主题为旅行旅游网站,网站标志语、界面主色调与网站主题相匹配,界面布局设计美观、大方、合理,要求用到HTML、CSS、JavaScript和jQuery网页特效、采用JavaScript和jQuery技术编程。 (2) 用户登陆后显示用户名,分为管理员、注册用户、游客三种访问权限,管理员可以修改后台信息、用户可以浏览和提交相关信息、游客可以浏览网站信息,网站具有图片轮播效果、鼠标对图片的进入和移出特效、点击小图放大图片特效、淡入淡出特效、滑动特效、文字超链接、图片超链接、锚链接、菜单栏、景点预定须知、景点简介、交通指南、用户点评功能、div分块、CSS样式、下拉菜单、景点门票预订、酒店预订,表单输入验证功能,提交后提示预定信息,导航栏功能、AJAX城市天气预报查询功能,,10个以上自己设计的超链接页面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值