腾讯云sms短信验证码

【短信业务属于腾讯云sms,国内短信免费试用,每月有100条】

腾讯云短信免费试用:https://cloud.tencent.com/product/csms

腾讯云sms短信验证码

首先准备工作做好:

1、腾讯云短信功能注册完成,并通过审批。就可以得到以下参数。

tpl_id=17**09
sdkappid=14******05
strAppKey =3b543136399******75a0e53ed0382f6

短信接口官方文档:https://cloud.tencent.com/document/product/382/5976

2、引入依赖包

<!-- 腾讯云短信平台-->
<dependency>
    <groupId>com.github.qcloudsms</groupId>
    <artifactId>qcloudsms</artifactId>
    <version>1.0.5</version>
</dependency>

3、编写发送短信验证码公共方法

package ~~~~;

import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.github.qcloudsms.httpclient.HTTPException;
import com.trs.jzzs.common.config.Global;
import org.json.JSONException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Date;
import java.util.Random;

/**
 * @Title: 腾讯云短信
 * @date 2018/10/8 10:03
 */
public class MsgUtil {
    /**
     * 日志对象
     */
    private Logger logger = LoggerFactory.getLogger(getClass());

    static final String VALIDATE_CODE = "validateCode";
    // 短信应用SDK AppID
    static int appid = Integer.parseInt(Global.getConfig("tencent.appid")); // 1400开头
    // 短信应用SDK AppKey
    static String appkey = Global.getConfig("tencent.appkey");
    // 需要发送短信的手机号码
    String[] phoneNumbers = {"21212313123", "12345678902", "12345678903"};
    // 短信模板ID,需要在短信应用中申请
    static int templateId = Integer.parseInt(Global.getConfig("tencent.templateId"));
    // 签名
    static String smsSign = ""; // NOTE: 这里的签名"腾讯云"只是一个示例,真实的签名需要在短信控制台中申请,另外签名参数使用的是`签名内容`,而不是`签名ID`

    public static SmsSingleSenderResult sendMsg(String mobile, HttpServletRequest request) {
        SmsSingleSenderResult result = null;
        try {
            //生成验证码
            String code = createCharacter();
            String[] params = {code,"5"};//数组具体的元素个数和模板中变量个数必须一致,例如事例中templateId:5678对应一个变量,参数数组中元素个数也必须是一个
            SmsSingleSender ssender = new SmsSingleSender(appid, appkey);
            result = ssender.sendWithParam("86", mobile,
                templateId, params, smsSign, "", "");  // 签名参数未提供或者为空时,会使用默认签名发送短信
            request.getSession().setAttribute("VALIDATE_CODE", code);
            request.getSession().setAttribute("SEND_TIME", new Date());
        } catch (HTTPException e) {
            // HTTP响应码错误
            e.printStackTrace();
        } catch (JSONException e) {
            // json解析错误
            e.printStackTrace();
        } catch (IOException e) {
            // 网络IO错误
            e.printStackTrace();
        }
        return result;
    }

    private static String createCharacter() {
        char[] codeSeq = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
        Random random = new Random();
        StringBuilder s = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            String r = String.valueOf(codeSeq[random.nextInt(codeSeq.length)]);//random.nextInt(10));
            s.append(r);
        }
        return s.toString();
    }
}