{

腾讯云短信demo berlin _20190626_012152
作者:高文杰
QQ:46140262
Tel: 13165191728
公司:山东易桥智能科技有限公司

完整源码下载地址  http://www.yiqiao.net.cn/dl/TencentSMS.rar

}

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, System.Net.URLClient, System.Net.HttpClient,
  System.StrUtils, System.Net.HttpClientComponent, System.Hash, System.Json,
  System.DateUtils,

Web.HTTPApp, Soap.EncdDecd, IdCoderMIME, IdGlobal,

Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    btnSend: TButton;
    btnSignTest: TButton;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    edt_strMobile: TEdit;
    edt_strAppKey: TEdit;
    Label2: TLabel;
    edt_sdkappid: TEdit;
    Label4: TLabel;
    edt_params: TEdit;
    Label5: TLabel;
    Label3: TLabel;
    edt_sign: TEdit;
    Label6: TLabel;
    edt_tpl_id: TEdit;
    Memo1: TMemo;
    GroupBox2: TGroupBox;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    edt_result: TEdit;
    edt_errmsg: TEdit;
    edt_ext: TEdit;
    procedure btnSendClick(Sender: TObject);
    procedure btnSignTestClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);

private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses

Unit2;

{$R *.dfm}

function gwj_DateTimeToUnix(const AValue: TDateTime): Int64;
//日期转Unix时间戳
begin
  Result := System.DateUtils.DateTimeToUnix( AValue )- 8*60*60;
end;

function gwj_UnixToDateTime(const AValue: Int64): TDateTime;
//Unix时间戳转日期
begin
  Result :=  System.DateUtils.UnixToDateTime( AValue + 8*60*60) ;
end;

function URLEncode(const msg: String): String;     //xe UrlEncode编码  _20190514_023451
var
   I : Integer;
   aStr:string;
begin
  aStr := Web.HttpApp.HTTPEncode(UTF8Encode(msg));  //use  Web.HttpApp;
  //转换后 空格 汇报 转换为 + 号 不能正常转换为%20  需要 手工处理一下
  aStr := StringReplace (aStr, '+', '%20', [rfReplaceAll, rfIgnoreCase]);
  Result := aStr ;
end;

function urlDecode(url: string): string;    //xe  UrlDecode解码   _20190514_023451
begin
  Result := Web.HttpApp.HTTPDecode(url);  //use  Web.HttpApp;
 // Result := UTF8Decode(Web.HttpApp.HTTPDecode(url));;  //use  Web.HttpApp;
end;

/// <summary>
/// // Unicode转汉字 ,支持自动过滤非 unicode编码,即非 unicode编码不转换
///  只支持 标准的 类型 \u4e00  这种格式的 转换, 以\u 开头的
///  code by 猿哥哥 2015-2-11
/// </summary>
function UnicodeToChinese(inputstr:string):string;
var
  i:Integer;
  index:Integer;
  temp,top,last:string;
begin
   index:=1;
   while index>=0 do
   begin
    index:= inputstr.IndexOf('\u');
    if index<0 then
    begin
      last:= inputstr;
      Result:= Result+ last;
      Exit;
    end;
    top:= Copy(inputstr,1,index); //取出 编码字符前的 非 unic 编码的字符,如数字
    temp:= Copy(inputstr,index+1,6);//取出编码,包括 \u    ,如\u4e3f
    Delete(temp,1,2);
    Delete(inputstr,1,index+6);
    result:= Result+ top+ WideChar( StrToInt('$'+ temp)) ;
  end;
end;

procedure TForm1.btnSendClick(Sender: TObject);
var
  strMobile, strAppKey, strRand, strTime ,sig:string;
  sdkappid:string;
  sign,params,tpl_id:string;
  url:string;
  strjson:string;
  http : TIdHttp;
  jsonToSend : TStringStream;
  Aresult:string;
  //申明变量
  Root:TJSONObject;    //uses System.JSON;
begin
  //短信api地址
  //https://cloud.tencent.com/document/product/382/5976

//生成App 凭证  begin
  //string strMobile = "13788888888"; //tel 的 mobile 字段的内容
  //string strAppKey = "5f03a35d00ee52a21327ab048186a2c4"; //sdkappid 对应的 appkey,需要业务方高度保密
  //string strRand = "7226249334"; //URL 中的 random 字段的值
  //string strTime = "1457336869"; //UNIX 时间戳
  //string sig = sha256(appkey=5f03a35d00ee52a21327ab048186a2c4&random=7226249334&time=1457336869&mobile=13788888888)
  //        = ecab4881ee80ad3d76bb1da68387428ca752eb885e52621a3129dcf4d9bc4fd4;

strMobile := edt_strMobile.Text;
  strAppKey := edt_strAppKey.Text;

Randomize;
  strRand := inttostr(Random(7226249334)); //URL 中的 random 字段的值
  strTime :=  gwj_DateTimeToUnix(now).ToString;  //日期转Unix时间戳

// sig := sha256(appkey=5f03a35d00ee52a21327ab048186a2c4&random=7226249334&time=1457336869&mobile=13788888888)
  //        = ecab4881ee80ad3d76bb1da68387428ca752eb885e52621a3129dcf4d9bc4fd4;

sig := THashSHA2.GetHashString('appkey='+strAppKey+'&random='+strRand+'&time='+strTime+'&mobile='+strMobile,THashSHA2.TSHA2Version.SHA256);

//生成App 凭证  end

sdkappid := edt_sdkappid.Text; //sdkappid 请填写您在腾讯云上申请到的,random 请填成随机数。

//POST https://yun.tim.qq.com/v5/tlssmssvr/sendsms?sdkappid=xxxxx&random=xxxx

url := 'https://yun.tim.qq.com/v5/tlssmssvr/sendsms?sdkappid='+sdkappid+'&random='+strRand;

//请求参数
  // {
  //    "ext": "",
  //    "extend": "",
  //    "params": [
  //        "验证码",
  //        "1234",
  //        "4"
  //    ],
  //    "sig": "ecab4881ee80ad3d76bb1da68387428ca752eb885e52621a3129dcf4d9bc4fd4",
  //    "sign": "腾讯云",
  //    "tel": {
  //        "mobile": "13788888888",
  //        "nationcode": "86"
  //    },
  //    "time": 1457336869,
  //    "tpl_id": 19
  //}
  //参数    必选    类型    描述
  //ext    否    string    用户的 session 内容,腾讯 server 回包中会原样返回,可选字段,不需要就是设置为空
  //extend    否    string    短信码号扩展号,格式为纯数字串,其他格式无效。默认没有开通,开通请联系 腾讯云短信技术支持
  //params    是    array    模板参数,具体使用方法可参考注【1】。若模板没有参数,请设置为空数组
  //sig    是    string    App 凭证,具体计算方式见下注
  //sign    否    string    短信签名,此处应填写审核通过的签名内容,非签名 ID,如果使用默认签名,该字段可缺省
  //签名信息查看方法:登录 短信控制台 ,进入目标应用的配置页,选择【国内短信】(或【国际短信】)>【短信内容配置】> 【短信签名】即可查看对应的签名
  //tel    是    object    国际电话号码,格式依据 e.164 标准为: +[国家码][手机号] ,示例如:+8613711112222, 其中前面有一个 + 符号 ,86 为国家码,13711112222 为手机号
  //time    是    number    请求发起时间,UNIX 时间戳(单位:秒),如果和系统时间相差超过 10 分钟则会返回失败
  //tpl_id    是    number    模板 ID,在 控制台 审核通过的模板 ID
  //参数tel:
  //参数    必选    类型    描述
  //mobile    是    string    手机号码
  //nationcode    是    string    国家码

sign := edt_sign.Text;
  params := edt_params.Text;
  tpl_id := edt_tpl_id.Text;

strjson := ''
   +'{                           '
   +'   "ext": "",               '
   +'   "extend": "",            '
   //+'   "params": '+params+','
   +'   "params": '+params+','
   +'   "sig": "'+sig+'",'
   +'   "sign": "'+sign+'",'
   +'   "tel": {'
   +'       "mobile": "'+strMobile+'",'
   +'       "nationcode": "86"'
   +'   },'
   +'   "time": '+strTime+','
   +'   "tpl_id": '+tpl_id+''
   +'}';

http := TIdHttp.Create(nil);
  http.HandleRedirects := True;//允许头转向
  http.ReadTimeout := 5000;//请求超时设置
  http.Request.ContentType := 'application/json';//设置内容类型为json
  //jsonToSend := TStringStream.Create('{"name":"Peter Pan"}');//创建一个包含JSON数据的变量

