前言:可以先去看下腾讯云开通短息服务需要哪些信息。我这里使用自己很久之前申请过的公众号,其他的比如网站,小程序啥的也没有,哈哈哈~。
腾讯云地址:
https://console.cloud.tencent.com/smsv2/csms-sign/create
接下来开始实现:
1申请短信服务->创建签名,签名类型选择公众号,因为我只有公众号的信息。大家可以自行选择,然后就是按照按照步骤提示上传相应的信息,接下来就是等到官方审核了。通过以后在签名管理这里就会有一个签名。
2进入正文模板管理,也是按照要求填写相关信息
都审核通过以后我们就会拿到发送短信时需要的参数。
代码如下:
1:pom中引入依赖
<dependency>
<groupId>com.github.qcloudsms</groupId>
<artifactId>qcloudsms</artifactId>
<version>1.0.5</version>
</dependency>
2:腾讯云短信服务的参数,我这里写在了yml文件中,然后读取yml文件
tencent:
msm:
# 应用列表中查看的,SDK AppID是短信应用的唯一标识,调用短信API接口时,需要提供该参数
sdkAppId:
# App Key是用来校验短信发送合法性的密码,与SDKAppID对应
appKey:
# 短信模板ID-正文模板管理中的ID
templateId: ""
# 签名内容
sigeName: ""
第一个参数和第二个参数都可以在应用管理->应用列表中查看到
第三个参数就是模板id
第四个参数就是签名内容,是在签名管理中
3:创建签名参数工具类,目的是读取配置文件中的参数
MsmInfoUtils
package com.example.trade_back_code.utils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @Description: 发送短信字段映射
* @Title: MsmInfoUtils
* @Package com.example.trade_back_code.utils
* @Author: ytsj
* @CreateTime: 2023/1/19 12:08
*/
@Component
public class MsmInfoUtils implements InitializingBean {
/**
* sdkAppId
*/
@Value("${tencent.msm.sdkAppId}")
private String sdkAppId;
/**
* appKey
*/
@Value("${tencent.msm.appKey}")
private String appKey;
/**
* 模板id
*/
@Value("${tencent.msm.templateId}")
private String templateId;
/**
* 签名内容
*/
@Value("${tencent.msm.sigeName}")
private String sigeName;
public static String SDK_APP_ID;
public static String APP_KEY;
public static String TEMPLATE_ID;
public static String SING_NAME;
@Override
public void afterPropertiesSet() throws Exception {
SDK_APP_ID = sdkAppId;
APP_KEY = appKey;
TEMPLATE_ID = templateId;
SING_NAME = sigeName;
}
}
4:调用方法
controller
/**
* @param [phone]
* @return com.example.ResultEntity
* @description 发送短信
* @methodName sendSMS
* @date: 2023/1/19 14:35
* @author ytsj
*/
@GetMapping("/sendSMS")
public ResultEntity sendSMS(String phone) {
String send = msmService.send(phone);
return ResultEntity.success(send);
}
service:
/**
* @description 发送短信
* @methodName send
* @param [phone]
* @return int
* @date: 2023/1/19 12:13
* @author ytsj
*/
public String send(String phone);
service实现类:
/**
* @param [phone]
* @return int
* @description 发送短信业务
* @methodName send
* @date: 2023/1/19 14:09
* @author ytsj
*/
@Override
public String send(String phone) {
// 生成随机数
String code = createRandomCode();
SmsSingleSenderResult result = null;
try {
// 模板需要的参数
String[] params = {code, "5"};
SmsSingleSender ssender = new SmsSingleSender(Integer.parseInt(MsmInfoUtils.SDK_APP_ID), MsmInfoUtils.APP_KEY);
// 单发短信
result = ssender.sendWithParam("86", phone, Integer.parseInt(MsmInfoUtils.TEMPLATE_ID), params, MsmInfoUtils.SING_NAME, "", "");
} catch (JSONException e) {
// json解析错误
e.printStackTrace();
} catch (IOException e) {
// 网络IO错误
e.printStackTrace();
} catch (HTTPException e) {
e.printStackTrace();
}
// 如果有需要这里写存入redis的逻辑就好
if (!"OK".equals(result.errMsg)) {
return result.errMsg;
}
return "OK";
}
/**
* @param []
* @return java.lang.String
* @description 生成随机验证码
* @methodName createRandomCode
* @date: 2023/1/19 14:09
* @author ytsj
*/
public String createRandomCode() {
String str = "4543243879806754623";
StringBuilder st = new StringBuilder(6);
for (int i = 0; i < 6; i++) {
char ch = str.charAt(new Random().nextInt(str.length()));
st.append(ch);
}
String randomCode = st.toString().toLowerCase();
return randomCode;
}
测试: