利用阿里大于接口发短信(Delphi版)
阿里大于是阿里通信旗下产品,融合了三大运营商的通信能力,提供包括短信、语音、流量直充、私密专线、店铺手机号等个性化服务。每条四分五,价钱还算公道,经老农测试,响应速度非常快,基本上是秒到。官方文档提供了JAVA、.NET、PHP、Python、C/C++、NodeJS 等语言的 Demo,唯独没有 Dephi,但这也不能怪马云,毕竟 Delphi 实在太小众了。
最近用 Delphi 写个 App,注册用户需要用到手机短信验证,于是找到的阿里大于,使用 Delphi 10.1 berlin 写了个简单的 Demo 并测试通过,现在交出代码:
1
阿里大于是阿里通信旗下产品,融合了三大运营商的通信能力,提供包括短信、语音、流量直充、私密专线、店铺手机号等个性化服务。每条四分五,价钱还算公道,经老农测试,响应速度非常快,基本上是秒到。官方文档提供了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.com5 /// 阿里大于短信接口文档:https://api.alidayu.com/doc2/apiDetail.htm?apiId=254506 /// </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 var5 MD5: TIdHashMessageDigest5;6 Digest: T4x4LongWordRecord;7 begin8 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&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;
有不少同学还在使用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 var5 MD5: TIdHashMessageDigest5;6 Digest: T4x4LongWordRecord;7 begin8 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&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;
利用阿里大于接口发短信(Delphi版)相关推荐
- 利用阿里大于实现发送短信(JAVA版)
本文是我自己的亲身实践得来,喜欢的朋 友别忘了点个赞哦! 最近整理了一下利用阿里大于短信平台来实现发送短信功能. 闲话不多说,直接开始吧. 首先,要明白利用大于发送短信这件事是由两部分组成: 一.在阿 ...
- 阿里大鱼进行发短信业务---使用详细步骤-Java操作
文章目录 前言 一.开通短信服务 二.快速学习 三.签名管理 1. 何为签名 2. 添加签名 四.模板管理 1. 何为模板 2. 添加模板 五.Java中使用阿里大鱼 1. 开发文档 2. 用到的依赖 ...
- 阿里云接口实现短信发送java版
阿里云接口实现短信发送java版 1. 前期准备 1.1.开通阿里云短信服务 1.2.申请签名管理和模板管理 1.3.获取Access_key和Access_secret 2.代码部分 2.1.在po ...
- 利用飞信给自己发短信的shell脚本
利用飞信给自己发短信的shell脚本翻译自一个python脚本因为openwrt要装python太大了.所以用了两天非工作时间 翻译成了 shell脚本 .测试可用. http://dl.dbank. ...
- java+调用飞信_java调用飞信接口发短信
java调用飞信接口发短信,看到挺好的,有利于大家做毕业设计加亮点,就发给大家了(新人发帖,不会发多个文件名,测试类就放这了) 需要这3个jar包: commons-codec-1.4.jar com ...
- JAVA飞信_java调用飞信接口发短信 - 贪吃蛇学院-专业IT技术平台
java调用飞信接口发短信,看到挺好的,有利于大家做毕业设计加亮点,就发给大家了(新人发帖,不会发多个文件名,测试类就放这了) 需要这3个jar包: commons-codec-1.4.jar com ...
- 【zz】免费的午餐——编程利用Google日历API发短信、Email
免费的午餐--编程利用Google日历API发短信.Email Google日历是相当优秀的日程管理工具,可以方便的组织.分享各类日程,Google还提供了贴心而免费的手机短信.Email提示功能,真 ...
- 利用飞信给自己发短信的shell脚本(2012-12-31更新,处理验证码,目前可用)
利用飞信给自己发短信的shell脚本翻译自一个python脚本因为openwrt要装python太大了.所以用了两天非工作时间 翻译成了 shell脚本 .测试可用. 2012-12-31 更新:由于 ...
- 秒懂云通信:如何用阿里云平台发短信?
1.阿里云短信官网在哪里.业务怎么开通? 搜索引擎搜"阿里云"或者直接录入alicloud.com后选择"短信服务". 阿里云短信服务,第一次或者未登录都可以点 ...
最新文章
- EM算法讲推导原理讲的懂了的,表达清晰易懂的, 收藏cnblog上的大牛的
- 专访丨周志华:深度学习理论探讨比应用滞后太多
- 从opensuse 12.3 升级到 opensuse13.1体验
- php静态方法调用变量吗,php静态方法怎么调用非静态变量?
- Ado.net类与对象
- 你一定不能错过的pandas 1.0.0四大新特性
- 剑指 Offer 11. 旋转数组的最小数字 LCOF
- UVA - 10118 Free Candies 记忆化搜索经典
- Java之品优购部署_day03(6)
- hdu 1524 A Chess Game
- linux如果时间等于22点,Linux下ntpdate时间同步
- Action中动态方法的调用 Action中通配符的使用 Result的配置
- 学了这几招,社交时人人都对你刮目相看
- 计算机开机b00t设置,电脑boot启动项设置
- yjk计算书_用户手册
- 精彩博文收集目录索引
- 清华姚班和清华计算机系,到底什么是清华姚班,姚班和智班哪个更厉害?不妨来了解一下...
- 操作系统知识点总结和题集大杂烩
- txt文件批量转换为excel文件
- cdf日上免税店_把代购删了吧!在家也可以逛免税店