1、自述
早在18年的时候,我就在项目中使用过阿里云的短信服务,现在我上阿里云短信控制台看,还能看到当时创建的短信签名,如下图所示。
出于某种原因,我现在想重新申请一个新的签名,却审批失败了,原因是:
意思很明确,就是说你必须要有一个上线的应用(公网能访问的),自己个人学习或者做一些线下项目啊都是申请不到短信签名的,之前18年的时候并没有这么严格。
目前有两种方案:
- 买云服务器,买域名,备案域名
- 去别的云看看?比如腾讯云、华为云等
第一种方案的话需要花钱,自己又只是个人用户,并没有需要上线的项目,所以这里先去腾讯云看看情况吧。
经过自己的一番研究之后,发现腾讯云也一样,需要有上线的项目才能申请到短信签名,但万幸的是腾讯云支持公众号和小程序,毕竟是自家的产品,而且公众号和小程序这两样我都有,因此就顺利申请到短信签名了。
2、腾讯云短信服务控制台
一般的步骤是:申请短信签名->申请短信模板->发短信测试,模板就像下面这样的,
其中{1}、{2}是变量,现在我们在腾讯云短信服务控制台上发一条短信试试。
腾讯云短信服务控制台链接:https://console.cloud.tencent.com/smsv2
新建群发任务,如下图所示:
上传短信变量文件,比如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));