1、自述

早在18年的时候,我就在项目中使用过阿里云的短信服务,现在我上阿里云短信控制台看,还能看到当时创建的短信签名,如下图所示。

项目接入腾讯云短信服务SMS实现向用户发送手机验证码_短信服务

出于某种原因,我现在想重新申请一个新的签名,却审批失败了,原因是:

项目接入腾讯云短信服务SMS实现向用户发送手机验证码_云计算_02


意思很明确,就是说你必须要有一个上线的应用(公网能访问的),自己个人学习或者做一些线下项目啊都是申请不到短信签名的,之前18年的时候并没有这么严格。

目前有两种方案:

  1. 买云服务器,买域名,备案域名
  2. 去别的云看看?比如腾讯云、华为云等

第一种方案的话需要花钱,自己又只是个人用户,并没有需要上线的项目,所以这里先去腾讯云看看情况吧。

经过自己的一番研究之后,发现腾讯云也一样,需要有上线的项目才能申请到短信签名,但万幸的是腾讯云支持公众号和小程序,毕竟是自家的产品,而且公众号和小程序这两样我都有,因此就顺利申请到短信签名了。

2、腾讯云短信服务控制台

一般的步骤是:申请短信签名->申请短信模板->发短信测试,模板就像下面这样的,

项目接入腾讯云短信服务SMS实现向用户发送手机验证码_云计算_03


其中{1}、{2}是变量,现在我们在腾讯云短信服务控制台上发一条短信试试。

腾讯云短信服务控制台链接:​​https://console.cloud.tencent.com/smsv2​

新建群发任务,如下图所示:

项目接入腾讯云短信服务SMS实现向用户发送手机验证码_短信服务_04


上传短信变量文件,比如csv格式文件内容如下所示:

客户手机号,短信内容变量1,短信内容变量2
131########,162626,5
156########,162627,5

最后点击确定,等待审核通过后就能收到短信了。

3、Java SDK发送短信

实际情况下我们会在项目中调用腾讯云的SDK去发送短信,这里演示Java SDK。

Maven依赖:

<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<!-- go to https://search.maven.org/search?q=tencentcloud-sdk-java and get the latest version. -->
<!-- 请到https://search.maven.org/search?q=tencentcloud-sdk-java查询所有版本,最新版本如下 -->
<version>4.0.11</version>
</dependency>

腾讯云短信服务相关接口Java SDK文档:​​https://cloud.tencent.com/document/product/382/43194​

这个文档写的很详细了,我就没必要再重写一遍了,下面展示一下我的发短信的测试代码(最简原则,去掉非必须的代码):

// 1.构造认证对象
Credential cred = new Credential("secretId", "secretKey");
// 2.构造客户端配置
HttpProfile httpProfile = new HttpProfile();
httpProfile.setReqMethod("POST");
httpProfile.setEndpoint("sms.tencentcloudapi.com");
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
// 3.构造客户端
SmsClient client = new SmsClient(cred, "ap-guangzhou",clientProfile);
// 4.请求参数
String sdkAppId = "";
String signName = "";
String templateId = "";
String[] templateParamSet = {""};
String[] phoneNumberSet = {""};
// 5.构造请求对象
SendSmsRequest req = new SendSmsRequest();
req.setSmsSdkAppid(sdkAppId);
req.setSign(signName);
req.setTemplateID(smsSendRequest.getTemplateId());
req.setTemplateParamSet(templateParamSet);
req.setPhoneNumberSet(phoneNumberSet);
// 6.发送请求
SendSmsResponse res = null;
try {
res = client.SendSms(req);
} catch (TencentCloudSDKException e) {
log.error(e.getMessage(),e);
}
log.info(SendSmsResponse.toJsonString(res));