?? 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 + -