delphi 调用 腾讯云短信  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 调用 腾讯云短信


{

腾讯云短信demo berlin _20190626_012152

作者:高文杰

QQ:46140262

Tel: 13165191728

公司:山东易桥智能科技有限公司


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


20190627120134764.png


}


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;


///

/// // Unicode转汉字 ,支持自动过滤非 unicode编码,即非 unicode编码不转换

///  只支持 标准的 类型 \u4e00  这种格式的 转换, 以\u 开头的

///  code by 猿哥哥 2015-2-11

///

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":""}


 

  //发送成功的示例

  //{"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.

————————————————


原文链接:https://blog.csdn.net/xunchima123/article/details/93863574



推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.045259952545166 seconds