一、步骤

  1. 登录网易云信,创建短信应用。
  2. 申请短信使用业务。
  3. 创建短信验证码模板(验证码模板里有一个默认的模板),也可以自定义创建短信模板。
  4. 创建web项目导入jar包,httpclient.jar和httpcore.jar(网易云信里有自己下)
  5. 一个简单的注册页面。
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head><title>注册界面</title><script src="static/jquery/jquery-3.4.1.js"></script>
</head>
<body><form action="reg" method="post">用户名:<input name="account"/><br/>密码:<input name="password"><br/>手机号:<input id="phone" name="phone" type="number"><input onclick="getCode(this);" type="button" value="获取验证码"><br/>验证码:<input name="code" type="number"/><br/>姓名:<input name="name"><br/><input type="submit" value="注册"></form><script type="text/javascript">var codeTime = 10;function getCode(obj) {sendSms(obj);}//开启验证码倒计时,并且在时间内不能重复点击function startTime(obj) {var ins = setInterval(function () {if(codeTime==0){$(obj).attr("disabled",false);$(obj).val("获取验证码");codeTime=10;clearInterval(ins);}else{$(obj).attr("disabled",true);$(obj).val("重新发送("+codeTime+")秒");codeTime--;}},1000);}//发送ajax请求获取验证码function sendSms(obj) {$.ajax({url:"getCode",type:"post",data:{phone:$("#phone").val()},success:function (res) {if(res.code==200){alert("获取验证码成功");startTime(obj);}else{alert("获取失败:"+res.msg);}}})}</script>
</body>
</html>

6、准备网易云信提供的两个操作类(可以把他们设置为工具类)

需要注意的是APP_KEY和APP_SECRET两个参数,到网易云信的APP_KEY管理中获取这两个参数,更改到代码对应位置。

其中public static String sendCode(String mobile,String templateId)方法传递的参数是手机号和短信模板,返回值是一个字符串{code,msg,obj};

package cn.hgq.util;import java.util.ArrayList;
import java.util.Date;
import java.util.List;import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;/*** 发送验证码* @author liuxuanlin**/
public class SendCode {//发送验证码的请求路径URLprivate static final StringSERVER_URL="https://api.netease.im/sms/sendcode.action";//网易云信分配的账号,请替换你在管理后台应用下申请的Appkeyprivate static final StringAPP_KEY="af9db5152817177eb1fe1ea********";//网易云信分配的密钥,请替换你在管理后台应用下申请的appSecretprivate static final String APP_SECRET="109a3b697695";//随机数private static final String NONCE="123456";//验证码长度,范围4~10,默认为4private static final String CODELEN="6";public static String sendCode(String mobile,String templateId) throws Exception {DefaultHttpClient httpClient = new DefaultHttpClient();HttpPost httpPost = new HttpPost(SERVER_URL);String curTime = String.valueOf((new Date()).getTime() / 1000L);/** 参考计算CheckSum的java代码,在上述文档的参数列表中,有CheckSum的计算文档示例*/String checkSum = CheckSumBuilder.getCheckSum(APP_SECRET, NONCE, curTime);// 设置请求的headerhttpPost.addHeader("AppKey", APP_KEY);httpPost.addHeader("Nonce", NONCE);httpPost.addHeader("CurTime", curTime);httpPost.addHeader("CheckSum", checkSum);httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// 设置请求的的参数,requestBody参数List<NameValuePair> nvps = new ArrayList<NameValuePair>();/** 1.如果是模板短信,请注意参数mobile是有s的,详细参数配置请参考“发送模板短信文档”* 2.参数格式是jsonArray的格式,例如 "['13888888888','13666666666']"* 3.params是根据你模板里面有几个参数,那里面的参数也是jsonArray格式*/nvps.add(new BasicNameValuePair("templateid", templateId));nvps.add(new BasicNameValuePair("mobile", mobile));nvps.add(new BasicNameValuePair("codeLen", CODELEN));httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));// 执行请求HttpResponse response = httpClient.execute(httpPost);/** 1.打印执行结果,打印结果一般会200、315、403、404、413、414、500* 2.具体的code有问题的可以参考官网的Code状态表*/return EntityUtils.toString(response.getEntity(), "utf-8");}
}
package cn.hgq.util;import java.security.MessageDigest;public class CheckSumBuilder {// 计算并获取CheckSumpublic static String getCheckSum(String appSecret, String nonce, String curTime) {return encode("sha1", appSecret + nonce + curTime);}// 计算并获取md5值public static String getMD5(String requestBody) {return encode("md5", requestBody);}private static String encode(String algorithm, String value) {if (value == null) {return null;}try {MessageDigest messageDigest= MessageDigest.getInstance(algorithm);messageDigest.update(value.getBytes());return getFormattedText(messageDigest.digest());} catch (Exception e) {throw new RuntimeException(e);}}private static String getFormattedText(byte[] bytes) {int len = bytes.length;StringBuilder buf = new StringBuilder(len * 2);for (int j = 0; j < len; j++) {buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);buf.append(HEX_DIGITS[bytes[j] & 0x0f]);}return buf.toString();}private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5','6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
}

7、之后就开始写控制器了

