1、即使是相同的短信签名与短信正文模板,也需要针对“国内文本短信”与“海外文本短信”分别申请。开始不知道,以为只要申请一次,给国外手机发短信时给api传对应的国家码就行,后来才发现需要分别申请。

2、短信服务web api响应“手机号内容频率限制”错误。这是由于在30秒内向同一手机号多次发送了相同内容的短信,这是腾讯云短信服务的默认限制——“相同内容短信对同一个手机号,30秒内发送短信条数不超过1条”,可以通过“应用配置”的“短信频率配置”修改这个限制。

3、腾讯云短信服务没有提供 .NET Core 的 SDK,我们自己实现的代码如下:

public class TencentCloudSmsService : ISmsService
{
private static readonly HttpClient _httpClient =
new HttpClient { BaseAddress = new Uri("https://yun.tim.qq.com") };
private readonly string _appId;
private readonly string _appKey;
private const string SIGNATURE = "...";
private const int DOMESTIC_TEMPLATE_ID = ;
private const int OVERSEA_TEMPLATE_ID = ;
private readonly ILogger _logger; public TencentCloudSmsService(IConfiguration conf,
ILoggerFactory loggerFactory)
{
_appId = conf["tencentCloudSms:appId"];
if (string.IsNullOrEmpty(_appId))
throw new ArgumentException($"{nameof(_appId)} must have a value"); _appKey = conf["tencentCloudSms:appKey"];
if (string.IsNullOrEmpty(_appKey))
throw new ArgumentException($"{nameof(_appKey)} must have a value"); _logger = loggerFactory.CreateLogger<TencentCloudSmsService>();
} public async Task<bool> SendCode(string countryCode, long mobile, int code)
{
var random = GetRandom();
var timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
var data = new
{
tel = new { nationcode = countryCode.Replace("+", ""), mobile = mobile.ToString() },
sign = SIGNATURE,
tpl_id = countryCode == "+86" ? DOMESTIC_TEMPLATE_ID : OVERSEA_TEMPLATE_ID ,
@params = new[] { code.ToString() },
sig = ComputeSignature(mobile, random, timestamp),
time = timestamp,
extend = "",
ext = ""
}; var url = $"/v5/tlssmssvr/sendsms?sdkappid={_appId}&random={random}";
_logger.LogDebug("Post to " + _httpClient.BaseAddress + url);
var response = await _httpClient.PostAsJsonAsync<dynamic>(url, data);
_logger.LogDebug("Post data:\n" + JsonConvert.SerializeObject(data));
response.EnsureSuccessStatusCode(); var result = await response.Content.ReadAsAsync<dynamic>();
if(result.result != )
{
_logger.LogError($"Failed to send message to {countryCode}-{mobile}: {result.errmsg}");
return false;
} return true;
} private string ComputeSignature(long mobile, int random, long timestamp)
{
var input = $"appkey={_appKey}&random={random}&time={timestamp}&mobile={mobile}";
var hasBytes = SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(input));
return string.Join("", hasBytes.Select(b => b.ToString("x2")));
} private int GetRandom()
{
return new Random().Next(, );
}
}