//jsonToSend := TStringStream.Create(strjson);//创建一个包含JSON数据的变量
   jsonToSend := TStringStream.Create(strjson, TEncoding.UTF8);

jsonToSend.Position := 0;//将流位置置为0
  //Memo1.Lines.Text := http.Post('http://www.website.com/test.php', jsonToSend);//用MEMO控件接收POST后的数据返回
  Aresult := http.Post(url, jsonToSend);//用MEMO控件接收POST后的数据返回
  Aresult := UnicodeToChinese(Aresult);

Memo1.Lines.Text :=  Aresult;

jsonToSend.free; http.free;//用完记得释放

//单个模板变量字符数超过12个 如需调整限制,可联系 sms helper 解决
  //https://cloud.tencent.com/document/product/382/3773#.E6.8A.80.E6.9C.AF.E4.BA.A4.E6.B5.81
  //技术交流
  //如果您希望与工程师即时沟通交流,欢迎通过如下方式进行联系:
  //腾讯云短信技术交流 QQ:3012203387

//模板参数长度限制  请把 个人账户 升级为 公司账户 进行 企业认证
  //
  //{"result":1036,"errmsg":"\u6A21\u677F\u53C2\u6570\u957F\u5EA6\u9650\u5236","ext":""}
  //{"result":1036,"errmsg":"模板参数长度限制","ext":""}

{

如果升级企业认证后,还是提示 长度不够,请联系客服 QQ:3012203387

聊天记录

易桥科技高文杰  11:36:46
  单个模板变量字符数超过12个 如需调整限制,可联系 sms helper 解决
  长度不够 怎么办
  腾讯云短信小助手  11:37:36
  转企业认证
  易桥科技高文杰  11:37:43
  转完了
  腾讯云短信小助手  11:38:15
  sdkappid发我看下
  易桥科技高文杰  11:38:25
  1400182757
  腾讯云短信小助手  11:39:11
  5分钟后试下
  易桥科技高文杰  11:39:17
  好的

}

//发送成功的示例
  //{"result":0,"errmsg":"OK","ext":"","sid":"8:Xs6hJNbWKFwLz1A9EED20190626","fee":3}

//赋值
  Root:= TJSONObject.ParseJSONValue(Trim(Aresult)) as TJSONObject;   //uses System.JSON;

//用toString得到值在界面显示会有双引号
  //edt_expr.Text :=Svdevobj.GetValue('expr').Value;//得到不带双引号的值
  //edt_expr.Text :=Svdevobj.GetValue('expr').toString;//得到带引号的值

//  edt_result.Text := Root.GetValue('result').ToString;
//  edt_errmsg.Text := Root.GetValue('errmsg').ToString;
//  edt_ext.Text := Root.GetValue('ext').ToString;
  edt_result.Text := Root.GetValue('result').Value;
  edt_errmsg.Text := Root.GetValue('errmsg').Value;
  edt_ext.Text := Root.GetValue('ext').Value;

end;

procedure TForm1.btnSignTestClick(Sender: TObject);
begin
  Form2 := TForm2.Create(Self);
  Form2.ShowModal;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

edt_strMobile.Text := '13165191728';
  edt_strAppKey.Text := 'abcd1234';

edt_sdkappid.Text := '1400182757'; //sdkappid 请填写您在腾讯云上申请到的,random 请填成随机数。

//edt_params.Text := '["参数1","参数2","参数3"]';
  edt_params.Text := '["1233"]';
  edt_sign.text := '易桥科技';
  edt_tpl_id.Text := '271462';

end;

end.

