精华内容
下载资源
问答
  • 腾讯·短信·TC3-HMAC-SHA256API3.0签名V3算法带发送例子
  • 腾讯TC3 v3鉴权比较复杂,当然这是相对于Delphi下而言,其实在Python下直接使用SDK要省事儿的多。本文的源代码就不贴了,需要的可以去原文下载。 一、TC3鉴权单元 为了方便复用,写了一个TC3鉴权单元文件:TC3...

    参考了高文杰先生的代码,结合自己的学习增添了最新TC3-HMAC-SHA256 v3版本的接口。

     腾讯云的TC3 v3鉴权比较复杂,当然这是相对于Delphi下而言,其实在Python下直接使用SDK要省事儿的多。本文的源代码就不贴了,需要的可以去原文下载。

    一、TC3鉴权单元

    为了方便复用,写了一个TC3鉴权单元文件:TC3_Authorization.pas

    {
    2021-02-15
    广西南宁
    张旭州
    腾讯云 TC3-HMAC-SHA256 生成鉴权数据
    }
    
    unit TC3_Authorization;
    
    interface
    
    uses
      System.SysUtils, System.hash, System.NetEncoding, System.DateUtils;
    
    { -------------------------------------------------------------------------------
      过程名:    genTC3Auth
      作者:      张旭州
      日期:      2021.02.15
      参数:      SecretKey, SecretId, sDomain, bodyJSON, Service: string
      参数说明: AccessKeyID,AccessKeySecret,域名, 待发送的数据主体JSON, 服务ocr, cvm
      返回值:    string
      
      参数参考如下:
        SecretKey := '您的腾讯云SecretKey';
        SecretId := '您的腾讯云SecretId';
        Service := 'sms'  //发送短信
        sDomain := 'sms.tencentcloudapi.com'   //短信发送的域名
    
      ------------------------------------------------------------------------------- }
    function genTC3Auth(SecretKey, SecretId, sDomain, bodyJSON, Service: string): string;
    
    implementation
    
    
    function DateTimeToUnix(const AValue: TDateTime): Int64;
    // 日期转Unix时间戳
    begin
      Result := System.DateUtils.DateTimeToUnix(AValue) - 8 * 60 * 60;
    end;
    
    //腾讯云TC3 V3签名鉴权
    function genTC3Auth(SecretKey, SecretId, sDomain, bodyJSON, Service: string): string;
    var
      httpRequestMethod: string; // = "POST";
      canonicalUri: string; //= "/";
      canonicalQueryString: string; //= "";
      canonicalHeaders: string; // = "content-type:application/json; charset=utf-8\n" + "host:" + host + "\n";
      signedHeaders: string; //= "content-type;host";
      SecretDate, SecretService, SecretSigning, Signature: TBytes;
      StringToSign, payload, CanonicalRequest, HashedRequestPayload, HashedCanonicalRequest: string;
      sDate,timestamp : string;
      Authorization, CredentialScope : string;
    begin
      sDate := FormatDateTime('YYYY-MM-DD', now());
      timestamp := DateTimeToUnix(now).ToString;
      httpRequestMethod := 'POST';
      canonicalUri := '/';
      canonicalQueryString := '';
      canonicalHeaders := 'content-type:application/json' + #10
          + 'host:' + sDomain + #10;
      signedHeaders := 'content-type;host';
    
      payload := bodyJSON;
      //待发送的数据的哈希值:
      HashedRequestPayload := THashSHA2.GetHashString(payload);
    
      //拼接规范请求串
      CanonicalRequest := httpRequestMethod + #10
          + canonicalUri + #10
          + canonicalQueryString + #10
          + canonicalHeaders + #10
          + signedHeaders + #10
          + HashedRequestPayload;
    
      //计算派生签名密钥
      SecretDate := THashSHA2.GetHMACAsBytes(sDate, TEncoding.utf8.GetBytes('TC3' + SecretKey));
      SecretService := THashSHA2.GetHMACAsBytes(Service, SecretDate);
      SecretSigning := THashSHA2.GetHMACAsBytes('tc3_request', SecretService);
    
      //规范请求串的哈希值
      HashedCanonicalRequest := THashSHA2.GetHashString(CanonicalRequest);
      //组装待签名字符串
      StringToSign := 'TC3-HMAC-SHA256' + #10
          + timestamp + #10
          + sDate + '/' + Service + '/tc3_request' + #10
          + HashedCanonicalRequest;
      //计算签名
      Signature := THashSHA2.GetHMACAsBytes(Bytesof(StringToSign), SecretSigning);
    //  Application.MessageBox(PChar(THash.DigestAsString(Signature)),
    //      '提示', MB_OK + MB_ICONINFORMATION + MB_TOPMOST);
    
      CredentialScope := sDate + '/' + Service + '/tc3_request';
      //拼接 Authorization
      Authorization :=
        'TC3-HMAC-SHA256' + ' ' +
        'Credential=' + SecretId + '/' + CredentialScope + ', ' +
        'SignedHeaders=' + SignedHeaders + ', ' +
        'Signature=' + StringReplace(PChar(THash.DigestAsString(Signature)), Chr(13) + Chr(10), '',
        [rfReplaceAll]);
    
      Result := Authorization;
    end;
    
    end.

    二、短信发送模块

    在implementation下 uses
     Unit2, TC3_Authorization;

    procedure TForm1.btn_tc3_sendClick(Sender: TObject);
    var
      strMobile, SecretKey, SecretId,sdkappid,sign, params, tpl_id, strjson:string;
      tc3 : string;
      url : string;
      http : TIdHTTP;
      jsonToSend : TStringStream;
      Aresult:string;
      //申明变量
      Root:TJSONObject;    //uses System.JSON;
      jsonArray: TJSONArray; // JSON数组变量
      list : TStringList;
      i : Integer;
      phoneSet : string;
    
    begin
      list := TStringList.Create;
      list.CommaText := edt_strMobile.Text;
      for i := 0 to list.Count -1  do
      begin
        phoneSet := phoneSet + '"86' + list[i] + '",'
      end;
    
      strMobile := phoneSet.Remove(Length(phoneSet)-1);
      list.Free;
    
      SecretKey := '您的Key';
      SecretId := '您的ID';
      sdkappid := edt_sdkappid.Text;
      sign := edt_sign.Text;
      params := edt_params.Text;
      tpl_id := edt_tpl_id.Text;
    
      strjson := '{'
      + '"PhoneNumberSet":['
      + strMobile
      + '],'
      + '"TemplateParamSet":' + params
      + ','
      + '"TemplateID":"'
      + tpl_id
      + '",'
      + '"SmsSdkAppid":"'
      + sdkappid
      + '",'
      + '"Sign":"'
      + sign
      +'"}';
    
      tc3 := TC3_Authorization.genTC3Auth(SecretKey, SecretId, 'sms.tencentcloudapi.com',
         strjson, 'sms');
      url := 'https://sms.tencentcloudapi.com/';
      http := TIdHttp.Create(nil);
      http.HandleRedirects := True;
      http.ReadTimeout := 3000;
      http.Request.ContentType := 'application/json';//设置内容类型为json
    
      jsonToSend := TStringStream.Create(strjson, TEncoding.UTF8);
      jsonToSend.Position := 0;//将流位置置为0
      http.Request.CustomHeaders.Clear;
      http.Request.CustomHeaders.AddValue('Authorization', ' ' + tc3);
      http.Request.CustomHeaders.AddValue('Content-Type', ' application/json');
      http.Request.CustomHeaders.AddValue('Host', ' sms.tencentcloudapi.com');
      http.Request.CustomHeaders.AddValue('X-TC-Action', ' SendSms');
      http.Request.CustomHeaders.AddValue('X-TC-Timestamp', ' ' + gwj_DateTimeToUnix(now).ToString);
      http.Request.CustomHeaders.AddValue('X-TC-Version', ' 2019-07-11');
    
      http.Request.AcceptCharSet := 'UTF-8';
      http.Request.AcceptEncoding := 'UTF-8';
      http.Request.AcceptLanguage := 'UTF-8';
      http.Request.CharSet := 'UTF-8';
    //  http.HTTPOptions := IdHTTP.HTTPOptions + [hoKeepOrigProtocol];
    
      Aresult := http.Post(url, jsonToSend);//用MEMO控件接收POST后的数据返回
      Aresult := UnicodeToChinese(Aresult);
      Memo1.Text := Aresult;
      jsonToSend.free;
      http.free;
    
      //发送成功的示例
      //{"Response":{"SendStatusSet":[{"SerialNo":"2019:2892974270720676287","PhoneNumber":"+8613377131696","Fee":1,"SessionContext":"","Code":"Ok","Message":"send success","IsoCode":"CN"}],"RequestId":"b2e1fdcb-e877-4bbe-89cc-e7cae7cb567d"}}
    
      Root:= TJSONObject.ParseJSONValue(Trim(Aresult)) as TJSONObject;   //uses System.JSON;
      Root := Root.GetValue('Response') as TJSONObject;
      jsonArray := Root.GetValue('SendStatusSet') as TJSONArray ;
    
      Root := jsonArray.Get(0) as TJSONObject; //第一个号码结果
    
      edt_result.Text := Root.GetValue('Code').Value;
      edt_errmsg.Text := Root.GetValue('Message').Value;
      edt_ext.Text := Root.GetValue('SessionContext').Value;
    end;

     

    展开全文
  • // 设置验证码长度、范围 $vCode = strval(rand(100000,999999)); //*********************************************************... 相关附件源码:腾讯·短信·TC3-HMAC-SHA256·API3.0签名V3.rar 五积分下载
            // 设置验证码长度、范围
    	    $vCode = strval(rand(100000,999999));
    	    //**************************************************************
    	    // 密钥对_$secretId(注意保密·请勿泄露)
    		$secretId = "AKIDB****J1nxwa5MRMvoWy936NPBl6n***";
    		// 密钥对_$secretKey(注意保密·请勿泄露)
    		$secretKey = "qZ6WhctvqbBK***JeleQUL0mTmriL***";
    		// 应用Id(注意保密·请勿泄露)
    		$smsSdkAppid = "1400433240";
    		// 模板Id
    		$templateID = "739127";	
    		// 短信签名
    		$sign = "饕餮网络";
    		//**************************************************************
    		// 接收消息手机号(eg:群发 $p0 = ["PhoneNumberSet" => ["+8618888888888", "+8618888888889"], ...)
    		$phoneNumber = $phone;
    		// API请求域名
    		$host = "sms.tencentcloudapi.com";
    		// API服务
    		$service = "sms";
    		// API动作
    		$action = "SendSms";
    		// API版本
    		$version = "2019-07-11";
    		// 时间戳
    		$timestamp = time();
    		// 年月日(时间戳为基准)
    		$date = gmdate("Y-m-d", $timestamp);
    		// 签名算法
    		$algorithm = "TC3-HMAC-SHA256";
    		// 凭证作用域
    		$credentialScope = $date . "/" . $service . "/tc3_request";

    腾讯云短信验证码发送API写的够烂啊·踩坑了3天·可算是发送成功了·最新`TC3-HMAC-SHA256`签名算法`API3.0签名V3版本搞定!

    相关附件源码:腾讯云·短信·TC3-HMAC-SHA256·API3.0签名V3.rar  五积分下载

    发送例子: $this->apiRequestTx(手机号码); // 腾讯云短信API

                       成功返回:return ['code' => true, 'useTime' => '0', 'data' => $vCode];

                       $tel = $ret['Response']['SendStatusSet'][0]['PhoneNumber'];
                       $msg = $ret['Response']['SendStatusSet'][0]['Message'];

                       失败返回:return ['code' => false, 'useTime' => '0', 'data' => "$tel->$msg"];

     

     

    展开全文
  • TC接入百宝注册码系统V2示例教程  注册码PC版的接入提供了2种方式:DLL版与COM版。在这个教程里,我将以COM版来介绍接入的方法,毕竟COM组件在其他的语言里,也能得到很好支持。接口的详细说明,可以下载相应的...

     TC接入百宝云注册码系统V2示例教程


           注册码PC版的接入提供了2种方式:DLL版与COM版。在这个教程里,我将以COM版来介绍接入的方法,毕竟COM组件在其他的语言里,也能得到很好支持。接口的详细说明,可以下载相应的文档进行查看,这里就不再一一描述了。本套免费的系统亲测能跑80个左右的用户。用户在80~2000之间自己升级配置,安装高级版,高级版是直接开源管理端:

    步骤1:管理端接入步骤

    一、进入应用中心安装注册码系统v2


    二、安装完之后打开云应用,在云应用管理里面下载客户端示例



    三、打开注册码管理端软件,之后在项目名称管理里创建一个新项目。

     


    四、创建项目完成之后,在注册码管理界面,为新创建的项目创建注册码,以便后面的代码里使用。

    步骤2:TC代码接入步骤

    第一步 插件的注册与对象创建

    COM插件在调用的时候,一定要先注册COM插件到系统,之后在创建操作COM组件接口的对象。

     

    第二步 初始化数据

    调用COM插件里的全局初始化 InitDll 函数,来初始化插件,此接口有2个参数,第一个是云应用的token,第二个为项目名称。


    项目名称与管理端的项目名称管理里面内容对应即可,如下图:


    因为注册码的生成是根据项目名称来创建的,所以InitDll的项目名称必须与上图的项目名称一致。

     

    第三步 注册码登录验证

    1、推荐大家使用:注册码登陆自动验证 LoginRegCodeAuto 接口,此接口在登录验证成功之后,内部会自动开启心跳线程,处理注册码到期、冻结等问题。这样使用者就不需要去关心心跳验证的问题了。


    2、如果大家调用的是:注册码登陆 LoginRegCode 函数,那么心跳就需要自己去完成了。这个心跳,其实就是自己开一个线程,每隔一段时间调用一次:获取注册码剩余时间 GetRegCodeTime 函数,来验证软件的使用权限。


    以上三步,即可实现软件的注册码登录与验证操作了。


    步骤3:系统防攻击放破解设置

    第一:系统自带防攻击,有需要自己可设置

     


    第二:系统自带防破解,有需要自己可设置

    因为版本在不断更新,所以建议大家在接入前先去百宝云官方看下,有没有最新版本和最新说明!

    注册码系统V2下载:http://www.baibaoyun.com/index.php?index/info&id=19

    展开全文
  • 【delphi腾讯短信】使用腾讯最新的签名方法 v3 (TC3-HMAC-SHA256)

    作者QQ:(648437169)

    下载链接:https://download.csdn.net/download/liushenglin123/15482757

    【delphi腾讯云短信】使用腾讯云最新的签名方法 v3 (TC3-HMAC-SHA256)

     

    展开全文
  • 开宗明义,米扑科技在使用腾讯的API接口签名中,按照官方示例开发PHP、Python的接口,经常会提示签名错误123456789{ "Response": { "Error": { "Code": "InvalidParameter....
  • 运用了百宝组件中login函数,以及TC中的回调函数,来实现了多个客户端在不同的地区做到实时的网络响应,类似QQ群,以及聊天室的功能 下面我们看下效果  1、发送公共消息 简单模块了右侧QQ群的在线列表的功能   ...
  • 【Delphi 腾讯短信】使用腾讯最新的签名方法v3(TC3-HMAC-SHA256)。api接口文档https://cloud.tencent.com/document/product/382/38778
  • 百宝可以做什么?  有网络服务需求的用户,可以利用百宝快速制作自己的网络服务,极大降低自己的成本,只需要懂百宝脚本。服务器部署、维护、防攻击、用户人数扩增等各种业务,都交给百宝处理;  比如:  用...
  • JS调用腾讯 OCR 分享一下,之前在项目里调用ocr的经验, 第一步 npm install sha256 npm install crypto-js 第二步 import HmacSHA256 from ‘crypto-js/hmac-sha256’; import Hex from ‘crypto-js/enc-hex’; ...
  • WIN-TC是一个TC2 WINDOWS平台开发工具。由 "TC256专题站"(http://tc256.cn.st) 与 "唯C世界"(http://www.vcok.com) 联合发布。该软件使用TC2为内核,提供WINDOWS平台的开发界面,因此也就支持WINDOWS平台下的功能,...
  • 倍福编程原版软件TC31-Full-Setup.3.1.4024.12百度地址.txt
  • 为什么选择百宝搭建网络验证系统,而不是用其他产品就不说了,速度快,难度低,成本低,优势很多,这里我描述一下百宝搭建一个网络验证系统的过程.  指明一下 百宝 可以做很多网络系统,这里网络验证系统只是一个...
  •  本源码中分为百宝服务器端代码、TC客户端代码、TC注册码管理端代码。  百宝服务器端主要是负责注册码登陆验证、试用验证、注册码管理等等操作。  TC客户端是试用登陆或者注册码登陆。  TC注册码管理端是对...
  • 1、OTB2013和OTB2015数据集百度下载 链接:https://pan.baidu.com/s/1fWdXXsWYfHw44SqPEO3cng 提取码:1cw9 2、VOT2013-VOT2020数据集百度下载 链接:https://pan.baidu.com/s/1oJdgY5PpfN8Ep85i8nVmdQ ...
  • Linux TC上安装华为客户端,运行AccessClient_x64lnx.run安装脚本,报错“ The tc does not have the basic ability。 解决方法 这个问题实际上是校验tc出错了,但实际上,我们不需要校验tc,所以解决方法就是跳过...
  • 华为云FusionAccess 8.0.1 桌面技术白皮书,华为云FusionAccess桌面是基于华为平台的一种虚拟桌面应用,通过在平台上部署FusionAccess桌面软件,使终端用户通过瘦客户端TC来访问跨平台的整个客户桌面。
  • 安全趋势和问题 最安全处理的基础 应对挑战 解决难题所采用的技术和使用模型 虚拟化技术加强工作负载隔离 可信执行技术提供可见性和执行点 中国新一代TPM标准 中国生态系统实现可信 总结
  • win10安装twincat3文件下载,亲测不死机TC31-Full-Setup.3.1.4022.30
  • 华为桌面云云终端(TC)产品手册
  • 使用Postman玩转腾讯

    千次阅读 2019-12-10 16:58:05
    产品上云,那么作为产品的开发人员,其中一项重要的工作就是调用厂商提供的API接口,来使用产品。俗话说,工欲善其事,必先利其器。为了上云更轻松,我们需要一把利器来调用厂商的API接口。接下来本文就向你...
  • TC3.0

    2008-04-07 21:58:05
    TC3.0-便捷的C语言编译器
  • 系统拓扑:如图所示,公有平台分作管理网络和用户网络:管理网络用于管理者对整个平台的运维管理。用户网络为终端用户提供虚拟机访问入口和可用的带宽保证。根据上图结构和大家分享一下使用Iptables和TC实现...
  • Nextcloud是一款开源免费的私有存储网盘项目,可以让你快速便捷地搭建一套属于自己或团队的同步网盘,从而实现跨平台跨设备文件同步、共享、版本控制、团队协作等功能。它的客户端覆盖了Windows、Mac、Android、...
  • 一台主机带多台显示器终端电脑TC-T1000虚拟桌面省电终端电脑TC-T1000功能特点:依赖于共享的主机使用,从而达到其他的用户不再需要主机,取而代之的是它,再配上显示器一台以及键盘鼠标一套即可运行跟传统PC电脑...
  • 百宝网络验证系统是一款集合验证,防破解,自动售卡,代理功能等等等等众多优点于一身的一款网络验证系统,自其发布之日起就受到了大家广泛的喜爱。  但是对于一些软件或者脚本作者来说,接入使用这一块,遇到了...
  • ◆ 利用TC35678透过BLE传递要改变的标签数据并显示在电子纸 方案规格◆本方案使用了东芝自行开发之Scatternet service软件。当每台Price Tag一开机,会被事先指定成根节点(Root node)的Price Tag做为起点,接着陆续...
  • 基于TC和netem实现网络异常情况的模拟 背景 笔者最近在对一个公网传输方案做测试时,需要模拟一些公网中遇到的极端情况(延迟、丢包、重复、损坏和乱序等)。惊喜地发现,Linux原生已经集成了TC和netem这对组合,只...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,119
精华内容 2,447
关键字:

云tc