• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

利用阿里大于接口发短信(Delphi版)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  阿里大于是阿里通信旗下产品,融合了三大运营商的通信能力,提供包括短信、语音、流量直充、私密专线、店铺手机号等个性化服务。每条四分五,价钱还算公道,经老农测试,响应速度非常快,基本上是秒到。官方文档提供了JAVA、.NET、PHP、Python、C/C++、NodeJS 等语言的 Demo,唯独没有 Dephi,但这也不能怪马云,毕竟 Delphi 实在太小众了。

   最近用 Delphi 写个 App,注册用户需要用到手机短信验证,于是找到的阿里大于,使用 Delphi 10.1 berlin 写了个简单的 Demo 并测试通过,现在交出代码:

 1 /// <author>全能地图(QQ:64445322)</author>
 2 /// <summary>
 3 /// 利用阿里大于接口发短信
 4 /// 阿里大于网址:http://www.alidayu.com
 5 /// 阿里大于短信接口文档:https://api.alidayu.com/doc2/apiDetail.htm?apiId=25450
 6 /// </summary>
 7 /// <param name="AppKey">TOP分配给应用的AppKey</param>
 8 /// <param name="AppSecret">AppSecret</param>
 9 /// <param name="ReceiveNumber">接收手机号码</param>
10 /// <param name="FreeSignName">短信签名,传入的短信签名必须是在阿里大于“管理中心-短信签名管理”中的可用签名</param>
11 /// <param name="TemplateCode">短信模板ID</param>
12 /// <param name="TemplateContent">短信模板变量,例如:{"code":"1234","product":"alidayu"}</param>
13 /// <param name="ResultMsg">下发结果消息</param>
14 /// <returns>是否成功,True = 成功 ,false = 失败</returns>
15 function SendSMS(const AppKey, AppSecret, ReceiveNumber, FreeSignName, TemplateCode, TemplateContent: string; var ResultMsg: string): Boolean;
16 
17   // 签名算法:http://open.taobao.com/doc2/detail.htm?articleId=101617&docType=1&treeId=1
18   function MakeSign(const AParams: TStringList; const AppSecret: string): string;
19   var
20     I: Integer;
21     Data: string;
22   begin
23     // 参数排序
24     AParams.Sort;
25 
26     // 参数拼接
27     Data := \'\';
28     for I := 0 to AParams.Count - 1 do
29       Data := Data + AParams[I].Replace(\'=\', \'\');
30 
31     // HMAC 算法
32     Result := THashMD5.GetHMAC(Data, AppSecret).ToUpper;
33   end;
34 
35 var
36   HTTP: TNetHTTPClient;
37   JsonObject: TJSONObject;
38   Params: TStringList;
39   Response: string;
40 begin
41   Result := False;
42 
43   HTTP := TNetHTTPClient.Create(nil);
44   Params := TStringList.Create();
45   try
46     Params.Values[\'app_key\'] := AppKey;
47     Params.Values[\'format\'] := \'json\';
48     Params.Values[\'method\'] := \'alibaba.aliqin.fc.sms.num.send\';
49     Params.Values[\'sign_method\'] := \'hmac\';
50     Params.Values[\'timestamp\'] := FormatDateTime(\'yyyy-MM-dd HH:mm:ss\', Now);
51     Params.Values[\'v\'] := \'2.0\';
52     Params.Values[\'sms_type\'] := \'normal\';
53     Params.Values[\'sms_free_sign_name\'] := FreeSignName;
54     Params.Values[\'rec_num\'] := ReceiveNumber;
55     Params.Values[\'sms_template_code\'] := TemplateCode;
56     Params.Values[\'sms_param\'] := TemplateContent;
57     Params.Values[\'sign\'] := MakeSign(Params, AppSecret);
58 
59     HTTP.ContentType := \'application/x-www-form-urlencoded\';
60     try
61       Response := HTTP.Post(\'https://eco.taobao.com/router/rest\', Params).ContentAsString();
62     except
63       on E: Exception do
64       begin
65         ResultMsg := E.Message;
66         Exit;
67       end;
68     end;
69 
70     JsonObject := TJSONObject.ParseJSONValue(Response) as TJSONObject;
71     try
72       if JsonObject <> nil then
73       begin
74         if JsonObject.TryGetValue<string>(\'alibaba_aliqin_fc_sms_num_send_response.result.success\', ResultMsg) then
75           Result := ResultMsg.ToUpper = \'TRUE\'
76         else if JsonObject.TryGetValue<string>(\'error_response.msg\', ResultMsg) then
77           Result := False;
78       end;
79 
80     finally
81       JsonObject.Free;
82     end;
83 
84   finally
85     HTTP.Free;
86     Params.Free;
87   end;
88 
89 end;

 有不少同学还在使用D7,不知道怎么用,稍微改改就可以了。

 1 function SendSMS(const AppKey, AppSecret, ReceiveNumber, FreeSignName, TemplateCode, TemplateContent: string; var ResultMsg: string): Boolean;
 2 
 3   function GetStringMD5(const AInPut: string): string;
 4   var
 5     MD5: TIdHashMessageDigest5;
 6     Digest: T4x4LongWordRecord;
 7   begin
 8     MD5 := TIdHashMessageDigest5.Create;
 9     try
10       Digest := MD5.HashValue(AInPut);
11       Result := MD5.AsHex(Digest);
12     finally
13       MD5.Free;
14     end;
15   end;
16 
17 // 签名算法:http://open.taobao.com/doc2/detail.htm?articleId=101617&docType=1&amp;treeId=1
18   function MakeSign(const AParams: TStringList; const AppSecret: string): string;
19   var
20     I: Integer;
21     Data: string;
22   begin
23     // 参数排序
24     AParams.Sort;
25     // 参数拼接
26     Data := \'\';
27     for I := 0 to AParams.Count - 1 do
28       Data := Data + StringReplace(AParams[I], \'=\', \'\', [rfReplaceAll]);
29     // MD5 算法
30     Result := GetStringMD5(AppSecret + Data + AppSecret);
31   end;
32 
33 var
34   HTTP: TIdHTTP;
35   Params: TStringList;
36   Response: string;
37   JsonObject: ISuperObject;
38 begin
39   Result := False;
40 
41   HTTP := TIdHTTP.Create(nil);
42   Params := TStringList.Create();
43   try
44     Params.Values[\'app_key\'] := AppKey;
45     Params.Values[\'format\'] := \'json\';
46     Params.Values[\'method\'] := \'alibaba.aliqin.fc.sms.num.send\';
47     Params.Values[\'sign_method\'] := \'md5\';
48     Params.Values[\'timestamp\'] := FormatDateTime(\'yyyy-MM-dd HH:mm:ss\', Now);
49     Params.Values[\'v\'] := \'2.0\';
50     Params.Values[\'sms_type\'] := \'normal\';
51     Params.Values[\'sms_free_sign_name\'] := UTF8Encode(FreeSignName);
52     Params.Values[\'rec_num\'] := ReceiveNumber;
53     Params.Values[\'sms_template_code\'] := TemplateCode;
54     Params.Values[\'sms_param\'] := UTF8Encode(TemplateContent);
55     Params.Values[\'sign\'] := MakeSign(Params, AppSecret);
56 
57     HTTP.HandleRedirects := True;
58     HTTP.Request.AcceptCharSet := \'utf-8\';
59     HTTP.Request.ContentType := \'application/x-www-form-urlencoded\';
60     try
61       Response := HTTP.Post(\'http://gw.api.taobao.com/router/rest\', Params);
62     except
63       on E: Exception do
64       begin
65         ResultMsg := E.Message;
66         Exit;
67       end;
68     end;
69 
70     JsonObject := SO(Response);
71     if JsonObject <> nil then
72     begin
73       ResultMsg := JsonObject.S[\'alibaba_aliqin_fc_sms_num_send_response.result.success\'];
74       if ResultMsg <> \'\' then
75         Result := UpperCase(ResultMsg) = \'TRUE\'
76       else
77       begin
78         ResultMsg := JsonObject.S[\'error_response.msg\'];
79         Result := False;
80       end;
81     end;
82 
83   finally
84     HTTP.Free;
85     Params.Free;
86   end;
87 
88 end;

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
GMM算法的matlab程序GMM算法的matlab程序(初步)发布时间:2022-07-18
下一篇:
Matlab计算两集合间的海明距离发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap