腾讯云短信接入

因公司需要短信提醒功能,公司使用了腾讯云的短信包,对于第三方的短信开发功能。接入腾讯云短信还是很简单的,大致的思路就是在平台上设置好参数,建好模版后,然后直接调用即可。这边调用分为web api调用或者是直接引入腾讯云的SDK进行调用。不管哪种方式都需要使用秘钥。

示例

这边我们先在腾讯云开通短信业务,个人认证后可以免费获取100条短信使用,足够我们自己这边做测试和练习使用了。开通之后,在控制台进入短信模块,我们需要创建签名和模板。

签名

image-20200331133418518.png

签名需要认证,分为企业和个人,企业一般都是需要营业执照,具体可以去腾讯云官网查看要求。这边贴一下个人能够创建签名的几个,这边建议使用APP发布上市场上或者是使用小程序与公众号的后台截图界面(注:我在创建的时候使用了公众号,审核没有通过,原因是说我的公众号名称过于中性,自己注意吧,腾讯云还是挺严格的)


image-20200331133045264.png

正文模版

image-20200331133734333.png

模板比较好通过,注意点({1}为您的登录验证码,请于{2}分钟内填写。如非本人操作,请忽略本短信。(其中{1}、{2}为可自定义的内容,须从1开始连续编号,如{1}、{2}等),按照要求填写好后,一般十五分钟就可以通过。

创建应用

在应用管理下的应用列表中创建应用,得到SdkAppid,然后移步云API秘钥获取秘钥。

编写代码

这边我们需要的东西都已经弄好,接着就要在自己的代码中接入腾讯云短信。

SDK方式

这边sdk引入你可以根据官方文档,我这边以java以例

引入sdk

引入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>3.0.112</version>
</dependency></pre>

编写业务代码,根据代码注释填写参数,发送后会返回一个SendSmsResponse对象,里面存放着输出信息,根据输出信息来进行判断短信是否发送成功。

 public class SendSms1 {
 public static void main(String [] args) {
 try{
 Credential cred = new Credential("secretId", "secretKey");
 HttpProfile httpProfile = new HttpProfile();
 httpProfile.setEndpoint("sms.tencentcloudapi.com");
 ClientProfile clientProfile = new ClientProfile();
 clientProfile.setHttpProfile(httpProfile);
 SmsClient client = new SmsClient(cred, "", clientProfile);
 //组装请求对象-具体描述见控制台-文档部分内容
 SendSmsRequest request = new SendSmsRequest();
 //必填:待发送手机号
 /*request.setPhoneNumbers("13877906666,13877907777,13877908888");*/
 String[] phone ={"+8613877908888"};
 request.setPhoneNumberSet(phone);
 //必填:短信签名-可在短信控制台中找到
 request.setSign("短信签名");
 //短信SdkAppid在 短信控制台 添加应用后生成的实际SdkAppid,示例如1400006666。
 request.setSmsSdkAppid("1400006666");
 //必填:短信模板-可在短信控制台中找到
 request.setTemplateID("短信模版Id");
 //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为String param = "{\"name\":\"张三\",\"code\":\"1234\"}";
 String[] param ={"1234"};
 request.setTemplateParamSet(param);
 SendSmsResponse resp = client.SendSms(request);
 System.out.println(SendSmsRequest.toJsonString(resp));
 } catch (TencentCloudSDKException e) {
 System.out.println(e.toString());
 }
​
 }
}

这边仅仅是写了一个测试类,完全可以将SendSmsRequest、SmsClient、ClientProfile、HttpProfile、Credential等类用Spring注入的方式,实现控制反转,将参数在配置文件中完成配置,可能这样在实际项目中更适合。

云API请求

除了引入SDK的方式之外,直接使用接口进行短信请求,也能完成发送短信需求。对于一些无法使用sdk方式的话,通过http请求来进行发送短信也是可以,但是相较而言,会更加麻烦,因为云API中的鉴权比较复杂。提供官网的接口鉴权文档来帮助完成签名信息。这边贴出代码,运行下面代码获取URL然后发起http请求,完成短信的发送.

 public class TencentCloudAPIDemo {
 private final static String CHARSET = "UTF-8";
​
 public static String sign(String s, String key, String method) throws Exception {
 Mac mac = Mac.getInstance(method);
 SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(CHARSET), mac.getAlgorithm());
 mac.init(secretKeySpec);
 byte[] hash = mac.doFinal(s.getBytes(CHARSET));
 return DatatypeConverter.printBase64Binary(hash);
 }
​
 public static String getStringToSign(TreeMap<String, Object> params) {
 StringBuilder s2s = new StringBuilder("GETsms.tencentcloudapi.com/?");
 // 签名时要求对参数进行字典排序,此处用TreeMap保证顺序
 for (String k : params.keySet()) {
 s2s.append(k).append("=").append(params.get(k).toString()).append("&");
 }
 return s2s.toString().substring(0, s2s.length() - 1);
 }
​
 public static String getUrl(TreeMap<String, Object> params) throws UnsupportedEncodingException {
 StringBuilder url = new StringBuilder("https://sms.tencentcloudapi.com/?");
 // 实际请求的url中对参数顺序没有要求
 for (String k : params.keySet()) {
 // 需要对请求串进行urlencode,由于key都是英文字母,故此处仅对其value进行urlencode
 url.append(k).append("=").append(URLEncoder.encode(params.get(k).toString(), CHARSET)).append("&");
 }
 return url.toString().substring(0, url.length() - 1);
 }
​
 public static void main(String[] args) throws Exception {
 TreeMap<String, Object> params = new TreeMap<String, Object>(); // TreeMap可以自动排序
 // 实际调用时应当使用随机数,例如:
 params.put("Nonce", new Random().nextInt(java.lang.Integer.MAX_VALUE));
 // params.put("Nonce", 11886); // 公共参数
 // 实际调用时应当使用系统当前时间,例如:
 params.put("Timestamp", System.currentTimeMillis() / 1000);
 // params.put("Timestamp", 1465185768); // 公共参数
 params.put("SecretId", "SecretId"); // 公共参数
 params.put("Action", "SendSms"); // 公共参数
 params.put("Version", "2019-07-11"); // 公共参数
 params.put("PhoneNumberSet.0", "+8618511122233"); // 业务参数
 params.put("TemplateID", "模板Id"); // 业务参数
 params.put("TemplateParamSet.0", "参数"); // 业务参数
 params.put("SmsSdkAppid", "SmsSdkAppid"); // 业务参数
 params.put("Sign", "Sign"); // 业务参数
 params.put("Signature", sign(getStringToSign(params), "SecretKey", "HmacSHA1")); // 公共参数
 System.out.println(getUrl(params));
 }
}```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,695评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,569评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,130评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,648评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,655评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,268评论 1 309
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,835评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,740评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,286评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,375评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,505评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,185评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,873评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,357评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,466评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,921评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,515评论 2 359

推荐阅读更多精彩内容