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

📄 smg_interface.pas

📁 SPIG1.1.rar SPIG接口协议
💻 PAS
字号:
unit SMG_Interface;

interface

uses
  Windows, Forms, SysUtils, Classes, WinSock;

//Deliver包结构
type
 DeliverStr = record
     SrcNum     : DWord;
     DateTime   : DWord;
     Seq        : DWord;
     UserNumber : array[0..21] of Char;
     SPNumber   : array[0..21] of Char;
     Tp_Pid     : Char;
     Tp_Udhi    : Char;
     MsgCoding  : Char;
     MsgContent : array[0..159] of Char;
  end;

//Report包结构
type
 ReportStr = record
     SrcNum     : DWord;
     DateTime   : DWord;
     Seq        : DWord;
     UserNumber : array[0..21] of Char;
     State      : Char;
     ErrorCode  : Char;
     SubmitSeq  : DWord;
  end;

//MT Response结构
type
 MTRespStr = record
     SrcNum   : DWord;
     DateTime : DWord;
     Seq      : DWord;
     Result   : Char;
  end;

//Submit错误结构,当Submit发送不成功时,返回该结构
type
 MTErrorStr = record
     SrcNum    : DWord;
     DateTime  : DWord;
     Seq       : DWord;
     ErrorType : DWord;                    //1:因为连接不上SMG网关系统 2:登录网关失败 3:包发送失败且超过重发次数 4.超时无应答 5.消息长度为零
  end;

type
  SGIP_SeqID = record
     SrcNodeNum: Integer;	           //源节点编号
     DateTime  : Integer;	           //日期时间,如:1120203225
     SeqId     : Integer;                  //流水号
  end;

//消息头
type
 SGIP_Head = record
     TotalLength : Integer;                 //信息总长度
     CommandID   : DWord;                   //命令ID号
     SequenceID  : SGIP_SeqID;
  end;

//登录包消息体
type
 SGIP_Connect = record
     LoginType : Char;                       //1-sp连接smg;2-smg连接sp
     LoginName : array[0..15] of Char;
     LoginPwd  : array[0..15] of Char;
     Reserved  : array[0..7] of Char;
  end;

//SGIP1.2应答包
type
 SGIP_Resp = record
     Result : Char;                           //0:成功;1:等待发送;2:发送失败
     Reserved : array[0..7] of Char;
  end;


//SGIP1.1 Head数据体


//SGIP1.1 Submit数据体
type
 SGIP_Submits = record
     SPNumber     : array[0..20] of Char;      //sp的接入号码
     ChargeNumber : array[0..20] of Char;      //付费号码
     UserCount    : byte;                      //接收短消息的手机数量
     UserNumber   : array[0..20] of Char;      //接收该短消息的手机号
     CorpID       : array[0..4] of Char;       //企业代码,0-99999
     ServiceType  : array[0..9] of Char;       //业务代码,由sp定义
     FeeType      : byte;                      //计费类型:
                                               //0:短消息类型为”发送“对”计费用户号码“不计费,此类话单仅用于核减SP对称的信道费。
                                               //1:对计费号码免费
                                               //2:对计费号码按条计信息费
                                               //3:对计费号码按包月收取信息费
                                               //4:对计费号码的收费是由SP实现
     FeeValue     : array[0..5] of Char;       //该条短消息的收费值,单位为分
     GivenValue   : array[0..5] of Char;       //赠送用户的话费,0-99999
     AgentFlag    : byte;                      //代收费标志,0:应收;1:实收
     MorelatetoMTFlag : byte;                  //引起MT消息的原因
     Priority     : byte;                      //优先级0-9,从低到高
     ExpireTime   : array[0..15] of Char;      //短消息寿命的终止时间,"yymmddhhmmsstnnp","tnnp"取固定值"032+"
     ScheduleTime : array[0..15] of Char;      //定时发送时间
     ReportFlag   : byte;                      //状态报告标志,0-出错返回状态报告;1-总返回状态报告;2-不要状态报告;3...
     TpPid        : byte;
     Udhi         : byte;
     MessageCoding: byte;                       //编码方式,0:Ascii;3:Write card;4:binary;8:ucs2;15:GBK
     MessageType  : byte;                       //0:短消息信息
     MsgLen       : Integer;                    //短消息长度
     MsgContent   : array of Char;              //短消息内容
     Reserved     : array[0..7] of Char;        //保留
  end;

//DELIVER消息体
type
 SGIP_Delivers = record
     UserNumber : array[0..20] of Char;            //发送短消息的用户手机号
     SPNumber   :array[0..20] of Char;             //sp的接入号码
     TpPid      : Char;
     Udhi       : Char;
     MsgCoding  : Char;
     MsgLen     : Integer;
     MsgContent : array[0..159] of Char;
     Reserved   : array[0..7] of Char;
  end;

//REPORT消息体
type
 SGIP_Reports = Record
     SubmitSeqNum : SGIP_SeqID;                    //该命令所涉及的Submit或Deliver命令的序列号
     ReportType   : Char;                          //Report命令类型.0,1.
     UserNumber   : array[0..20] of Char;          //接收短消息的手机号,手机号码前加"86"国别标志.
     State        : Char;                          //该命令所涉及的短消息的当前执行状态.0:发送成功.1:等待发送.2:发送失败.
     ErrorCode    : Char;                          //当State==2时为错误码值,否则为0.
     Reserved     : array[0..7] of Char;           //保留,扩展用.
  end;

