//-----------------------------------------------------------------------------
//作者:酋长(3989850) 2017.12.12 (2020.03.31改)
//备注:自己在写DLL的时候,函数未加StdCall;参数传递时,地址一直有问题,搞了一夜才查出来。。。
//功能:阿里云短信接口
//配置文件:放置2个核心参数,通过INI文件,可以方便的更换
//预读取可执行文件目录下的SMS.INI,核心参数预读取,调用代码时,只需要调用CreateVCode
//建立随机验证码,然后再调用ALI_SendMSG,填上电话号码和参数就可以了
//设计这段代码,主要是为了短信验证码,功能已经完全实现
//因为把模板和名字都放出来了,所以不仅可以发送验证码,也可配合模板发送其他信息。
//短信发送代码段是参考 《全能地图(QQ:64445322)》的最新代码,阿里没提供DELPHI
//的SDK和DEMO,感谢 全能地图 的无私共享,不支持DELPHI7,所以用XE编译了DLL供D7调用。
//-----------------------------------------------------------------------------
unit GetALiMsg;
interface
uses SysUtils;
AliyunDysmsFullAccess | 管理短信服务(SMS)的权限 |
AliyunDysmsReadOnlyAccess | 只读访问短信服务(SMS)的权限 |
{-----------------------------------------------------------------------------
阿里需要2个授权,短信,分别是读取和管理授权
-----------------------------------------------------------------------------}
function ALI_SendMSG(const PhoneNumbers, TemplateParam,TemplateCode, FreeSignName :String;
var ResultMsg:String):Boolean;
//生成指定长度的随机验证码
function CreateVCode(sLen: Integer): string;
implementation
function ALI_SendSMS(const PhoneNumbers, TemplateParam: PAnsiChar;
const TemplateCode, FreeSignName :PAnsiChar;
var ResultMsg:PChar;Var ResultLen:integer):Boolean;stdcall;external 'AliSMS.dll';
//生成指定长度的随机验证码
function CreateVCode(sLen: Integer): string;
var
j, k: Integer;
strResult: string;
begin
Result := '';
strResult := '';
for j := 1 to sLen do
begin
Randomize;
k := Random(1000) mod 10;
strResult := strResult + Format('%.1d', [k]);
end;
Result := strResult;
end;
function ALI_SendMSG(const PhoneNumbers, TemplateParam,TemplateCode, FreeSignName :String;
var ResultMsg:String):Boolean;
var
// tReciveNumber,tTemplateContent,tResultMSG:string;
// tTemplateCode, tFreeSignName :String;
// tVCode,tStr:string;
inReviceNumber, inTemplateContent:PAnsiChar;
inTemplateCode, inFreeSignName ,tResultMSG:PAnsiChar;
i:integer;
begin
Result := False;
tResultMSG:= allocmem(512); //同时初始化为0
try
inReviceNumber := PAnsiChar(AnsiString(PhoneNumbers));
inTemplateContent := PAnsiChar(AnsiString(TemplateParam));
inTemplateCode := PAnsiChar(AnsiString(TemplateCode));
inFreeSignName := PAnsiChar(AnsiString(FreeSignName));
i := 512;
if ALI_SendSMS( inReviceNumber, inTemplateContent,
inTemplateCode, InFreeSignName,
PChar(tResultMSG), i ) then
Result := True;
ResultMsg := AnsiString(tResultMSG);
finally
FreeMemory(tResultMSG);
end;
end;
end.