package cn.hgq.controller;import cn.hgq.entity.PhoneCode;
import cn.hgq.entity.User;
import cn.hgq.util.SendCode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpSession;@Controller
public class CodeController {@RequestMapping("/getCode")@ResponseBodypublic PhoneCode getCode(String phone, HttpSession session) throws Exception {String result = SendCode.sendCode(phone, "14834232");ObjectMapper om = new ObjectMapper();PhoneCode phoneCode = om.readValue(result, PhoneCode.class);if(phoneCode.getCode()==200){session.setAttribute("code",phoneCode.getObj());//设置session的最大存活时间为三分钟,也就是验证码有效期在session中3分钟session.setMaxInactiveInterval(60*3);}return phoneCode;}@RequestMapping("/reg")public void register(User user,String code,HttpSession session){System.out.println("===================");System.out.println(user);System.out.println(code);System.out.println(session.getAttribute("code"));String sessionCode= (String) session.getAttribute("code");if (sessionCode==null || !(code.equals(sessionCode))){// return "验证码不正确";}else {//把用户数据存到数据库}}
}

返回结果对应的实体类

package cn.hgq.entity;public class PhoneCode {private Integer code;private String msg;private String obj;public PhoneCode(Integer code, String msg, String obj) {this.code = code;this.msg = msg;this.obj = obj;}public PhoneCode() {}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public String getObj() {return obj;}public void setObj(String obj) {this.obj = obj;}@Overridepublic String toString() {return "PhoneCode{" +"code=" + code +", msg='" + msg + '\'' +", obj='" + obj + '\'' +'}';}
}

网易云信 实现短信验证码功能相关推荐

  1. Java使用网易云信发送短信验证码

    一.注册登录 1.1 网易云信网址短信 - 网易云信 1.2 点击如何使用,进行注册,邮箱使用自己的,因为需要激活账号,公司名称可以随便写. 1.3 进入你的邮箱激活登录后,创建应用,创建应用信息可以 ...

  2. 网易云信语音短信验证码图解

    网易云信官网 01-注册并登录控制台 02-主控制台 03-创建应用 04-开通短信模块 05-短信模板ID 06-密钥管理 07-界面效果图

  3. 网易云信国际短信上线啦!

    网易云信国际短信功能正式上线啦: 短信通道覆盖全球199个国家和地区,支持1423家通信运营商: 国际短信资源包是预付费方式,支付费用购买成功后,在有效期范围内针对以上199个国家和地域均可发送验证码 ...

  4. Unity C# 网易云信【短信服务】

    Unity C# 网易云信[短信服务] 一.注册登录网易云信,要实名认证,选择企业或者个人认证,等待通过审核: 二.审核通过后,可以看到有送20条短信验证码,还送了几条语音验证和其他认证,接下来的申请 ...

  5. laravel5.4使用Laravel Sms和阿里云短信服务实现短信验证码功能

    laravel 实现短信验证码功能,搜索资料发现比较流行的有两个包: 一个是laravel sms 地址  https://github.com/toplan/laravel-sms 一个是easy ...

  6. iOS-使用第三方实现短信验证码功能

    目前,很多App是通过短信验证码来实现用户注册和登录功能,目前市面上绝大多数的短信SP提供商都是需要付费才能提供这种服务,价格普遍在0.07元/条左右: 建议:如果公司比较大,开发人员充足,时间充足的 ...

  7. java短信验证码功能发送的验证码如何校验_java 实现发送短信验证码功能

    原标题:java 实现发送短信验证码功能 如何使用java + maven的项目环境发送短信验证码,本文使用的是榛子云短信 的接口. 1. 安装sdk 下载地址: http://smsow.zhenz ...

  8. 实现app短信验证码功能这样做就很简单!

    现在大多数app短信验证码服务都是由第三方服务商提供的,企业不需要对接运营商就可以让app具备三网发送短信功能,现在app短信验证码使用场景很多,比如说注册.登陆.支付等场景,app短信验证码实现的原 ...

  9. java短信验证码功能发送的验证码如何校验_Java实现发送短信验证码功能

    一个发送短信验证码的功能,使用的是信易通的短信平台接口,然后在Java中使用HttpClient模拟POST请求或者GET请求(看短信平台要求,一般的情况下都是POST请求),调用短信平台提供的接口( ...

最新文章

  1. Matlab中计算程序运行时间的三种方法
  2. hihoCoder1233(2015北京网络赛H题)
  3. 使用Solr 增加索引以及检索
  4. 计算机进去pe怎么设置用户,电脑密码怎么设置,教您设置电脑开机密码
  5. 剪切caspase3_caspase-3
  6. ROS 5.12 上自动更新3322.org动态域名
  7. 太原理工大学ICPC队介绍(2021版)
  8. Hadoop 快速入门
  9. P2P-JXTA学习(1)-入门
  10. C语言课程设计——工资管理系统
  11. Caused by: org.apache.spark.SparkException: This RDD lacks a SparkContext. It could happen in the
  12. Libata错误信息解析
  13. 亚马逊、速卖通、Shopee阿里国际站、mercari、沃尔玛、newegg、美客多等跨境平台卖家如何有效结合测评,补单打破瓶颈
  14. pmap anon 内存泄露
  15. 关系型数据库RDS基本简介
  16. 如何注册自己的企业邮箱?
  17. ASP.NET Core 中简单Session登录校验
  18. matlab 标准二次型,matlab用正交变换化二次型为标准形
  19. 微信小程序+esp8266NodeMcu(cp2102)+onenet物联平台(二)
  20. 龟虽寿 [魏晋] 曹操

热门文章

  1. 鸢尾花数据集、月亮数据集二分类可视化分析
  2. 【论文笔记】Attention-Based Two-Stream Convolutional Networks for Face Spoofing Detection
  3. WebGIS学习笔记——软件安装
  4. html css教程 网易,认识HTML、css的重要性-专业SEO技术教程(27)
  5. 信号量Semaphore
  6. Spring 从入门到精通 (十七) AOP底层如何加工创建代理对象
  7. Vue 的几种数据类型处理方式
  8. 搭建直播平台实现VR直播的关键技术
  9. dom-to-image/将网页dom节点转换成 svg/png/jpeg图片
  10. 检测CO一氧化碳传感器故障