delphi 调用 腾讯云短信相关推荐

  1. Java调用腾讯云短信API实现发送短信验证码完整。(详细,内附工具类)

    此先声明,本博文并不是为了推销腾讯云短信产品. 只是因为腾讯云短信SDK的使用指南讲的不是很详细,觉得肯定有很多人像我一样被搞的一头雾水.所以专门发一篇关于使用短信接口的博文,为了记录,也为了帮助和我 ...

  2. 【delphi】腾讯云短信发送控件(源代码、帮助文档、演示程序)

    1. 腾讯云短信控件 在开发小程序注册的时候,需要发送短信,所以就专门开发了腾讯云的短信发送控件,这样发送短信就可以直接使用,不需要再进行签名等麻烦的开发了,只需要设置几个简单参数即可. 1.1 控件 ...

  3. 大聪明教你学Java | 调用腾讯云短信接口,实现短信通知

    前言 提到短信接口,相信每一位程序猿都不会陌生,它可以来帮助我们实现短信验证码.短信通知等等功能,刚好最近在帮朋友开发一套会员管理系统,里面也集成了短信功能(短信接口平台选择的是腾讯云平台),借此机会 ...

  4. 【SpringBoot深入浅出系列】SpringBoot之调用腾讯云短信接口发送短信

    目录 一.开发前准备 1.创建签名 2.创建正文模板管理 3.创建应用 4.创建secretId和secretKey 二.开发 1.创建 Spring Initializr 项目 tengxunsms ...

  5. 2021最新 Python调用腾讯云短信接口

    端口相关 登录实例前,需要放通什么端口? 您需要对实例绑定安全组开放相应端口,具体操作步骤请参考 典型场景配置. 云服务器常用端口有哪些? 请参考 服务器常用端口. 为何要开启端口?如何开启某个端口? ...

  6. 短信接口在本地调试正常_Pivotal实践:腾讯云短信小应用

    最近登录了一下腾讯云控制台,发现账户下居然每月有100条免费短信可以使用.结合一下最近成都阴晴不定的天气,女友上班老是忘记带伞的现状,于是决定开发一款天气短信提醒小应用,每天早上定时给女友发送天气状况 ...

  7. Prometheus和Grafana告警服务创建与对接腾讯云短信告警平台(prometheus_alert)

    前言 在一个监控系统中,如果说数据链路是她的骨架,那么告警通知服务就是他的灵魂!所有的监控服务都是为了能够及时通知出来,减少人工查询状态,及时发现问题,避免不必要的大规模故障,为企业政府省钱,和保证安 ...

  8. SpringBoot腾讯云短信实现验证码

    SpringBoot腾讯云短信实现验证码 在学习过程中偶然遇见需要实现验证码功能的需求,于是寻思着将功能抽取出来用于分享学习 业务功能:实现验证码60s,且要求防止用户高频刷验证码(即1min一次不多 ...

  9. php 腾讯短信接口api,关于腾讯云短信 API 成功调用的分享

    腾讯云短信签名申请我用的个人公众号,很快就过审了,在这把需要注意的跟大家说一下.我发现很多人都没提到重点,复制粘贴党容易踩坑. 签名审核通过后,创建正文模板,如下图: 然后按照书本教程基本操作完成后, ...

最新文章

  1. “数学不行,干啥也不行!”骨灰级程序员:其实你们都是瞎努力
  2. 我的技术家园,吸取精神食粮的天堂
  3. python3.7怎么使用arcpy_从Python到空间分析Arcpy|1.3.7 神啊!救救我之如何处理报错...
  4. PWN-PRACTICE-BUUCTF-11
  5. 折线图 java_java报表折线图
  6. VS2008中C++打开Excel(MFC)
  7. 2015 Objective-C 新特性
  8. gd库多点画图 php_用 PHP 实现身份证号码识别
  9. 珍大户《认知世界的经济学》学习笔记 -- 第17课 影响消费者的因素 -- 色彩、冷暖、秩序
  10. 基础平面设计(文字排版篇)
  11. 读万卷书,行万里路,写万行Code
  12. 蓝牙键盘常用快捷键记录
  13. STC12LE5612AD芯片使用心得(五)定时器
  14. 束缚游戏 html,束缚游戏
  15. Linux--问题1--从用户态进入内核态
  16. 0415学习笔记:3决策树
  17. 【图像分类】 一文读懂AlexNet
  18. HTTP 协议中 Vary
  19. 深入理解Java之线程池
  20. 牛客刷题笔记-数据库选择题(201-300)

热门文章

  1. Oracle高级数据库复习
  2. 安卓libc setenv函数内存泄漏
  3. WinDBG 技巧:列出模块(DLL/EXE)里面所有的符号(symbol)
  4. Dell台式机安装ubuntu系统
  5. 【KNIME案例】参数化驱动工作流调用业务人员建立的脚本
  6. 编译make px4_fmu-v2_default upload时,报错ERROR Board can accept larger flash images (2080768 bytes)
  7. qq互联登录授权php配置,php如何整合qq互联登录
  8. Java 日期的各种操作
  9. 世界环境日 | 始祖数字化可持续发展峰会就在6.5!
  10. java毕业设计诚越园区垃圾分类信息科普系统Mybatis+系统+数据库+调试部署