//sgip_packet接收时用到的消息包.
type
 SGIP_Packet = Record
  pk_head    : SGIP_Head;        //信息头
  pk_login   : SGIP_Connect;    //登录包
  pk_resp    : SGIP_Resp;        //应答消息包
  pk_submit  : SGIP_Submits;    //Submit消息包
  pk_deliver : SGIP_Delivers;  //Deliver消息包
  pk_report  : SGIP_Reports;    //Report消息包
 end;

type
 SGIP_Conn = record
  hSocket : TSocket;
  SrcNum  : DWord;
  Binded  : Boolean;
 end;

const
{错误代码定义}
 SGIP_SUCCESS	      = 0;                      //*success*/
 SGIP_ERROR_START     = 0x40000000;
 SGIP_EINVALSOCK      = SGIP_ERROR_START+1;     //Create Socket Fail//
 SGIP_EINVAL	      = SGIP_ERROR_START+2;     //Illegal Server Address//
 SGIP_HOST_UNREACHABLE=	SGIP_ERROR_START+3;     //Fail to Connect ISC//
 SGIP_TIMEOUT         = SGIP_ERROR_START+4;     //Send Or Recv TimeOut//
 SGIP_USERINVAL       = SGIP_ERROR_START+5;     //User Or Pwd Illegal//
 SGIP_DISCONNECT      = SGIP_ERROR_START+6;     //Connection end//
 SGIP_TOOHIGH_VERSION = SGIP_ERROR_START+9;     //Too High Version//
 //客户端向服务端请求消息
 SGIP_BIND         = $00000001;     //客户端向服务器请求连接
 SGIP_UNBIND       = $00000002;     //客户端向服务器端通知短开当前的连接
 SGIP_SUBMIT	   = $00000003;     //客户端向服务器端发送一条MT短消息
 SGIP_DELIVER	   = $00000004;     //客户端向服务端发送一条MO短消息
 SGIP_REPORT	   = $00000005;     //客户端向服务器端发送一条MT或MO的发送结果
 //服务器返回请求消息1
 SGIP_BIND_RESP    = $80000001;     //服务器端对接收到的Bind,命令的响应
 SGIP_UNBIND_RESP  = $80000002;     //服务器端对接收的Unbind命令的响应
 SGIP_SUBMIT_RESP  = $80000003;     //服务器端向从客户端接收到的Submit命令发送的应答消息
 SGIP_DELIVER_RESP = $80000004;     //服务器端向从客户端接收到的Deliver命令发送的应答消息
 SGIP_REPORT_RESP  = $80000005;     //服务器端向从客户端接收到的Report命令发送应答消息]
{消息格式的定义}
 MSG_FMT_ASCII	   = $0;            //纯ASCII字符串
 MSG_FMT_WRITE_CARD= $3;	    //写卡操作
 MSG_FMT_BINARY	   = $4;            //二进制编码
 MSG_FMT_UCS2	   = $8;            //UCS2编码
 MSG_FMT_GB	   = $0F;           //GBK编码
 MSG_FMT_OTA	   = $F6;           //OTA操作时的编码方式
{网络套接字错误定义}
 SGIP_SOCKET_CREATEFAIL = SGIP_ERROR_START+100;
 SGIP_SOCKET_CONNECTFAIL= SGIP_ERROR_START+101;
 SGIP_SOCKET_SENDTIMEOUT= SGIP_ERROR_START+102;
 SGIP_SOCKET_SENDERROR  = SGIP_ERROR_START+103;
 SGIP_SOCKET_CLOSED     = SGIP_ERROR_START+104;
 SGIP_SOCKET_RECVTIMEOUT= SGIP_ERROR_START+105;
 SGIP_SOCKET_RECVERROR  = SGIP_ERROR_START+106;
 SGIP_CLOSESOCKET_ERROR = SGIP_ERROR_START+107;
 SGIP_UNSENDALL         = SGIP_ERROR_START+108;
 SGIP_SOCKET_SIZE_ERROR = SGIP_ERROR_START+109;
 SGIP_ILLEGAL_CMD       = SGIP_ERROR_START+110;
 SGIP_LOGINFAIL         = SGIP_ERROR_START+111;
 SGIP_SOCKET_BINDFAIL   = SGIP_ERROR_START+112;
 SGIP_SOCKET_ACCEPTFAIL = SGIP_ERROR_START+113;
 SGIP_API_EXCEPTION     = SGIP_ERROR_START+200;
 SGIP_SOCKET_EXCEPTION  = SGIP_ERROR_START+300;
 SGIP_API_INVALPARAM    = SGIP_ERROR_START+400;
 SGIP_SOCKET_INVALPARAM = SGIP_ERROR_START+500;
//消息包的长度定义
 SGIP_HEADLEN   = SizeOf(SGIP_Head);	 //消息头的长度
 SGIP_LOGINLEN  = SizeOf(SGIP_Connect);	 //登录消息包体的长度
 SGIP_RESPLEN   = SizeOf(SGIP_Resp);	 //应答包体的长度
 SGIP_SUBMITLEN = SizeOf(SGIP_Submits);	 //MT消息体的长度
 SGIP_DELIVERLEN= SizeOf(SGIP_Delivers); //MO消息体的长度
 SGIP_REPORTLEN	= SizeOf(SGIP_Reports);	 //Report消息体的长度


 
implementation

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -