Java SDK发送短信验证码

上次记录了如何发送邮件,其实发送短信和发送邮件差不多。只不过发邮件是不收费的,发短信是要收费的。

这次就来说说怎么样发送短信验证码。

▍实验条件

首先说明一下这篇文章所介绍的发送短信过程中所涉及到的事物。

1、购买短信服务(我使用的是腾讯短信服务)

2、编码工具:IntelliJ IDEA

3、SDK

▍步骤及代码

注:这篇文章跟那篇介绍发邮件的文章使用的是同一个项目,所以引用的工具类有两个是相同的:CalculatorUtil、VerifyCodeUtil,就不再重复粘贴代码,引个传送门(学习||Java后台实现邮件发送)过去吧。

1、购买短信服务:以腾讯短信服务为例

1.1、登录

1.2、选择短信服务

1.3、选择“免费试用”或者“国内短信套餐包”:未使用过腾讯短信服务的用户有100条免费试用短信(有效期7天),如果不能免费试用,那就只好购买了

1.4、添加应用:这里我已经创建过一个了

1.5、填写应用信息,如实填写就好

1.6、创建完成后会出现一条记录

1.7、点击应用名称

1.8、应用里会产生一个AppID和一个App Key,把这个复制下来,后面会用到

1.9、选择“国内文本短信”

1.10、选择“短信内容配置”

1.11、创建签名

1.12、填写相关内容:这个就当是给我的博客开通的短信服务,凡是签名类型为网站的,签名内容就只能是域名,填别的会被驳回的

1.13、添加完成后需要等待审核

1.14、选择“短信正文”

1.15、选择“创建正文模板”

1.16、填写“正文模板”信息

1.17、同样需要等待通过审核

1.18、两项内容均审核通过后第一步完成

2、安装SDK

如果是maven工程,则添加依赖。如果只是普通的Java EE项目,则需手工添加jar包,需添加的jar有4个,这里不做演示,详情参见开发文档(https://cloud.tencent.com/document/product/382/13613)

<!--腾讯云短信服务-->
<dependency>
    <groupId>com.github.qcloudsms</groupId>
    <artifactId>qcloudsms</artifactId>
    <version>1.0.2</version>
</dependency>

3、代码编写

3.1、首先将发送短信的功能封装在一个单独的工具类中

package com.coder.calculator.Util;

import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.github.qcloudsms.httpclient.HTTPException;
import org.json.JSONException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestParam;

import java.io.IOException;
import java.util.Map;

public class CaptchaUtil {

    // 短信应用SDKAppID
    private static int appid = 1400xxxxxx; // 1400开头
    
    // 短信应用SDKAppKey
    private static String appkey = "xxxxxxxxxxxxxxxxxxxxxxxx";

    // 短信模板ID,需要在短信应用中申请
    // NOTE:真实的模板ID需要在短信控制台中申请
    private static int templateId = xxxxxxx; 

    // 签名
    // NOTE:真实的签名需要在短信控制台中申请,另外签名参数使用的是`签名内容`,而不是`签名ID`
    private static String smsSign = "";

    /**
     * 发送短信验证码
     *
     * @paramtel 电话号码
     * @paramverifyCode 验证码
     * @return
     */
    public static void sendCaptcha(String tel, String verifyCode){
        try{
            // 需要发送短信的手机号码
            String phoneNumber = tel;
            
            // 单发短信
            // SmsSingleSender ssender = new SmsSingleSender(appid, appkey);
            // SmsSingleSenderResult result = ssender.send(0, "86", phoneNumber, "您正在注册成为好学堂用户,您的验证码为:" + verifyCode + ",请在10分钟内完成验证,感谢您的支持!", "", "");
        
            // 指定模板ID单发短信
            String[] params = {verifyCode};
            SmsSingleSender ssender = new SmsSingleSender(appid, appkey);
            SmsSingleSenderResult result = ssender.sendWithParam("86", phoneNumber, templateId, params, smsSign, "", "");
        
            // 签名参数未提供或者为空时,会使用默认签名发送短信
            // System.out.print(result);
            
        } catch(HTTPException e) {
            // HTTP响应码错误
            e.printStackTrace();
        } catch(JSONException e) {
            // json解析错误
            e.printStackTrace();
        } catch(IOException e) {
            // 网络IO错误
            e.printStackTrace();
        }
    }
}

3.2、Controller调用Util

/**
 * 获取手机号并发送验证码
 *
 * @param tel 电话号码
 */
@RequestMapping(path={"/sendCaptcha/"},method={RequestMethod.GET,RequestMethod.POST})
@ResponseBody
public String sendCaptcha(@RequestParam("tel") String tel){
    try{
        // 检查手机号是否已经被注册
        // 这是个人写的一个检查手机号是否被注册的方法,可视情况自己编写一个或者删去这个方法的调用
        Map<String,Object> map = captchaService.checkTelExist(tel);
        
        if(map.containsKey("msg")) {
            // 如果有msg这个key值,则说明该手机号已被注册
            return CalculatorUtil.getJSONString(1, map);
        } else {
            // 生成验证码
            String verifyCode = VerifyCodeUtil.generateVerifyCode(6);
            CaptchaUtil.sendCaptcha(tel, verifyCode);
            return CalculatorUtil.getJSONString(0, verifyCode);
        }
    } catch(Exception e) {
        e.printStackTrace();
        return CalculatorUtil.getJSONString(1, "Exception");
    }
}

3.3、前台ajax

// 发送验证码
$.ajax({
    type:"post",
    url:"/sendCaptcha/",
    data:{
        tel:tel
    },
    dataType:"json",
    success:function(data){
        if(0 == data.code){
            console.log(data.msg);
        } else if (1 == data.code) {
            alert(data.msg);
        } else {
            alert("系统出现未知异常");
        }
    },
    error:function(){
        alert("验证码发送失败!");
    }
});

4、至此,整个流程演示完毕

▍我是尾巴

上次发送邮件的功能和这一次的发送短信的功能虽然最终都实现了,但是都只是实现了单发操作(邮件单发,短信单发),什么时候再把群发(邮件群发、短信群发)也给补上去。

猜你喜欢

转载自blog.csdn.net/i_dont_know_a/article/details/80708119