*前言:
最近在学习短信验证码的时候,在网上看来一大堆,都没有什么有用的信息,我自己也试着在其它的小众平台上实现短信功能,但是效率不高
小众平台有三点缺陷:
1.高延迟,发条短信到手机上40秒过了才到手机上*
2.收费太高,有的平台居然还有最低充值要求
3.官方文档太拉跨。
最后我就找了腾讯云去实现短信验证码的功能,想着是大公司,毕竟鹅厂的名气在那里摆着嘛 进去才发现,腾讯云短信功能它可以免费的送你200条短信,这200条也够你实现短信发送功能的了,随便你怎么测试都行,哈哈,
重要的事情说三遍: 要使用该服务必须要有 属于自己的公众号,或者 app 以及个人网站满足其一就可以!!! 使用该服务必须要有 属于自己的公众号,或者 app 以及个人网站满足其一就可以!!! 使用该服务必须要有 属于自己的公众号,或者 app 以及个人网站满足其一就可以!!!
我个人建议申请一个公众号就行了,简单省事。 如果加上你要给自己的公众号取一个大气上档次的名字的话,也顶天五分钟就能搞定了
申请公众号地址
短信功能教学正式开始:
1 登录网页:
微信登录腾讯云短信的网页,害怕各位小伙伴找不到腾讯云短信功能的网页地址,我就给你们贴出来了
腾讯云短信地址
2. 申请签名:
找到签名管理 点击创建签名点击创建签名后会弹出:
签名类型可以选择,你自己有什么就选什么,这里我就是以公众号为例子了去申请签名,签名类容:就是你公众号的名字到了这里最要的就是上传证明了,你要进入网页版公众号 鼠标移动到头像那里,有个账号详情,点进去,截取那里的信息上传,申请说明就是,只要说明的目的就行,用于学习什么的,只要是合理的要求就行。
最后提交申请等待审核就行了,一般半个多小时就能有结果了,
注意!!!:签名如果审核失败,注意查看失败的结果,然后根据失败结果,修改后重新提交,千万不要重新再去申请签名,因为这样就又会等很久,如果你是重新提交的上传信息她会率先处理,比重新去申请签名快很多重新提交 和重新申请是有区别的哟,重新申请是去倒回去执行第二步,重新提交是你申请失败,被客服打回来让你修改提交信息的
申请模板
点击正文模板管理,里面有个申请模板,我把需要注意的内容都写在图文里面了。
你也可以根据腾讯云的指导文档去操作,他会教你一步一步的去实现短信功能,但是最后的发送短信 不是通过我们的Javaweb实现的
完成以上三步后,就可以等待审核了,审核还是挺快的当时我就只是等来半个多小时
4. 通过Javaweb(servlet+jsp)实现短信功能了,仔细看不要漏点任何细节:
上面介绍的都是一些准备工作,现在就是技术性的操作了
首先来到现在大家熟悉的下载依赖了 就是jar 包
官方提供了 两种下载依赖的方式
一个是通过maven的项目下载
如果是maven项目的话直接把下面的代码块导入 pom.xml就行了
<dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId><!-- go to /search?q=tencentcloud-sdk-java and get the latest version. --><!-- 请到/search?q=tencentcloud-sdk-java查询所有版本,最新版本如下 --><version>3.1.322</version></dependency>
一个是在直接下载jar包放在项目里面下面是是操作流程
点击连接
腾讯云官方GitHub下载地址
把下面的jar包都导入项目
5. 完成了导包或者或者下载好依赖后,申请api密钥
之所以要申请密钥是用来产生一个签名的,如果不申请自己写会很麻烦
害怕大家在腾讯云网站迷路,下面我放了api密钥的连接地址
api密钥申请地址
处理API关键操作 不要走神
注意注意我这里满足短信发送验证码 除了这三个必填字段 还需要填写 一个签名字段(就是你申请的签名模板的内容)就能给实现短信发送了
短信应用id:
其它参数设置
刚刚那两个参数就是:api密钥id,密钥key。你在线调试程序的时候不用修改,当你要把代码放入你的项目时,就要修改这两个参数才行
8.在线调试
如果你是跟着我的不走来的话这里肯定就不会出错的。
但是如果出错了 会有错误文档 以及错误信息给你参考,在这里我就不细讲了
9.复制代码到项目中
最后我把我的模板去掉了我的关键信息,并封装到方法的代码发出来共大家参考
public String send( String phone){//把要发送短信的对象读取进来String mass=null;try{//创建四位数随机验证码mass=random.RandomProduc.ProduceRandom();//这里我自己创建的一个类来实现四位随机数,你们可以自己写一下// 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密// 密钥可前往https://console./cam/capi网站进行获取Credential cred = new Credential("", "");//这里填写你的api密钥// 实例化一个http选项,可选的,没有特殊需求可以跳过HttpProfile httpProfile = new HttpProfile();httpProfile.setEndpoint("");// 实例化一个client选项,可选的,没有特殊需求可以跳过ClientProfile clientProfile = new ClientProfile();clientProfile.setHttpProfile(httpProfile);// 实例化要请求产品的client对象,clientProfile是可选的SmsClient client = new SmsClient(cred, "ap-nanjing", clientProfile);// 实例化一个请求对象,每个接口都会对应一个request对象SendSmsRequest req = new SendSmsRequest();String[] phoneNumberSet1 = {phone};//你要发送短信的对象 req.setPhoneNumberSet(phoneNumberSet1);req.setSmsSdkAppId("");//你的短信应用idreq.setSignName("");//你的签名内容 注意是内容不是id req.setTemplateId("");//你的模板idString[] templateParamSet1 = {mass};//你的模板变量内容 mass是我的验证码随机数req.setTemplateParamSet(templateParamSet1);// 返回的resp是一个SendSmsResponse的实例,与请求对象对应SendSmsResponse resp = client.SendSms(req);// 输出json格式的字符串回包System.out.println(SendSmsResponse.toJsonString(resp));} catch (TencentCloudSDKException e) {System.out.println(e.toString());//打印出来的是你发送的信息是否成功 以及错误的原因}return mass;//我返回的是一个随机数}
jsp代码就不用贴了,毕竟这没啥技术含量
我使用的是ajax实现上传的servlet的
思想就是 把手机号 和用户输入的验证码 传到servlet里进行比对
这里是用户点击发送验证码 上传到servlet实现发送短信
package servlet;import phone.sendsm;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/SmsServlet")//用于发送验证码public class SmsServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String phone=request.getParameter("phone");String mass= new sendsm().send(phone);//封装的发送短信的方法request.getSession().setAttribute("mass",mass);//把验证码保存在session中}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}}
第二个servlet也是使用ajax进行与服务端进行交互,把刚刚存进session的验证码 取出来 与用户的进行比对
部分代码如下,主要是 一个servlet我写了多个内容就不好全部粘过来,就截取了短信的内容
String mass = request.getParameter("Smscode");//得到客户填写的随机验证码String original =request.getSession().getAttribute("mass").toString();System.out.println(mass.equals(original));//发送给用户的验证码if (mass.equals(original)) {//用户的验证码与发送的验证码比对response.getWriter().write("2");//成功}else {response.getWriter().write("1");}
最后来一张成功的图片展示