网站接入短信平台验证流程

news/2024/5/19 20:45:41/文章来源:https://blog.csdn.net/weixin_30532759/article/details/96288927

 

以网站注册用户为例

前端页面,此处用到volicity前端验证,暂时不做深入

<form action="$!webPath/register_finish.htm" method="post" name="theForm" id="theForm"><table width="900" border="0" cellpadding="0" cellspacing="0" class="regist_common_table"><tr><td width="70" align="right">手机号:</td><td><div class="regist_form_txt"><input name="userName" type="text" id="userName" class="regist_txt" /></div></td></tr><tr><td  width="120"align="right">短信验证码:</td><td><div class="regist_form_txt"><input  name="code" type="text" id="code" class="regist_txt1"/></div><a href="javascript:void(0);" onclick="generic_mobile_verify_code();" id="mobile_verify_code_generic" class="get_code_generic" style="margin-left:7px;line-height:28px;">获取验证码</a></td></tr><!--  <tr><td  align="right">邮箱:</td><td><div class="regist_form_txt"><input name="email" type="text" id="email"  class="regist_txt" /></div></td></tr> --><tr><td  align="right">登陆密码:</td><td><div class="regist_form_txt"><input name="password" type="password" id="password"  class="regist_txt" /></div></td></tr>#if($!config.securityCodeRegister)<script>function refreshCode(){jQuery("#code_img").attr("src","$!webPath/verify.htm?d"+new Date().getTime());}</script><tr><td  align="right">验证码:</td><td><div class="regist_form_txt"><input name="code" type="text" class="regist_code" id="code" /></div>#if($!config.securityCodeType=='voice')<script>function readCode(id){var  s = "<embed id='sound_play' name='sound_play' src='$!webPath/resources/flash/soundPlayer.swf?" + (new Date().getTime()) + "' FlashVars='url=$!webPath"+ "' width='0'   height='0' allowScriptAccess='always' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer' /></embed>";jQuery("#"+id).html(s);}</script><b class="regist_code_img"><img id="code_img" src="$!webPath/verify.htm" width="59" height="27" style="display:none;" /></b><a href="javascript:void(0);" onclick="readCode('player')" title="朗读验证码" class="code_speech"></a><a href="javascript:void(0);" onclick="refreshCode();"  class="code_refresh"></a><span id="player"></span>#else<b class="regist_code_img"><img id="code_img" src="$!webPath/verify.htm" width="59" height="27" /></b><a href="javascript:void(0);" onclick="refreshCode();" class="code_refresh"></a>#end  </td></tr>#end<tr><td>&nbsp;</td><td class="font12"><div class="regist_form_txt"><input name="agree" type="checkbox" class="regist_check" id="agree" value="true" checked="checked" /><label for="agree">我已阅读并同意 </label><a href="javascript:void(0);" onclick="jQuery('#agree_article').show();"  class="blue2">《商城在线服务协议》</a></div>              </td></tr><tr><td>&nbsp;</td><td><input name="" type="submit"  class="regist_btn" value="立即注册"/></td></tr></table></form>

js代码部分:

var time=60;
var time_id="";
function generic_mobile_verify_code(){var mobile=jQuery("#userName").val();if(isMobil(mobile)){jQuery.post("$!webPath/buyer/register_account_mobile_sms.htm",{"type":"mobile_vetify_code","mobile":mobile},function(data){if(data=="100"){alert("短信发送成功");jQuery("#mobile_verify_code_generic").hide();time_id=setInterval(countDown,1000);}if(data=="200"){alert("短信发送失败");}if(data=="400"){alert("手机号码已经注册,短信发送失败");}if(data=="300"){alert("商城未开启短信服务");}},"text");}else{alert("请输入正确的手机号码");}}
function countDown(){--time;jQuery("#time_out_generic").html(time+"秒后可以重新获取,验证码15分钟有效");if(time==0){clearInterval(time_id);jQuery("#time_out_generic").html("");jQuery("#mobile_verify_code_generic").show();time=10;}
}

