delphi 调用 腾讯云短信
{
腾讯云短信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 调用 腾讯云短信相关推荐
- Java调用腾讯云短信API实现发送短信验证码完整。(详细,内附工具类)
此先声明,本博文并不是为了推销腾讯云短信产品. 只是因为腾讯云短信SDK的使用指南讲的不是很详细,觉得肯定有很多人像我一样被搞的一头雾水.所以专门发一篇关于使用短信接口的博文,为了记录,也为了帮助和我 ...
- 【delphi】腾讯云短信发送控件(源代码、帮助文档、演示程序)
1. 腾讯云短信控件 在开发小程序注册的时候,需要发送短信,所以就专门开发了腾讯云的短信发送控件,这样发送短信就可以直接使用,不需要再进行签名等麻烦的开发了,只需要设置几个简单参数即可. 1.1 控件 ...
- 大聪明教你学Java | 调用腾讯云短信接口,实现短信通知
前言 提到短信接口,相信每一位程序猿都不会陌生,它可以来帮助我们实现短信验证码.短信通知等等功能,刚好最近在帮朋友开发一套会员管理系统,里面也集成了短信功能(短信接口平台选择的是腾讯云平台),借此机会 ...
- 【SpringBoot深入浅出系列】SpringBoot之调用腾讯云短信接口发送短信
目录 一.开发前准备 1.创建签名 2.创建正文模板管理 3.创建应用 4.创建secretId和secretKey 二.开发 1.创建 Spring Initializr 项目 tengxunsms ...
- 2021最新 Python调用腾讯云短信接口
端口相关 登录实例前,需要放通什么端口? 您需要对实例绑定安全组开放相应端口,具体操作步骤请参考 典型场景配置. 云服务器常用端口有哪些? 请参考 服务器常用端口. 为何要开启端口?如何开启某个端口? ...
- 短信接口在本地调试正常_Pivotal实践:腾讯云短信小应用
最近登录了一下腾讯云控制台,发现账户下居然每月有100条免费短信可以使用.结合一下最近成都阴晴不定的天气,女友上班老是忘记带伞的现状,于是决定开发一款天气短信提醒小应用,每天早上定时给女友发送天气状况 ...
- Prometheus和Grafana告警服务创建与对接腾讯云短信告警平台(prometheus_alert)
前言 在一个监控系统中,如果说数据链路是她的骨架,那么告警通知服务就是他的灵魂!所有的监控服务都是为了能够及时通知出来,减少人工查询状态,及时发现问题,避免不必要的大规模故障,为企业政府省钱,和保证安 ...
- SpringBoot腾讯云短信实现验证码
SpringBoot腾讯云短信实现验证码 在学习过程中偶然遇见需要实现验证码功能的需求,于是寻思着将功能抽取出来用于分享学习 业务功能:实现验证码60s,且要求防止用户高频刷验证码(即1min一次不多 ...
- php 腾讯短信接口api,关于腾讯云短信 API 成功调用的分享
腾讯云短信签名申请我用的个人公众号,很快就过审了,在这把需要注意的跟大家说一下.我发现很多人都没提到重点,复制粘贴党容易踩坑. 签名审核通过后,创建正文模板,如下图: 然后按照书本教程基本操作完成后, ...
最新文章
- “数学不行,干啥也不行!”骨灰级程序员:其实你们都是瞎努力
- 我的技术家园,吸取精神食粮的天堂
- python3.7怎么使用arcpy_从Python到空间分析Arcpy|1.3.7 神啊!救救我之如何处理报错...
- PWN-PRACTICE-BUUCTF-11
- 折线图 java_java报表折线图
- VS2008中C++打开Excel(MFC)
- 2015 Objective-C 新特性
- gd库多点画图 php_用 PHP 实现身份证号码识别
- 珍大户《认知世界的经济学》学习笔记 -- 第17课 影响消费者的因素 -- 色彩、冷暖、秩序
- 基础平面设计(文字排版篇)
- 读万卷书,行万里路,写万行Code
- 蓝牙键盘常用快捷键记录
- STC12LE5612AD芯片使用心得(五)定时器
- 束缚游戏 html,束缚游戏
- Linux--问题1--从用户态进入内核态
- 0415学习笔记:3决策树
- 【图像分类】 一文读懂AlexNet
- HTTP 协议中 Vary
- 深入理解Java之线程池
- 牛客刷题笔记-数据库选择题(201-300)
热门文章
- Oracle高级数据库复习
- 安卓libc setenv函数内存泄漏
- WinDBG 技巧:列出模块(DLL/EXE)里面所有的符号(symbol)
- Dell台式机安装ubuntu系统
- 【KNIME案例】参数化驱动工作流调用业务人员建立的脚本
- 编译make px4_fmu-v2_default upload时,报错ERROR Board can accept larger flash images (2080768 bytes)
- qq互联登录授权php配置,php如何整合qq互联登录
- Java 日期的各种操作
- 世界环境日 | 始祖数字化可持续发展峰会就在6.5!
- java毕业设计诚越园区垃圾分类信息科普系统Mybatis+系统+数据库+调试部署