腾讯云短信服务使用记录与.NET Core C#代码分享
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 = 1234;
private const int OVERSEA_TEMPLATE_ID = 5678;
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 != 0)
{
_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(100000, 999999);
}
}
原文地址:http://www.cnblogs.com/dudu/p/7782376.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
腾讯云短信服务使用记录与.NET Core C#代码分享相关推荐
- 腾讯云短信服务使用指南
引入腾讯云短信服务依赖 <!-- 引入腾讯云短信服务 依赖 --> <dependency><groupId>com.tencentcloudapi</gro ...
- 阿里云短信服务使用介绍
简介 现在很多的应用包括手机App.网页等绝大多数都已经采用了邮箱.短信验证的方式,甚至很多游戏都需要绑定邮箱和手机号,并通过发送邮件.短信验证码来实现账号的有效化验证和绑定.就像某些应用在用户注册账 ...
- 阿里云短信服务使用简介
笔者最近的SpringBoot项目中使用到了阿里云的短信服务,在此做些总结. 阿里云短信服务官方指导教程:https://help.aliyun.com/document_detail/59210.h ...
- 阿里云短信服务使用_短信验证码本地测试
这里的签名名称和模版CODE下面会用到 新建用户(它会给你一个ak 密钥 一定要保存下来 ,只出现这一次) 这里就是下面代码中需要用到的AccessKey ID和AccessKey Secret 这里 ...
- 阿里云短信服务使用代理的坑
1. 初始配置 在springboot 启动时候配置了系统参数 其中的http 和 https 分别做好代理了 prop.setProperty("https.proxyHost" ...
- 使用Python开通腾讯云短信(sms)【亲测有效·超详细】
使用Python开通腾讯云短信(sms) 1.开通腾讯云短信服务 2.创建应用 3.创建签名 4.Python 操作腾讯云短信接口 模块安装 详细代码[可直接作为接口] 1.开通腾讯云短信服务 腾讯云 ...
- java实现短信验证码发送(架子是springboot 服务平台选择腾讯云短信服务)
业务需求:公司扩展新业务,新增短信验证码提醒服务,负责功能模块完善 暂时只研究了腾讯短信服务的发送(看api谁都能copy出来),短信状态回执(也挺简单,只是自己想复杂了),短信回复回执(暂时没弄明白 ...
- springboot 最新腾讯云短信接入的坑(包含所有操作流程)
腾讯云接入短信,需要填写备案好的域名,且通过域名能正常访问到你的网站.如果你的服务器,域名全部都在腾讯云,请确保你的服务器可达,且域名已完成备案,域名的某个A记录正常(通常是www),通过这个记录值可 ...
- 短信平台专业版软件客户端功能详解源码搭建|移讯云短信系统
国际短信平台专业版软件客户端功能详解|移讯云短信系统 首页显示 剩余条数 充值总数 提交总数 成功数量 失败数量 未知数量 代发数量 签名数量 最新提交 平台公告 API接口文档 短信发送 发送短信选 ...
最新文章
- Python 之vim编写python自动补全
- ThinkPHP中的快捷函数小结
- 车载导航系统中常用物理量和单位
- 如何取到两个日期中的每一天,并且打印出来
- [UIKit学习]00.关于前置知识(storyboard,UIViewController,类扩展,项目属性)
- dbvisivuser连oracle数据库报错没有权限
- 揭开面纱:Kubernetes架构详解
- python读取txt每一行存入数组
- AI产品经理的前世今生
- poi创建数据透视表_如何创建数据透视表样式
- 360安全卫士安装不了此程序被组策略阻止
- u一点·料:阿里巴巴1688ued体验设计践行之路
- ABP vNext 缓存使用
- openCv 图像顺时针 逆时针旋转
- mysql utl_file_Oracle中utl_file包的使用
- ZROI 2018 ZYB建围墙
- 经验之谈,这16个Excel函数,几乎可以解决80%的数据统计工作!
- 模拟电路设计(34)---脉宽调制型开关电路
- Shiro中principal和credential的区别
- MOSS系列之五母版页和布局页Featur…