腾讯云短信服务使用记录与.NET Core C#代码分享的更多相关文章

  1. 反射实现Model修改前后的内容对比 【API调用】腾讯云短信 Windows操作系统下Redis服务安装图文详解 Redis入门学习

    反射实现Model修改前后的内容对比   在开发过程中,我们会遇到这样一个问题,编辑了一个对象之后,我们想要把这个对象修改了哪些内容保存下来,以便将来查看和追责. 首先我们要创建一个User类 1 p ...

  2. php腾讯云短信验证码

    腾讯云短信控制台:https://console.cloud.tencent.com/sms 腾讯云短信 PHP SDK:https://github.com/qcloudsms/qcloudsms_ ...

  3. 基于tp3.2的腾讯云短信验证码的实现

    新手小白在公司要完成短信验证码注册功能,最初由于没有经验,网上的教程又不是很全,便参考着官方API文档,进行开发 直接进入正题:使用composer下载腾讯云短信接口(记得添加依赖).在项目目录下新建 ...

  4. java实现发短信功能---腾讯云短信

    目录 java实现发短信功能 前言 开发环境 腾讯云 ---短信 代码 效果 结束语 java实现发短信功能 前言 如今发短信功能已经成为互联网公司的标配,本篇文章将一步步实现java发送短信 考察了 ...

  5. Python 腾讯云短信,发送手机验证码

    1.安装包 pip install qcloudsms_py 2.准备好相关参数 腾讯云短信每个月赠送100条短信,申请一个应用,获取appid,然后创建短信签名,然后创建正文模版 3.发送短信 我们 ...

  6. python调用腾讯云短信接口

    目录 python调用腾讯云短信接口 账号注册 python中封装腾讯云短信接口 python调用腾讯云短信接口 账号注册 去腾讯云官网注册一个腾讯云账号,通过实名认证 然后开通短信服务,创建短信应用 ...

  7. 使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题

    springboot集成腾讯云短信服务: (1)导入依赖 <dependency> <groupId>org.springframework.boot</groupId& ...

  8. 腾讯云短信 nodejs 接入, 通过验证码修改手机示例

    腾讯云短信 nodejs 接入, 通过验证码修改手机示例 参考:腾讯云短信文档国内短信快速入门qcloudsms Node.js SDK文档中心>短信>错误码 nodejs sdk 使用示 ...

  9. 云-腾讯云-短信:短信(SMS)

    ylbtech-云-腾讯云-短信:短信(SMS) 快速稳定.简单易用.触达全球的短信服务,支持国内短信.语音短信与国际短信 1.返回顶部 1. 腾讯云短信 SMS 简介 腾讯云短信(Short Mes ...

随机推荐

  1. 如何清空iframe中的内容?

    我都是用这种方法往iframe里面添加内容的. document.frames["iframe1"].document.write("<img src='loadi ...

  2. Sql Server查询性能优化之不可小觑的书签查找

    小小程序猿SQL Server认知的成长 1.没毕业或工作没多久,只知道有数据库.SQL这么个东东,浑然分不清SQL和Sql Server Oracle.MySql的关系,通常认为SQL就是SQL S ...

  3. Go 程序的性能调试问题

    英文原文:Debugging performance issues in Go programs 假设你手上有个Go语言编写的程序,你打算提升它的性能.目前有一些工具可以为此提供帮助.这些工具能帮你发 ...

  4. 门户级UGC系统的技术进化路线 [转]

    原文链接   :http://weibo.com/p/1001603789147444803230 新闻门户网站的评论系统,或者称为跟帖.留言板,是所有门户网站的核心标准服务组件之一.与论坛.博客等其 ...

  5. [转]Linux性能分析工具汇总合集

    出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...

  6. [svc]linux iptables实战

    参考: http://blog.51yip.com/linux/1404.html 链和表 参考: https://aliang.org/Linux/iptables.html 配置 作为服务器 用途 ...

  7. 【Linux高级驱动】rtc驱动开发

    [1.分层思想] 1.1 rtc-dev.c   //设备接口层,功能:给用户提供接口 subsys_initcall(rtc_init);   , RTC_DEV_MAX, "rtc&qu ...

  8. stm32之TIM+ADC+DMA采集50HZ交流信号

    http://cache.baiducontent.com/c?m=9d78d513d98207f04fece47f0d01d7174a02d1743ca6c76409c3e03984145b5637 ...

  9. Mac 抓包工具wireshark使用

    共四部分 1.wireshark简介 2.wireshark mac版安装 3.wireshark 抓取普通http 4.高级应用 1.wireshark 简介(百度百科) Wireshark(前称E ...

  10. Install elasticsearch-head: – for Elasticsearch 5.x

    Running as a plugin of Elasticsearch Install elasticsearch-head:– for Elasticsearch 5.x:site plugins ...