异步执行的方法:

    @SecurityMapping(title = "手机短信发送", value = "/buyer/register_account_mobile_sms.htm*", rtype = "buyer", rname = "用户中心", rcode = "user_center", rgroup = "用户中心")@RequestMapping("/buyer/register_account_mobile_sms.htm")public void register_account_mobile_sms(HttpServletRequest request,HttpServletResponse response, String type, String mobile)throws UnsupportedEncodingException {String ret = "100";System.out.println("后台传入的手机号是:"+mobile);System.out.println("后台传入的类型是:"+type);if (type.equals("mobile_vetify_code")) {String code = CommUtil.randomString(4).toUpperCase();  //生成验证码的工具类 User user = this.userService.getObjByProperty("telephone", mobile);  //从数据库查找手机号码是否注册if(user != null && !user.equals("")){ret = "400";}else{String content = code + "。[" + this.configService.getSysConfig().getTitle() + "]";if (this.configService.getSysConfig().isSmsEnbale()) {//调用云片的短信网关boolean ret1 = SmsUtils.sendMessage(mobile, content);if (ret1) {VerifyCode mvc = null;try{mvc = this.mobileverifycodeService.getObjByProperty("username", mobile);}catch(Exception e){if (mvc == null) {mvc = new VerifyCode();  //此处是存入数据库的实体类,用于后台比较验证码mvc.setAddTime(new Date());mvc.setCode(code);mvc.setMobile(mobile);this.mobileverifycodeService.save(mvc);}else {mvc.setAddTime(new Date());mvc.setCode(code);mvc.setMobile(mobile);mvc.setUserName(mobile);this.mobileverifycodeService.update(mvc);}}/*VerifyCode mvc = new VerifyCode();mvc.setAddTime(new Date());mvc.setCode(code);mvc.setMobile(mobile);this.mobileverifycodeService.save(mvc);*/} else {ret = "200";}} else {ret = "300";}}response.setContentType("text/plain");response.setHeader("Cache-Control", "no-cache");response.setCharacterEncoding("UTF-8");PrintWriter writer;try {writer = response.getWriter();writer.print(ret);} catch (IOException e) {// TODO Auto-generated catch block
                e.printStackTrace();}}}

方法中调用的随机生成n位数的工具类:  CommUtil.randomString(n).toUpperCase();

