using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Web;namespace Core.Util
{/// <summary>/// 百度接口签名帮助类/// </summary>public class BaiduApiHelper{#region 构造函数/// <summary>/// 构造函数/// </summary>/// <param name="accessKeyId">百度AccessKeyId(AK)</param>/// <param name="secretAccessKey">百度SecretAccessKey(SK)</param>public BaiduApiHelper(string accessKeyId,string secretAccessKey){_accessKeyId = accessKeyId;_secretAccessKey = secretAccessKey;}#endregion#region 内部成员 private string _accessKeyId { get; }private string _secretAccessKey { get; }private string UriEncode(string input, bool encodeSlash = false){StringBuilder builder = new StringBuilder();foreach (byte b in Encoding.UTF8.GetBytes(input)){if ((b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || (b >= '0' && b <= '9') || b == '_' || b == '-' || b == '~' || b == '.'){builder.Append((char)b);}else if (b == '/'){if (encodeSlash){builder.Append("%2F");}else{builder.Append((char)b);}}else{builder.Append('%').Append(b.ToString("X2"));}}return builder.ToString();}private string Hex(byte[] data){var sb = new StringBuilder();foreach (var b in data){sb.Append(b.ToString("x2"));}return sb.ToString();}private string CanonicalRequest(HttpWebRequest req){Uri uri = req.RequestUri;StringBuilder canonicalReq = new StringBuilder();canonicalReq.Append(req.Method).Append("\n").Append(UriEncode(Uri.UnescapeDataString(uri.AbsolutePath))).Append("\n");var parameters = HttpUtility.ParseQueryString(uri.Query);List<string> parameterStrings = new List<string>();foreach (KeyValuePair<string, string> entry in parameters){parameterStrings.Add(UriEncode(entry.Key) + '=' + UriEncode(entry.Value));}parameterStrings.Sort();canonicalReq.Append(string.Join("&", parameterStrings.ToArray())).Append("\n");string host = uri.Host;if (!(uri.Scheme == "https" && uri.Port == 443) && !(uri.Scheme == "http" && uri.Port == 80)){host += ":" + uri.Port;}canonicalReq.Append("host:" + UriEncode(host));return canonicalReq.ToString();}#endregion#region 外部接口/// <summary>/// 发送POST请求/// </summary>/// <param name="method">请求方法,需要大写,列如(POST)</param>/// <param name="host">主机地址列如(http://sms.bj.baidubce.com)</param>/// <param name="url">接口地址列如(/bce/v2/message)</param>/// <param name="paramters">参数列表</param>/// <returns></returns>public string RequestData(string method,string host, string url, Dictionary<string, object> paramters=null){string ak = _accessKeyId;string sk = _secretAccessKey;DateTime now = DateTime.Now.ToCstTime();int expirationInSeconds = 1200;HttpWebRequest req = WebRequest.Create(host + url) as HttpWebRequest;Uri uri = req.RequestUri;req.Method = method;req.ContentType = "application/json";if (paramters != null){Stream requestStream = req.GetRequestStream();byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(paramters));requestStream.Write(data, 0, data.Length);}string signDate = now.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK");string authString = "bce-auth-v1/" + ak + "/" + signDate + "/" + expirationInSeconds;string signingKey = Hex(new HMACSHA256(Encoding.UTF8.GetBytes(sk)).ComputeHash(Encoding.UTF8.GetBytes(authString)));string canonicalRequestString = CanonicalRequest(req);string signature = Hex(new HMACSHA256(Encoding.UTF8.GetBytes(signingKey)).ComputeHash(Encoding.UTF8.GetBytes(canonicalRequestString)));string authorization = authString + "/host/" + signature;req.Headers.Add("x-bce-date", signDate);req.Headers.Add(HttpRequestHeader.Authorization, authorization);HttpWebResponse res;string message = "";try{res = req.GetResponse() as HttpWebResponse;}catch (WebException e){res = e.Response as HttpWebResponse;}message = new StreamReader(res.GetResponseStream()).ReadToEnd();return message;}/// <summary>/// 发送短信/// </summary>/// <param name="phoneNum">手机号码</param>/// <param name="code">验证码</param>/// <returns></returns>public static bool SendMsg(string phoneNum,string code){try{BaiduApiHelper baiduApiHelper = new BaiduApiHelper("", "");string host = "http://sms.bj.baidubce.com";string url = "/bce/v2/message";Dictionary<string, object> paramters = new Dictionary<string, object>();paramters.Add("invokeId", "SGf96VPF-WBBx-qbJK");paramters.Add("phoneNumber", phoneNum);paramters.Add("templateCode", "smsTpl:e7476122a1c24e37b3b0de19d04ae900");paramters.Add("contentVar", new { others = "你好", code = code });string resJsonStr = baiduApiHelper.RequestData("POST", host, url, paramters);var resJson = JsonConvert.DeserializeObject<JObject>(resJsonStr);return resJson["code"]?.ToString() == "1000";}catch{return false;}}#endregion}
}

