Java接入腾讯云短信验证功能,超详细,超简单!

在微信公众号上的个人会员注册的界面进行手机号验证功能,如下图:

1、注册认证步骤详解

我这里选择了腾讯云的,大家可以选其他公司的,都大同小异。那下面直接开始!新账号注册可以免费领取短信包一百条,设置成功后好像还会送一百条!如下图:

点击直接注册,我们会直接到如下界面!

我们直接点击短信,我们选择注册方式,微信扫码简单快速!注意需要「关注」服务号!

扫码完成,就已经注册成功,接下来就是实名认证!个人认证和企业认证两种方式,我这里选择的是个人认证。

填写个人认证的相关信息!

注册成功后,我们接下来正式开始完成短信调用的部分,因为发送短信我们需要携带签名,所以需要创建签名。点击国内短信------签名管理-----创建签名。因为我之前创建过,所以下面会显示一条!如图:

需要选择签名类型,我这里是公众号,根据自己的需求选择。填写名称可随意但是要符合要求(一般填写公司的名称),上传备案截图(选择类型不同,上传的截图不同,官网有实例,可以用来参考。)和说明后就可以确认提交,一般审核五分钟左右:

签名内容就是短信【一直Tom猫】中的文字。如下图:

签名创建成功后,我们需要创建正文模板,下选择国内短信----------正文模板管理,创建一个新的短信模板,步骤和签名创建类似,可以自定义短信内容,也可以套用模板。创建完成后也需要审核,前提是必须有签名才可以申请模板,不然会被驳回。申请成功如图:

创建新的正文模板,模板名称是用来表示那个正文模板的。如下图:

点击使用标准模板。会出现几个模板供我们选择使用!如下图:

签名和正文模板创建完成后,我们还需要创建应用,如下图:

我们只需要填写名称和应用简介。

创建应用成功界面。

我们点击基础设置,还可以设置一些其他的设置。比如发送的频率、白黑名单等。

我们的注册配置就完成了,下面就开始接入到我们的java中。

2、代码实现

首先需要导入两个包。

<dependency>
     <groupId>com.tencentcloudapi</groupId>
     <artifactId>tencentcloud-sdk-java</artifactId>
     <version>3.1.87</version>
</dependency>
<dependency>
    <groupId>com.github.qcloudsms</groupId>
        <artifactId>qcloudsms</artifactId>
        <version>1.0.6</version>
     </dependency>
 </dependencies>

发送短信的工具类。在我们实际的开发中需要将这些配置信息放到配置文件中进行获取。将这些配置参数换成自己注册的就可以。

package com.example.demo.utils;

import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.github.qcloudsms.httpclient.HTTPException;
import org.json.JSONException;
import org.json.JSONObject;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class SMSUtil {
    public static String sendSMS(HttpServletRequest request, String phoneNumber) {
        String reStr = ""; //定义返回值
        // 短信应用SDK AppID  1400开头
        int appid = 1400****** ;
        // 短信应用SDK AppKey
        String appkey = "748b5b42c2896e46*****bf60fe43";
        // 短信模板ID,需要在短信应用中申请
        int templateId = 697*** ;
        // 签名,使用的是签名内容,而不是签名ID
        String smsSign = "一直Tom猫";
        //随机生成四位验证码的工具类
        String code = keyUtil.keyUtils();
        try {
            //参数,一定要对应短信模板中的参数顺序和个数,
            String[] params = {code};
            //创建ssender对象
            SmsSingleSender ssender = new SmsSingleSender(appid, appkey);
            //发送
            SmsSingleSenderResult result = ssender.sendWithParam("86", phoneNumber,templateId, params, smsSign, "", "");
            if(result.result!=0){
                reStr = "error";
            }
            // 签名参数未提供或者为空时,会使用默认签名发送短信
            HttpSession session = request.getSession();
            //JSONObject存入数据
            JSONObject json = new JSONObject();
            json.put("Code", code);//存入验证码
            json.put("createTime", System.currentTimeMillis());//存入发送短信验证码的时间
            // 将验证码和短信发送时间码存入SESSION
            request.getSession().setAttribute("MsCode", json);
            reStr = "success";
        } catch (HTTPException e) {
            // HTTP响应码错误
            e.printStackTrace();
        } catch (JSONException e) {
            // json解析错误
            e.printStackTrace();
        } catch (IOException e) {
            // 网络IO错误
            e.printStackTrace();
        }catch (Exception e) {
            // 网络IO错误
            e.printStackTrace();
        }
        return reStr;
    }

}

生成四位验证码的工具类

package com.example.demo.utils;

import java.util.Random;

public class keyUtil {
    public static String keyUtils() {
        String str="0123456789";
        StringBuilder st=new StringBuilder(4);
        for(int i=0;i<4;i++){
            char ch=str.charAt(new Random().nextInt(str.length()));
            st.append(ch);
        }
        String findkey=st.toString().toLowerCase();
        return findkey;
    }
}

测试接口 

package com.example.demo.test;

import javax.servlet.http.HttpServletRequest;
import com.example.demo.utils.SMSUtil;

import org.json.JSONObject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class sendMessage {
    //点击发送验证码
    @GetMapping("/sendMs")
    public String sendMs (HttpServletRequest request, String phoneNumber){
        if(phoneNumber!=null&&!phoneNumber.equals("")){
            String s = SMSUtil.sendSMS(request,phoneNumber);
            return s;
         }else{
            return "error";
        }
    }
    //点击注册
    @GetMapping("/register")
    public Object register(HttpServletRequest request, String Code) {
        JSONObject json = (JSONObject)request.getSession().getAttribute("MsCode");
        if(!json.getString("Code").equals(Code)){
            return "验证码错误";
        }
        //我这里模拟了一分钟
        if((System.currentTimeMillis() - json.getLong("createTime")) > 1000 * 60 * 1){
            return "验证码过期";
        }
        //将用户信息存入数据库、这里省略
        return "success";
    }
}

我在本地测试的没有问题的。是不是 so easy!

  • 10
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值