一个简单的短信注册Demo

**

用户登录任何软件都需要注册账号,有输入手机号发短信的,有获取手机权限获取手机号进行注册的,还有的扫码进行登陆然后关联手机号的,也有关联第三方的比如QQ,新浪微博,支付宝来登录的,无论哪种方式都是为了跟你手机绑定起来,避免一个手机号多个账号的情况

**

今天就随便写一下简单的注册登录代码,

注册的话,手机注册无非两个按钮,一个发送短信,一个注册

注册流程:
用户点击发送短信,后台收到前台传递过来的手机号,然后进行给该手机号发送短信,现在给手机号发送短信的第三方很多,比如阿里大于,科大讯飞,随便找个第三方即可,都是收费的,但是测试会有免费的几条,今天拿阿里大于做个例子

注册一个阿里账号,登录后申请秘钥,然后把SDK下载下来修改下,大概代码如下

先添加依赖,直接下载jar包也可以,基本公司都是用maven,直接引入依赖即可

<dependency>
		<groupId>com.aliyun</groupId>
		<artifactId>aliyun-java-sdk-core</artifactId>
		<version>4.1.0</version>
</dependency>

然后写发送短信的方法

/**
	 * 发送短信
	 * 
	 * @param phone
	 *            手机号
	 */
	public static String send(String phone, String rodom) {
		// 第二个参数为自己独有的accessKeyid,第三个参数为自己独有的accessKeySecret
		DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "AAAAA", "BBBBBB");
		IAcsClient client = new DefaultAcsClient(profile);
		CommonRequest request = new CommonRequest();// 组装请求对象
		// request.setProtocol(ProtocolType.HTTPS);
		request.setMethod(MethodType.POST);// 设置post提交
		request.setDomain("dysmsapi.aliyuncs.com");// 短信API产品域名(接口地址固定,无需修改)
		request.setVersion("2017-05-25");
		request.setAction("SendSms");
		request.putQueryParameter("RegionId", "cn-hangzhou");
		request.putQueryParameter("PhoneNumbers", phone);
		request.putQueryParameter("SignName", "就是短信方括号里面的那个名字");// 短信签名
		request.putQueryParameter("TemplateCode", "SMS_162731312");
		request.putQueryParameter("TemplateParam", "{code:" + rodom + "}");
		try {
			CommonResponse response = client.getCommonResponse(request);
			return response.getData();
		} catch (ServerException e) {
			e.printStackTrace();
		} catch (ClientException e) {
			e.printStackTrace();
		}
		return null;
	}

然后写个生成6位随机数的方法

// 生成6位随机数
	public static String createRodom() {
		Random random = new Random();
		String result = "";
		for (int i = 0; i < 6; i++) {
			result += random.nextInt(10);
		}
		return result;
	}

后台接口两个应该够用了

/**
	 * 发送短信接口
	 * 
	 * @param request
	 * @param number
	 * @return
	 */
	@RequestMapping("/sendSms")
	@ResponseBody
	public ReturnT<String> sendSms(HttpServletRequest request, String number) {
		try {
			// 生成6位验证码
			String rodom = Sms.createRodom();
			// 发送短信
			// TODO
			// Sms.send(number, rodom);
			// 将认证码存入SESSION
			request.getSession().setAttribute("verifyCode", rodom);
			request.getSession().setAttribute("createTime", System.currentTimeMillis());
			return ReturnT.SUCCESS;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
/**
	 * 验证验证码是否正确
	 * 
	 * @param request
	 * @param verifyCode
	 * @return
	 */
	@RequestMapping("/cheakSms")
	@ResponseBody
	public ReturnT<String> cheakSms(HttpServletRequest request, String phone, String password, String verifyCode) {
		String code = (String) request.getSession().getAttribute("verifyCode");
		long time = (long) request.getSession().getAttribute("createTime");
		// 验证码不为空时,到后台进行比较,返回响应码,
		// 为0,提示成功
		// 为1,提示请先获得验证码
		// 为2,提示验证码错误
		// 为3,验证码超时
		// 为4,该手机号已注册
		if (verifyCode == null) {
			return new ReturnT<String>(1, "请先获得验证码");
		} else if (verifyCode.equals(code)) {
			SysUser user = new SysUser();
			user.setLoginName(phone);
			ReturnT<SysUser> returnT = sysUserService.selectSysUser(user);
			if (returnT == null && "".equals(returnT)) {
				if (System.currentTimeMillis() - time > 600000) {
					return new ReturnT<String>(3, "验证码超时");
				} else {
					// 注册成功,存储用户中心,salt默认为123456
					String hex = DigestUtils.md5Hex(phone + password + "123456");
					SysUser sysUser = new SysUser();
					sysUser.setLoginName(phone);
					sysUser.setPassword(hex);
					sysUser.setSalt("123456");
					sysUserService.save(sysUser);
					return new ReturnT<String>(0, "注册成功");
				}
			} else {
				return new ReturnT<String>(2, "验证码错误");
			}

		} else {
			return new ReturnT<String>(4, "该手机号已注册");
		}

	}

注册一个放短信接口,一个检验前台输入的短信验证码,无非就几种情况,一一进行判断下就好了,要么验证码为空,要么不正确,要么已注册,要么已经超时,代码就这么多

接下来开始测试吧,由于短信发完了就手动看验证码

发布了12 篇原创文章 · 获赞 1 · 访问量 8139

猜你喜欢

转载自blog.csdn.net/Jaeger_Java/article/details/104755391
今日推荐