📄 unitcode.pas
字号:
{
时间:20030923
目的:增加状态报告保存;
增加关键子过滤;
增加群发短信息;
增加手机图片铃声的单独的发送接口;
接收短信接口;
读取二进制文件;
接收状态报告
短信流量查询
实现函数:
function FindSensitiveWord(const sMessage: string): boolean;
procedure InsertCmppQuery(ServiceId: string);
function GetSms(TimeOut: Integer; var OrgAddr_R: string; var UserData_R: string; var DestAddr_R: string): Integer;
function SendSmsSingle(OrgAddr: string; DestAddr: string; Content: string; FeeType: string; FeeCode: string; UserFeeType: Byte; var ErrorCode: Integer): Integer;
function SendSmsSingleBin(OrgAddr: string; DestAddr: string; Content: string; FeeType: string; FeeCode: string; UserFeeType: Byte; var ErrorCode: Integer): Integer;
function SendSmsBatch(ServiceId: string; MsgFmt: integer; feetype, feecode: string; SrcTermID: string; DestTermIDFile: string; MsgFile: string; MsgIDFile: string; FeeUserType: char): integer;
function ReadBinFile(filename: string): string;
procedure GetBininfo(content: string; var pBininfo: TBininfo);
}
unit UnitCode;
interface
uses
classes, sysutils, adodb;
type //二进制文件信息结构
TBininfo = record
filename: string;
filecount: integer;
end;
function FindSensitiveWord(const sMessage: string): boolean; //查找关键字
procedure InsertCmppQuery(ServiceId: string); //按业务查询短信流量
function GetSms(TimeOut: Integer; var OrgAddr_R: string; var UserData_R: string; var DestAddr_R: string; var nIsReply: boolean): Integer;
function SendSmsSingle(OrgAddr: string; DestAddr: string; Content: string; FeeType: string; FeeCode: string; UserFeeType: Byte; var ErrorCode: Integer;
ServiceID: string; Msg_Fmt: integer; TpPid: integer; TpUdhi: integer; nNeedReply: integer; var smsid: string): Integer;
function SendSmsBatch(ServiceId: string; MsgFmt: integer; feetype, feecode: string; SrcTermID: string; DestTermIDFile: string; MsgFile: string; MsgIDFile: string; FeeUserType: byte; nNeedReply: integer): integer;
function ReadBinFile(filename: string): string;
procedure GetBininfo(content: string; var pBininfo: TBininfo);
implementation
uses CMPP;
//查找敏感字
function FindSensitiveWord(const sMessage: string): boolean;
var
slist: tstringlist;
i: integer;
begin
//false为不存在
result := false;
slist := tstringlist.Create;
try
///snesitiveword.txt记录有关键字的文本文件
if fileexists('SensitiveWord.txt') then
begin
slist.LoadFromFile('SensitiveWord.txt');
//如果装载未成功,未检查不发短信息
if slist.Count = 0 then
begin
result := true;
exit;
end;
//比较用户信息是否存在关键字子串
for i := 0 to slist.Count - 1 do
begin
if pos(uppercase(slist.Strings[i]), uppercase(sMessage)) <> 0 then
begin
result := true;
exit;
end;
end;
end;
finally
slist.Free;
end;
end;
//查询状态分析报告
procedure InsertCmppQuery(ServiceId: string);
var
rQueryResp: PQueryResp;
Qry: TADOQuery;
begin
Qry := tadoquery.Create(nil);
GetMem(rQueryResp, sizeof(QueryResp));
try
if CMPPQuery(pchar(formatdatetime('yyyymmdd', now())), 0, pchar(serviceid), rQueryResp) = 0 then
begin
with Qry do
begin
ConnectionString := 'FILE NAME=newsms.udl';
close;
sql.Clear;
sql.Text := 'delete from CmppQuery where serviceid=' + '''' + serviceid + '''';
execsql;
close;
sql.Clear;
sql.Text := 'insert into cmppquery(serviceid,nMT_TLMSG,nMT_TLusr,nMT_Scs,nMT_WT,nMT_FL,nMO_Scs,nMO_WT,nMO_FL)' +
' values(' + '''' + serviceid + '''' + ',' + inttostr(rQueryResp^.nMT_TLMSG) + ',' +
inttostr(rQueryResp^.nMT_TLusr) + ',' +
inttostr(rQueryResp^.nMT_Scs) + ',' +
inttostr(rQueryResp^.nMT_WT) + ',' +
inttostr(rQueryResp^.nMT_FL) + ',' +
inttostr(rQueryResp^.nMO_Scs) + ',' +
inttostr(rQueryResp^.nMO_WT) + ',' +
inttostr(rQueryResp^.nMO_FL) + ')';
execsql;
end;
end;
finally
freemem(rQueryResp);
qry.Free;
end;
end;
//获得短信息
function GetSms(TimeOut: Integer; var OrgAddr_R: string; var UserData_R: string; var DestAddr_R: string; var nISReply: boolean): Integer;
var
rDeliverResp: DeliverResp;
begin
fillchar(rDeliverResp.sDestTermID, 21, 0);
result := CMPPDeliver(Timeout, @rDeliverResp);
if result <> 0 then
begin
exit;
end
else
begin
if rdeliverResp.nIsReply = 1 then //判断是否为状态报告
begin
nIsReply := true;
end;
UserData_R := Copy(rDeliverResp.sMsgContent, 1, rdeliverresp.nMsgLen);
OrgAddr_R := Copy(rdeliverResp.sSrcTermID, 1, 11);
DestAddr_R := Copy(rDeliverResp.sDestTermID, 1, Pos(#0, rDeliverResp.sDestTermID) - 1);
end;
end;
//发送信息
function SendSmsSingle(OrgAddr: string; DestAddr: string; Content: string; FeeType: string; FeeCode: string;
UserFeeType: Byte; var ErrorCode: Integer; ServiceID: string; Msg_Fmt: integer;
TpPid: integer; TpUdhi: integer; nNeedReply: integer; var smsid: string): Integer;
var
sSMSID: PChar;
FCS: PChar;
begin
GetMem(sSMSID, 255);
GetMem(FCS, 255);
try
Result := CMPPSendSingle(nNeedReply, 1, PChar(serviceid), Msg_Fmt, PChar(FeeType), PChar(FeeCode),
PChar(''), PChar(''), PChar(OrgAddr), PChar(DestAddr),
Length(Content), PChar(Content), sSMSID, ErrorCode,
Chr(UserFeeType), FCS, Chr(TpPid), Chr(TpUdhi));
smsid := sSmsid;
finally
FreeMem(sSMSID);
FreeMem(FCS);
end;
end;
//群发短信息
function SendSmsBatch(ServiceId: string; MsgFmt: integer; feetype, feecode: string; SrcTermID: string;
DestTermIDFile: string; MsgFile: string; MsgIDFile: string; FeeUserType: byte; nNeedReply: integer): integer;
begin
result := CMPPSendBatch(nNeedReply, 1, pchar(serviceid), MSG_FORMAT_ASCII, pchar(feetype), pchar(feecode), '', '', pchar(SrcTermId),
pchar(desttermidfile), pchar(Msgfile), pchar(MsgIdFile), chr(FeeuserType), '', Chr(TPPID_ASCII), Chr(TPUDHI_ASCII));
end;
//读取文件内容
function ReadBinFile(filename: string): string;
var
fs: tfilestream;
j: integer;
tmpstring: string;
buffer: array[0..512] of char;
begin
fs := tfilestream.Create(filename, fmopenreadwrite);
try
fillchar(buffer, sizeof(buffer), 0);
fs.Read(buffer, fs.Size);
tmpstring := '';
for j := 0 to fs.Size - 1 do
begin
tmpstring := tmpstring + buffer[j];
end;
result := tmpstring;
finally
fs.Free;
end;
end;
//获得文件信息
procedure GetBininfo(content: string; var pBininfo: TBininfo);
var
i: integer;
begin
delete(content, 1, 8);
for i := 1 to length(content) do
begin
if (content[i] = '$') then
break;
end;
pbininfo.filename := copy(content, 1, i - 1);
pbininfo.filecount := strtoint(copy(content, i + 1, length(content)));
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -