Delphi 阿里短信发送

function TForm1.send_sms(Atel_no:string;Acode:string): boolean;
var
  Params: TDictionary<string, string>;
  SortedParams: TArray<string>;
  sortQueryString,key:string;
  LParamIndex :Integer;
  LSignatureNonce:string;
  Ltimestamp:string;
  LAccessKeyId, LAccessKeySecret:string;
  LSignature:string;
  Ldatetime:Tdatetime;
  Lversion:string;
  LSignName:Ansistring;
  LTemplateParam:string;
  LPathValue:Tjsonvalue;
begin
  result:=false;
  Params:=TDictionary<string, string>.create;
  try

    self.RESTClient.BaseURL:='https://dysmsapi.aliyuncs.com/';

    LAccessKeyId:='你的AccessKeyId';
    LAccessKeySecret:='你的AccessKeySecret';
    LSignatureNonce:=THashMD5.GetHashString(TGUID.NewGuid.ToString);

    Ldatetime:=UnixToDateTime(DateTimeToUnix(now,false),true);
    Ltimestamp:=formatdatetime('yyyy-MM-dd',Ldatetime)+'T'+ formatdatetime('HH:mm:ss',Ldatetime)+'Z';
    Lversion:='2017-05-25';
    LSignName:='你的SignName';
    LTemplateParam:='{"code":"'+Acode+'"}';

    //①.系统参数:
    Params.Add('AccessKeyId',LAccessKeyId);
    RESTRequest.Params.AddItem('AccessKeyId',LAccessKeyId, TRESTRequestParameterKind.pkGETorPOST);


    Params.Add('Timestamp', TNetEncoding.URL.EncodeForm(Ltimestamp));
    RESTRequest.Params.AddItem('Timestamp', Ltimestamp, TRESTRequestParameterKind.pkGETorPOST);
    Params.Add('Format', 'JSON');
    RESTRequest.Params.AddItem('Format', 'JSON', TRESTRequestParameterKind.pkGETorPOST);
    Params.Add('SignatureMethod', 'HMAC-SHA1');
    RESTRequest.Params.AddItem('SignatureMethod', 'HMAC-SHA1', TRESTRequestParameterKind.pkGETorPOST);

    Params.Add('SignatureNonce', LSignatureNonce);
    RESTRequest.Params.AddItem('SignatureNonce', LSignatureNonce, TRESTRequestParameterKind.pkGETorPOST);
    Params.Add('SignatureVersion', '1.0');
    RESTRequest.Params.AddItem('SignatureVersion', '1.0', TRESTRequestParameterKind.pkGETorPOST);

     //②.业务API参数:
    Params.Add('Action', 'SendSms');
    RESTRequest.Params.AddItem('Action', 'SendSms', TRESTRequestParameterKind.pkGETorPOST);
    Params.Add('Version', Lversion);
    RESTRequest.Params.AddItem('Version', Lversion, TRESTRequestParameterKind.pkGETorPOST);
    Params.Add('RegionId', 'cn-hangzhou');
    RESTRequest.Params.AddItem('RegionId', 'cn-hangzhou', TRESTRequestParameterKind.pkGETorPOST);
    Params.Add('PhoneNumbers', Atel_no);
    RESTRequest.Params.AddItem('PhoneNumbers', Atel_no, TRESTRequestParameterKind.pkGETorPOST);
    Params.Add('SignName', TNetEncoding.URL.EncodeForm(LSignName));
    RESTRequest.Params.AddItem('SignName', LSignName, TRESTRequestParameterKind.pkGETorPOST);
    Params.Add('TemplateCode', '你的TemplateCode');
    RESTRequest.Params.AddItem('TemplateCode', '你的TemplateCode', TRESTRequestParameterKind.pkGETorPOST);
    Params.Add('TemplateParam', TNetEncoding.URL.EncodeForm(LTemplateParam));
    RESTRequest.Params.AddItem('TemplateParam', LTemplateParam, TRESTRequestParameterKind.pkGETorPOST);
    Params.Add('OutId', '');
    RESTRequest.Params.AddItem('OutId', '', TRESTRequestParameterKind.pkGETorPOST);

     //③.去除签名关键字Key:
    //2.1.3:(我加的严格按照API说明更安全)去除签名关键字Key:'Signature':
    if Params.ContainsKey('Signature') then Params.Remove('Signature');

    //2.2、第二步:根据参数Key排序(顺序)::
    SortedParams := Params.keys.ToArray;
    TArray.Sort<string>(SortedParams);

    //2.3.2、拼接sortQueryString
    sortQueryString:='';
    LParamIndex:=0;
    for Key in SortedParams do
    begin
      if LParamIndex=0 then
        sortQueryString:=sortQueryString
          +SpecialUrlEncode(Key)
          +'%3D'+SpecialUrlEncode(Params.Items[Key])
      else
        sortQueryString:=sortQueryString
          +'%26'+SpecialUrlEncode(Key)
          +'%3D'+SpecialUrlEncode(Params.Items[Key]);
      INC(LParamIndex);
      //:第1个参数不带连接符&
    end;

    sortQueryString:='GET&%2F&'+sortQueryString;
    LSignature:= Sign(sortQueryString,LAccessKeySecret + '&');

    RESTRequest.Params.AddItem('Signature', LSignature, TRESTRequestParameterKind.pkGETorPOST);
    RESTRequest.Execute;

    if RESTRequest.Response.JSONValue.TryGetValue<TJSONValue>('Code', LPathValue) then
    begin
      if Lpathvalue.ToString.ToLower='"ok"' then
      result:=true;
    end;
  finally
    params.Free;
  end;
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值