最近,自己有个项目中,需要用到飞信的相关操作(发送短信等)。于是就开始咂摸着写一个飞信的控件出来。飞信的这个协议网络上早就有人分析过,基本上大部分都分析出来了,其他没分析的,自己抓抓包分析分析,也不难。经过几天的工作与摸索,目前基本上1.0版本已经出来了。目前具备的功能如下:
1、删除某个飞信好友
2、添加飞信好友
3、发送飞信消息
4、发送手机消息给飞信好友
5、发送手机信息给自己
6、修改自己的飞信信息
7、修改好友的显示信息等
8、维持在线心跳
9、获得某手机号的飞信用户信息
大致属性信息如下:
cmdRequestTimes属性指定命令失败时重试的次数(每次如果发送命令失败,都会重试)
KeepActiveTime 属性指定保持心跳的心跳包发送频率时间(秒)
LongMsgSend属性指定发送短信是否以长短信模式发送
PhoneNum属性指定用户的手机号
timeOut属性指定超时的时间(秒)
飞信控件事件:
OnError事件指定错误时候触发的事件,实际格式为:
OnError(Sender: TObject; var ErrorCode: Integer)
ErrorCode指定事件的错误代码,如果发生了错误,用户没有通过本事件捕捉,就会抛出异常,目前能处理的错误代码如下:
300: '网络可能已经断开,请检查';
400: '消息格式错误';
401: '认证失败';
404: '用户不存在';
420: '用户性别设置错误';
442: '密码不能为空,或格式错误';
443: '昵称为空,长度超长或格式错误';
481: '用户已经开通';
452:'用户尚未开通FETION';
500:'服务器错误';
如果用户指定错误代号为200或者0,就表示成功,讲不会出现异常
OnGetMsg事件,在接收到飞信好友发送的飞信信息时候触发,参数格式如下
OnGetMsg(Sender: TObject;FromContact: TContact;MsgDate: TDateTime;Msg: string) ;
FromContact指定来自哪个飞信好友,TContact是好友联系人类
MsgDate指定消息发送时间
Msg指定消息内容
OnLoged事件指定登录事件,登录完成之后触发的事件
本事件无论成功与否都会触发。
OnLoged(Sender: TObject; LogState: TLogState);
LogState登录状态
TLogState = (DxLg_Beg,DxLg_FL,DxLg_LgSIP,DxLg_LgOK);
DxLg_Beg登录开始Begin
DxLg_FL获取好友列表FriendList
DxLg_LgSIP登录SIP身份验证
DxLg_LgOK登录成功
OnLogEvent事件,登录过程中事件其实应该是OnLoging事件
LogingEvent(Sender: TObject; LogMsg: string);
LogMsg指定登录时候回传的消息通知
OnLogOut事件,登出事件
OnModifyInfoEvent事件,修改飞信信息事件,修改之后触发
OnModifyInfoEvent(Sender: TObject; ModifyContact: TContact; ModifyStyle: TModifyStyle; ModifyOk: Boolean);
ModifyContact指定修改的账号信息
ModifyStyle指定修改类型
//修改样式 昵称 生日 心情短语 好友显示名称 删除好友 移动好友分组
TModifyStyle=(MDS_NickName,MDS_Birth,MDS_Moodphrase, MDS_UserDisplayName,MDS_DelContact,MDS_MoveGroup);
ModifyOk指定是否修改成功
公共方法属性等:
function SendMessage(const PhoneNum: string;Msg: String;const SendToPhone: Boolean=False): Boolean;overload;
function SendMessage(Contact: TContact;Msg: String;const SendToPhone: Boolean=False): Boolean;overload;
function SendMessageToMyPhone(Msg: string): Boolean;//给自己手机发信息
property ContactList: TContactList read FContactList;
//本人帐户
property MainContact: TContact read FMainContact;
property FetionNum: string read FFetionNum;
//登录飞信
procedure LoginFetion(Pwd: string);
//登出飞信
function LogOut: Boolean;
procedure Abort;//终止操作
function DeleteContact(Contact: TContact): Boolean;overload;
function DeleteContact(PhoneNum: String): Boolean;overload;
function DeleteFetioNum(FetionNum: string): Boolean;
function ContactByPhoneNum(PhoneNum: string;var IsSelfFriend: Boolean): TContact;//根据电话号码获得一个用户帐户信息
function ContactByFetionNum(FetionNumber: string;var IsSelfFriend: Boolean): TContact;//根据飞信号码获得用户帐户信息
function AddContact(PhoneNum: string;NotifyMsg: string): Boolean;//添加飞信好友
function AddContactByFetionNum(FetionNum: string;NotifyMsg: String): Boolean;//通过飞信号码添加好友
property IsRunning: Boolean read FIsRunning;
有兴趣的,可以到www.52delphi.com下载试用版