⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unitcode.pas

📁 CMPP3移动短信平台400条/S 稳定版
💻 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 + -