public static final String randomString(int length) {char[] numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyz"+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();if (length < 1) {return "";}Random randGen = new Random();char[] randBuffer = new char[length];for (int i = 0; i < randBuffer.length; i++) {randBuffer[i] = numbersAndLetters[randGen.nextInt(71)];}return new String(randBuffer);}

调用云片的短信网关的工具类:

package com.sdsanmi.utils; import java.util.HashMap; import java.util.Map;import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;/*** 短信工具类* @author lld**/ public class SmsUtils {private static final Log logger = LogFactory.getLog(SmsUtils.class); /*** 发送短信验证码* @param mobileNo String* -手机号码* @param vals String* -短信内容*/public static boolean sendMessage(String mobileNo,String vals){Map<String,Object> resultMap = new HashMap<String,Object>(); boolean success = false; String msg = ""; try { //新版短信验证,暂时注释 // if(SMSTool.sendMessage(mobileNo, vals)) if(SendMessageTool.sendMessage(mobileNo, vals)) //接入云片短信验证,原华信弃用 { success = true; msg="发送成功"; } else { msg="发送失败"; } } catch (Exception e) { logger.error("sendMsg error:"+mobileNo,e); } resultMap.put(CommonConstants.RET_RS, success); resultMap.put(CommonConstants.RET_MSG, msg); return success; } }

云片短信demo 地址:https://www.yunpian.com/,所依赖的jar包,此部分和官方api一致

/*** @Description:直接调用云片的后台发送验证码,需要传递单位名称,手机号和验证码信息*              短信账号信息写死在本类中,不在通过配置文件配置* @Company:山东三米信息技术有限公司* @author xuzhiguo* @date 2017-08-16* @version 1.0*/
package com.sdsanmi.utils;import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.json.JSONObject; import java.io.ByteArrayInputStream; import java.io.IOException; import java.net.URISyntaxException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.xml.soap.MessageFactory; import javax.xml.soap.MimeHeaders; import javax.xml.soap.SOAPBody; import javax.xml.soap.SOAPConstants; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPMessage; public class SendMessageTool { //查账户信息的http地址 private static String URI_GET_USER_INFO = "https://sms.yunpian.com/v2/user/get.json"; //智能匹配模版发送接口的http地址 private static String URI_SEND_SMS = "https://sms.yunpian.com/v2/sms/single_send.json"; //模板发送接口的http地址 private static String URI_TPL_SEND_SMS = "https://sms.yunpian.com/v2/sms/tpl_single_send.json"; //发送语音验证码接口的http地址 private static String URI_SEND_VOICE = "https://voice.yunpian.com/v2/voice/send.json"; //编码格式。发送编码格式统一用UTF-8 private static String ENCODING = "UTF-8"; /** * 通过云片平台发送验证码 * @param phone * @param verifyNo * @return */ public static boolean sendMessage(String phone,String verifyNo) throws Exception { boolean flag = false; //修改为您的apikey.apikey可在官网(http://www.yuanpian.com)登录后获取 String apikey = "*****这个不能暴露****"; //修改为您要发送的手机号 String mobile = URLEncoder.encode(phone,ENCODING); /**************** 查账户信息调用示例 *****************/ System.out.println(SendMessageTool.getUserInfo(apikey)); /**************** 使用智能匹配模版接口发短信(推荐) *****************/ //设置您要发送的内容(内容必须和某个模板匹配。以下例子匹配的是系统提供的1号模板) String text = "【东地美商城】亲,您的验证码:"+verifyNo+"(如非本人操作,请忽略)"; //发短信调用示例 String sms = SendMessageTool.sendSms(apikey, text, mobile); System.out.println(sms); //{"code":0,"msg":"发送成功","count":1,"fee":0.05,"unit":"RMB","mobile":"15628989008","sid":17018239170} // System.out.println(sms.subSequence(8, 9)); if (sms.subSequence(8, 9).toString().equals("0")) { flag = true; System.out.println("发送的短信信息是:"+text); // System.out.println(flag);  } return flag; } /** * 取账户信息 * * @return json格式字符串 * @throws java.io.IOException */ public static String getUserInfo(String apikey) throws IOException, URISyntaxException { Map<String, String> params = new HashMap<String, String>(); params.put("apikey", apikey); return post(URI_GET_USER_INFO, params); } /** * 智能匹配模版接口发短信 * * @param apikey apikey * @param text  短信内容 * @param mobile  接受的手机号 * @return json格式字符串 * @throws IOException */ public static String sendSms(String apikey, String text, String mobile) throws IOException { Map<String, String> params = new HashMap<String, String>(); params.put("apikey", apikey); params.put("text", text); params.put("mobile", mobile); return post(URI_SEND_SMS, params); } /** * 基于HttpClient 4.3的通用POST方法 * * @param url 提交的URL * @param paramsMap 提交<参数,值>Map * @return 提交响应 */ public static String post(String url, Map<String, String> paramsMap) { CloseableHttpClient client = HttpClients.createDefault(); String responseText = ""; CloseableHttpResponse response = null; try { HttpPost method = new HttpPost(url); if (paramsMap != null) { List<NameValuePair> paramList = new ArrayList<NameValuePair>(); for (Map.Entry<String, String> param : paramsMap.entrySet()) { NameValuePair pair = new BasicNameValuePair(param.getKey(), param.getValue()); paramList.add(pair); } method.setEntity(new UrlEncodedFormEntity(paramList, ENCODING)); } response = client.execute(method); HttpEntity entity = response.getEntity(); if (entity != null) { responseText = EntityUtils.toString(entity); } } catch (Exception e) { e.printStackTrace(); } finally { try { response.close(); } catch (Exception e) { e.printStackTrace(); } } return responseText; } //测试用 public static void main(String[] args) { try { sendMessage("15628989008","121121"); } catch(Exception e) { e.printStackTrace(); } } }

 

转载于:https://www.cnblogs.com/by-xu/p/7531586.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_831731.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不知名网站编程(一)

不知名网站编程记录&#xff08;一&#xff09; function place(a) {c.fillStyle "red";c.fillRect(a,0,20,20);c.fillStyle "green";c.fillRect(a20,20,20,20);c.fillStyle "blue";c.fillRect(a40,40,20,20); }var a 0; while(a<200) {…

不知名网站编程(二)

不知名网站编程记录&#xff08;二&#xff09; var a 0; var b 0; while(b<6) {c.fillStyle "blue";c.fillRect(12*a,12*a,240-24*a,240-24*a);a 1;c.fillStyle "orange";c.fillRect(12*a,12*a,240-24*a,240-24*a);a 1;b 1; }var a 0; var b …

不知名网站编程(三)

不知名网站编程记录&#xff08;三&#xff09; var a 0; var b 0; do { c.fillStyle rgb(0,0,a);c.fillRect(b,b,20,20);a a 60;b b 20; }while(b<80);var a 0; var b 0; do {c.fillStyle rgb(255-1.2*a,255-0.6*a,a);c.fillRect(b,b,200-2*b,200-2*b);a a 6…

不知名网站编程(四)

不知名网站编程记录&#xff08;四&#xff09; var a 0; var b 0; do {c.fillStyle rgb(128a,0,128-a);c.fillRect(b,b,200-2*b,200-2*b);a a 32;b b 20; }while(b<80);var a 0; var b 100; do {c.fillStyle rgb(255-a,0,0);c.fillRect(0,0,b,b);a a 63;b b …

基于jsp技术的校园二手交易网站

【项目介绍】基于jsp的校园二手商品交易网站系统使用jsp技术进行开发&#xff0c;项目主要实现了一整套的校园二手交易逻辑&#xff0c; 主要功能如下&#xff08;包括但不限于&#xff0c;只列出主要功能&#xff09;&#xff1a;管理员模块 |-----用户管理 |-----商品管…

Windows 2012 R2版本下部署IIS网站

Windows 2012 R2是一个比较稳定的服务器版本&#xff0c;本文分享一篇在Windows 2012 R2版本下搭建IIS项目的操作流程。 1. 安装IIS Web服务器 打开远程桌面->控制面板->程序和功能->打开或关闭Windows功能->添加角色和功能 安装您的实际需求勾选必要的安装&#x…

技术文章精美配图模板网站推荐-创客贴

最近上海的风景很好&#xff0c;有清晨的微风、有蓝天白云&#xff0c;小编被大好河山迷住了&#xff0c;只顾着欣赏美景佳人&#xff0c;今天开始上班&#xff0c;把思绪和心情收回来&#xff0c;得花一些时间来写写东西&#xff0c;记录记录生活。我经常逛知乎&#xff0c;也…

手把手教你查看网站遭受到的Web应用攻击类型

常见Web应用攻击类型有&#xff1a;webshell、SQL注入、文件包含、CC攻击、XSS跨站脚本攻击、敏感文件访问、远程命令、恶意扫描、代码执行、恶意采集、特殊攻击、其他攻击十二种攻击类型。 如何查看网站遭受的Web应用攻击&#xff1f; &#xff08;请参照以下步骤&#xff1a;…

MySQL 测试数据(附开源网站)

MySQL测试数据 前言&#xff1a; 笔者接下来要步入MySQL DQL的学习阶段了&#xff0c;然而在开始学习时&#xff0c;苦苦没有测试数据&#xff0c;故花了很长时间利用某开源网站&#xff08;附在文章最后&#xff09;制作了4个数据表&#xff0c;四个表之间笔者经过考虑并没有…

DEDECMS打开网站后台系统首页卡解决方法

找到根目录下&#xff08;一般是dede&#xff09; templets文件夹下找到index_body.htm文件&#xff0c;将第25行至第41行部分注释或删除 保存文件&#xff0c;然后再打开后台&#xff0c;就不会有这个问题了。 转载于:https://www.cnblogs.com/500m/p/10534323.html

【博客搬家】Java 专业人士必备的网站列表

Web 站点 Web 站点的数目浩如烟海&#xff0c;如果您想要消化其中的内容&#xff0c;穷毕生之力也难以全部访问。包含 Java 语言某方面内容的详尽的网站列表会大得离谱。下列站点都是可靠、真实的。Sun 的 Java 技术站点Sun 的 Java 语言站点这是 Sun 的 Java 语言主站。作为 J…

【博客搬家】提高网站速度之终极技巧

网站访问速度可以直接影响到网站的流量&#xff0c;而网站的访问量几乎与网站的利益直接挂钩&#xff0c;因此网站的速度问题成为企业及站长十分关注的问题。现在网站越来越多&#xff0c;不少朋友的网站打开速度很不理想。也许自己打开网站速度很快&#xff0c;别人打开自己网…

网站首页高可用_nginx+lua——缓存预热与nginx限流

文章目录第5章 网站首页高可用nginxlua学习目标1 Lua介绍1.1 lua是什么1.2 lua的安装1.3 快速入门1.4 LUA的基本语法1.4.1 注释1.4.2 关键字1.4.3 定义变量1.4.4 Lua中的数据类型1.4.5 流程控制1.4.6 函数1.4.7 require 函数2.nginxluaredis实现广告缓存2.1 需求分析2.2 OpenRe…

大数据项目——网站流量日志数据分析-架构实现思路

文章目录1. 整体技术流程及架构1.1数据处理流程数据采集数据预处理数据入库数据分析数据展现1.2 系统整体架构2.处理的数据说明1. 整体技术流程及架构 1.1数据处理流程 网站流量日志数据分析是一个纯粹的数据分析项目&#xff0c;其整体流程基本上就是依据数据的处理流程进行…

windows IIS部署python Flask 网站

安装IIS,启用CGI 安装Anaconda 我一般机器都安装Anaconda,虽然比较大&#xff0c; 但是管理python版本以及包会很方便。 安装wfastcgi并激活。 打开Anaconda Prompt。 进入python安装目录下的scripts文件夹然后运行wfastcgi-enable 打开"处理程序映射"模块&#xf…

机器学习实战笔记——利用KNN算法改进约会网站的配对效果

利用KNN算法改进约会网站的配对效果 一、案例背景 我的朋友海伦一直使用在线约会网站寻找合适自己的约会对象。尽管约会网站会推荐不同的人选&#xff0c;但她并不是喜欢每一个人。经过一番总结&#xff0c;她发现曾交往过三种类型的人&#xff1a;&#xff08;1&#xff09;不…

使用PHP实现WEB网站登陆后台编写

####html页面&#xff0c;没加入CSS代码&#xff1a; <form action"login.php" method"post"><input type"text" placeholder"账号" name"id"/><input type"password" name"password"/…

使用PHP实现WEB网站登陆后台编写

####html页面&#xff0c;没加入CSS代码&#xff1a; <form action"login.php" method"post"><input type"text" placeholder"账号" name"id"/><input type"password" name"password"/…

iis 关闭服务器的显示报错,IIS7网站500错误开启显示报错信息

出现500错误的原因是很多的&#xff0c;一般来说&#xff0c;如果程序出错&#xff0c;那么在浏览器内会返回给用户一个友好的错误提示&#xff0c;统一称之为服务器500错误。 解决的方法就是您必须在http中能够正确的获得错误信息。方法为&#xff1a;请打开浏览器&#xff0c…

jsp mysql 游戏官网_基于jsp+mysql的JSP游戏购买网站

运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。IDE环境&#xff1a; Eclipse,Myeclipse,IDEA都可以tomcat环境&#xff1a; Tomcat 7.x,8.x,9.x版本均可&#xff0c;理论上Tomcat版本不是太老都可以。硬件环境&#xff1a; windows …