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.
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值