最近一直在忙其他事情,FOL停了好久,汗。。。

1、上个月帮朋友搞了个微信的公众号,然后因为公众号要做些用户管理的,又去把短信验证这块做了一下,用的是阿里大于的服务。期间被sign码拖了两天,总算是搞定了。等下把代码分享一下。

2、公众号的事情剩下一些页面的工作没做,因为朋友那边一直没提供页面内容,也没办法做。刚好回老家喝酒的时候,堂弟那边说要帮他做个房产审批小工具,4-5年没做这种东西了,以为1-2天能搞定,没想到又要搞授权、又要分级审批,还有各种打印、导出excel,给的数据又乱,还得分析、提取老旧数据,这一来头头尾尾又去了5天。今天刚好台风天待家里,总算把所有功能全搞完了。难得清闲一下。

3、接下去还是继续准备把微信公众号这个事情给做完,再继续FOL了。等公众号这个做完,再发一篇介绍delphi开发微信公众号的。

 

分享一下阿里大于的短信验证码实现,还是贴代码。

1、注意:uses System.Hash;

2、Delphi XE10.1

3、在盒子那边发过,那边有些同学在讨论,有问题可以去那边看看。传送门

4、代码如下

procedure TForm1.Button1Click(Sender: TObject);
var
  lvSecret: string;
  lvStrings: TStringList;
  i: Integer;
  lvSign: string;
  lvMD5: THashMD5;
  lvResponse: TStringStream;
begin
  lvStrings:= TStringList.Create;
  lvResponse:= TStringStream.Create;
  try
    lvSecret:= Edit3.Text;

    //加密用到的参数就这些,不要乱加参数
    lvStrings.Add(\'app_key\'+Edit2.Text);
    lvStrings.Add(\'format\'+\'xml\');
    lvStrings.Add(\'method\'+\'alibaba.aliqin.fc.sms.num.send\');
    lvStrings.Add(\'sign_method\'+\'md5\');
    lvStrings.Add(\'timestamp\'+\'2016-09-17 21:35:06\');
    lvStrings.Add(\'v\'+\'2.0\');
    lvStrings.Add(\'rec_num\'+Edit6.Text);
    lvStrings.Add(\'sms_free_sign_name\'+\'个人测试\');
    lvStrings.Add(\'sms_param\'+Edit5.Text);
    lvStrings.Add(\'sms_template_code\'+Edit4.Text);
    lvStrings.Add(\'sms_type\'+\'normal\');
    lvStrings.Sort;
    for i:= 0 to lvStrings.Count -1 do
      lvSign:= lvSign + lvStrings[i];
    lvSign:= lvSecret + lvSign + lvSecret;  //加密前的串,格式是:Secret + 拼装的参数名参数值串 + Secret
    lvSign:= UpperCase(lvMD5.GetHashString(lvSign));  //按照阿里大于的帮助文档组装加密后得到的Sign,很多人都卡这里
    Memo1.Lines.Add(\'sign=\'+lvSign);

    lvStrings.Clear;
    lvStrings.Add(\'app_key=\'+edit2.Text); //阿里大于后台的app_key
    lvStrings.Add(\'format=\'+\'xml\'); //这里选择xml格式,也可以用json
    lvStrings.Add(\'method=\'+\'alibaba.aliqin.fc.sms.num.send\'); //短信发送API名称,固定,不要变
    lvStrings.Add(\'sign_method=\'+\'md5\');  //加密方法,这里选择md5
    lvStrings.Add(\'timestamp=\'+\'2016-09-17 21:35:06\');
    lvStrings.Add(\'v=\'+\'2.0\');
    lvStrings.Add(\'rec_num=\'+Edit6.Text); //要接收的手机号码,有多个用英文逗号隔开
    lvStrings.Add(\'sms_free_sign_name=\'+\'个人测试\'); //阿里大于后台申请的短信签名名称
    lvStrings.Add(\'sms_param=\'+Edit5.Text);     //edit5.text:= \'{"code":"5858"}\'
    lvStrings.Add(\'sms_template_code=\'+Edit4.Text); //阿里大于后台申请的短信模板,我的格式是:您的验证码${code},60秒内输入有效。
    lvStrings.Add(\'sms_type=\'+\'normal\');
    lvStrings.Add(\'sign=\'+lvSign);

    IdHTTP1.ReadTimeout:= 3000;
    IdHTTP1.AllowCookies:= False;
    IdHTTP1.Request.ContentType:= \'application/x-www-form-urlencoded;charset=utf-8\';
    IdHTTP1.Post(Edit1.Text,lvStrings,lvResponse);
    Memo1.Lines.Add(\'respon_se=\'+lvResponse.DataString);
  finally
    lvResponse.Free;
    lvStrings.Free;
  end;
end;

 

版权声明:本文为crymm原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/crymm/archive/2016/09/28/5917619.html