(精华)2020年6月26日 C#类库 百度api发送短信验证码帮助类相关推荐

  1. (精华)2020年7月26日 React ref的三种方式

    import React from 'react'export default class RefDemo extends React.Component {constructor() {super( ...

  2. .net mysql 类库_(精华)2020年6月27日 C#类库 MySqlHelper(Ado.net数据库封装)

    using EFCore.Sharding; using MySql.Data.MySqlClient; using System; using System.Collections.Generic; ...

  3. 2021考研时间公布 2020年12月26日至27日进行初试

    中新网客户端9月4日电 记者从教育部获悉,2021年全国硕士研究生招生考试初试时间,安排在2020年12月26日至27日(每天上午8:30-11:30,下午14:00-17:00),超过3小时或有使用 ...

  4. 2020年9月26日-02-软件工程-工程化思维+瀑布模型+敏捷开发

    此博客用于记录2020年9月26日每日分享, 软件工程中的集中常见模式,瀑布模型,敏捷开发等 日期:2020年9月26日 主题: 讨论讨论怎么使用软件工程的思想来解决问题 软件工程中的集中常见模式,瀑 ...

  5. 重装战姬服务器维护,重装战姬更新维护公告(2020年3月26日)

    重装战姬新一轮维护更新又要来喽,你准备好了吗?让我们来看看它的具体更新时间和内容吧! 亲爱的各位团长: 我们将于以下时间,对全平台服务器实施维护,并通过在线更新方式进行游戏更新. 在维护期间,您将暂时 ...

  6. 2020年11月26日JetbrainsAgent安装参数

    2020.12.26更新: 若以下参数失效,请考虑另外一个方案: https://blog.csdn.net/alan_alei/article/details/111738323 2020年11月2 ...

  7. 程序猿学习笔记~2020年10月26日(数据类型与条件语句)

    Java学习日记~2020年10月26日 基本数据类型 整数类型 整数类型有byte.short.int.long.在不同位数的操作系统占用不同的字节.在64位操作系统中,它们分别占1.2.4.8个字 ...

  8. 每天热点新闻早报十二条 365资讯简报 2020年11月26日 星期四

    365资讯简报,每天推送12条精选新闻和一条励志语录,一分钟看报,60s读懂世界! [365资讯简报]每天一分钟,知晓天下事!2020年11月26日 星期四 农历十月十二 感恩节 1.世卫:全球每3名 ...

  9. 【历史上的今天】12 月 3 日:世界上第一条短信;Fortran 语言之父诞生;百度贴吧上线

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2021 年 12 月 3 日,在 20 年前的今天,电动平衡车(Segway)问世:电动平衡车是一种电力驱动.具 ...

最新文章

  1. 【转载】使用Nexus搭建Maven服务器详细配置
  2. spark计算TF-IDF值(中文)
  3. 不同频率数据的处理方法
  4. VTK:可视化之Legend
  5. 如何得到当前application server的host name和port number
  6. 【活动(广州)】office365的开发者训练营
  7. 复盘二进制的习题(2)
  8. 人名和成绩一起排序_EXCEL基础知识——排序功能的使用
  9. oracle的备份与恢复
  10. Spark Group
  11. 充电速度公式_手机充电效率计算
  12. Unity.Interception(AOP)
  13. 【转载】教你使用 Reflexil 反编译.NET
  14. linux 防火墙安装在哪,Linux下Shorewall防火墙安装和配置
  15. Java 输入输出流实验
  16. 关于mac m1 安装安卓模拟器
  17. 一种让你无法拒绝的浏览设置,CSDN浏览器
  18. DOS 之for循环
  19. 鸿蒙系统跑分,麒麟9000+8GB内存 首发鸿蒙系统华为MatePad Pro2跑分首次曝光
  20. 极路由4增强版刷OpenWrt折腾系列

热门文章

  1. 安全性分析之“面向全场景的鸿蒙系统”
  2. java语言情话_用Java怎么编一段情话
  3. spdlog开源库使用
  4. 在北京买房究竟需要多少钱?
  5. 阿里云总裁胡晓明:未来和合作伙伴一起_服务1000万家企业
  6. 数字化能源管理系统为企业提供节能依据实现“双碳”目标——安科瑞 严新亚
  7. 蚂蜂窝上线酒店预订 商业化进展步骤之一
  8. Linux下MySQL主从架构版本升级(5.7.31->5.7.33)——冷升级
  9. Java找出数组中第K大的数
  10. 【C语言】实用调试技巧与const函数提升代码健壮性