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#代码分享相关推荐

  1. 腾讯云短信服务使用指南

    引入腾讯云短信服务依赖 <!-- 引入腾讯云短信服务 依赖 --> <dependency><groupId>com.tencentcloudapi</gro ...

  2. 阿里云短信服务使用介绍

    简介 现在很多的应用包括手机App.网页等绝大多数都已经采用了邮箱.短信验证的方式,甚至很多游戏都需要绑定邮箱和手机号,并通过发送邮件.短信验证码来实现账号的有效化验证和绑定.就像某些应用在用户注册账 ...

  3. 阿里云短信服务使用简介

    笔者最近的SpringBoot项目中使用到了阿里云的短信服务,在此做些总结. 阿里云短信服务官方指导教程:https://help.aliyun.com/document_detail/59210.h ...

  4. 阿里云短信服务使用_短信验证码本地测试

    这里的签名名称和模版CODE下面会用到 新建用户(它会给你一个ak 密钥 一定要保存下来 ,只出现这一次) 这里就是下面代码中需要用到的AccessKey ID和AccessKey Secret 这里 ...

  5. 阿里云短信服务使用代理的坑

    1. 初始配置 在springboot 启动时候配置了系统参数 其中的http 和 https 分别做好代理了 prop.setProperty("https.proxyHost" ...

  6. 使用Python开通腾讯云短信(sms)【亲测有效·超详细】

    使用Python开通腾讯云短信(sms) 1.开通腾讯云短信服务 2.创建应用 3.创建签名 4.Python 操作腾讯云短信接口 模块安装 详细代码[可直接作为接口] 1.开通腾讯云短信服务 腾讯云 ...

  7. java实现短信验证码发送(架子是springboot 服务平台选择腾讯云短信服务)

    业务需求:公司扩展新业务,新增短信验证码提醒服务,负责功能模块完善 暂时只研究了腾讯短信服务的发送(看api谁都能copy出来),短信状态回执(也挺简单,只是自己想复杂了),短信回复回执(暂时没弄明白 ...

  8. springboot 最新腾讯云短信接入的坑(包含所有操作流程)

    腾讯云接入短信,需要填写备案好的域名,且通过域名能正常访问到你的网站.如果你的服务器,域名全部都在腾讯云,请确保你的服务器可达,且域名已完成备案,域名的某个A记录正常(通常是www),通过这个记录值可 ...

  9. 短信平台专业版软件客户端功能详解源码搭建|移讯云短信系统

    国际短信平台专业版软件客户端功能详解|移讯云短信系统 首页显示 剩余条数 充值总数 提交总数 成功数量 失败数量 未知数量 代发数量 签名数量 最新提交 平台公告 API接口文档 短信发送 发送短信选 ...

最新文章

  1. Python 之vim编写python自动补全
  2. ThinkPHP中的快捷函数小结
  3. 车载导航系统中常用物理量和单位
  4. 如何取到两个日期中的每一天,并且打印出来
  5. [UIKit学习]00.关于前置知识(storyboard,UIViewController,类扩展,项目属性)
  6. dbvisivuser连oracle数据库报错没有权限
  7. 揭开面纱:Kubernetes架构详解
  8. python读取txt每一行存入数组
  9. AI产品经理的前世今生
  10. poi创建数据透视表_如何创建数据透视表样式
  11. 360安全卫士安装不了此程序被组策略阻止
  12. u一点·料:阿里巴巴1688ued体验设计践行之路
  13. ABP vNext 缓存使用
  14. openCv 图像顺时针 逆时针旋转
  15. mysql utl_file_Oracle中utl_file包的使用
  16. ZROI 2018 ZYB建围墙
  17. 经验之谈,这16个Excel函数,几乎可以解决80%的数据统计工作!
  18. 模拟电路设计(34)---脉宽调制型开关电路
  19. Shiro中principal和credential的区别
  20. MOSS系列之五母版页和布局页Featur…

热门文章

  1. apache服务器搭建过程中需要注意到的一些问题
  2. 【转】Ubuntu 修改hosts
  3. 酷桌面:随身携带你的企业
  4. 构建根文件系统(2)Busybox init 进程
  5. 介绍一款受欢迎的.NET 开源UI库
  6. .NET 6新特性试用 | PeriodicTimer
  7. C# 10 新特性 —— 补充篇
  8. JMeter压测笔记
  9. WPF实现环(圆)形进度条
  10. MIPS衰落 LoongArch崛起