hmilyygq
35770
|
2008/10/14 14:49:31 |
to ghs_79: 分享代码是因为对Delphi的热爱,希望对Delphi和盒子的发展贡献自己的一份力量
to zgcc: 我想添加删除好友的操作也是通过类似获取联系人的命令进行的,我这里因为环境所限,不方便对这些操作进行捉包分析; 你可以自己先捉包分析一下,不行的话把捉包数据发过来我帮你分析一下 |
ghs_79
35769
|
2008/10/14 14:13:58 |
谢谢hmilyygq的无私丰献,并且讲解很详细。 我们大家共同努力,把事情做好。 |
zgcc
35768
|
2008/10/14 14:01:46 |
怎么添加删除好友啊? 能不能给个示范代码? |
hmilyygq
35767
|
2008/10/14 13:52:28 |
关于飞信的登录过程我的代码里比较清楚,另外可以参考这个链接里的分析: 飞信协议分析, http://hi.baidu.com/nathan2007/blog/category/%B7%C9%D0%C5%D0%AD%D2%E9%B7%D6%CE%F6 关于飞信获取联系人列表的过程说明一下,根据我抓包分析的结果,飞信获取联系人列表和联系人详细信息的过程如下: 1.用PGGetGroupList命令获取组列表。组的属性有名称和编号,组和联系人之间用组编号来对应,每个联系人都有组编号这样一个属性; (源码对应RetriveContractList过程) 2.用GetPersonalInfo命令获取用户自己的信息。这个信息比较全面,包括用户的uri、手机号码、名称、昵称等; (源码对应RetrivePersonalInfo过程) 3.用GetContactList命令获取联系人列表。这个列表里的联系人分为两种用户:飞信用户和非飞信用户。两种用户的uri构成是不一样的:飞信用户的uri里包含的是用户的飞信号,非飞信用户的uri里包含的是用户的手机号码。这个列表里的联系人信息是不全的,只有uri、本地名称和组编号。实际上发短信的时候只要知道对方的uri就可以了,至于联系人的详细信息,需要下面的几步来完成; (源码对应RetriveContractList过程) 4.用SUB命令的presence子命令来预定联系人详细信息; 5.用GetContactsInfo命令获取联系人详细信息;联系人信息是用SUB命令的回应的方式分多次返回,这个信息里包含联系人的uri、昵称、手机号码等信息。 (源码对应RetriveContractInfo过程)
我这里因为调试环境的问题,可能分析不够正确
另外再说明一下,D7版的登录过程没有问题可以在盒子的ftp上下载,文件名是hmilyygq_Delphi_GreenFetion_D7_Src.rar,也可以在下面的链接下载 http://www.namipan.com/d/hmilyygq_Delphi_GreenFetion_D7_Src.rar/7ef36335938c960adcee76e6699601265047538c9eb90700
Delphi2007版本的登录过程有问题,需要进行如下修改: 1.反注释下面的代码: // 获取登录服务器和通信服务器地址 Request := TStringList.Create; try try IdHTTP1.ReadTimeout := 3000; IdHTTP1.ConnectTimeout := 3000; Request.Text := '<config><user mobile-no="13710011001" /><client type="PC" version="3.3.0370" platform="W5.1" /><servers version="0" /><service-no version="37" /></config>'; XMLReader.XML.Text := IdHTTP1.Post('http://nav.fetion.com.cn/nav/getsystemconfig.aspx', Request); XMLReader.Active := True; ExploreNode(XMLReader.Node); except end; finally Request.Free; end;
2.把下面这句 Request.Text := '<config><user mobile-no="13710011001" /><client type="PC" version="3.3.0370" platform="W5.1" /><servers version="0" /><service-no version="37" /></config>'; 改为: Request.Text := '<config><user mobile-no="'+PhoneNum+'" /><client type="PC" version="3.3.0370" platform="W5.1" /><servers version="0" /><service-no version="37" /></config>'; |
killwolf
35766
|
2008/10/14 13:30:43 |
试了下,果然是好东西。感谢分享! |
ghs_79
35765
|
2008/10/14 12:16:50 |
1、有些好友没有名称,如何解决。 2、如何得到好友电话 |
halen
35762
|
2008/10/14 10:15:30 |
我这边D7版本的,无法登录。。IdTCPClient1.ReadLn; 提示read timeout ; 另外IEHTTP1.sl.Text 返回值里面和status 为401 |
ghs_79
35761
|
2008/10/14 9:55:33 |
获得不了好友列表是在过程ShowNodeInfo中出错了, 把 if aNode.HasAttribute('buddy-lists') then group := aNode.Attributes['buddy-lists']改为 if aNode.HasAttribute('buddy-lists') then group := StrToIntDef(aNode.Attributes['buddy-lists'], 0); 因为在获得的信息中有此好友的值为空。 另外再问个问题,为什么有些好友没有名称? |
ghs_79
35760
|
2008/10/14 8:57:35 |
D7下密码改成字母是可以的。 |
zgcc
35759
|
2008/10/14 8:33:33 |
使用delphi2007(Dec2007)调试通过! 测试发送给自己正常. 不过怎么添加好友啊? |
vclclx
35757
|
2008/10/14 0:06:56 |
连接没有变,需要用ftp下载。 取消那段注释,并修改Request.Text后,可以登录了。 |
vclclx
35756
|
2008/10/13 23:57:22 |
只有hmilyygq_Delphi_GreenFetion_D7_Src.rar里面的能用,其它两个不能用,下载连接也没更新。 |
onecool
35754
|
2008/10/13 23:01:33 |
没有汉字,是数字,搞了一晚上才发现,是密码的问题。改了个密码就可以登陆了。 |
hmilyygq
35753
|
2008/10/13 22:58:08 |
是不是密码里有汉字?这样试试: hash_password(UTF8Encode(FPassWord)) |
onecool
35752
|
2008/10/13 22:50:00 |
D7版本中怀疑hash_password(FPassWord),这个函数有问题。同样一个账号,用某些密码怎么都登陆不了。如果在调试中登陆不了,试试改一个密码。 |
onecool
35751
|
2008/10/13 22:09:21 |
IEHTTP1.ExecuteURL(FSSISignInURL+'?mobileno=' + PhoneNum + '&domains=&digest=' + hash_password(FPassWord)); FResult := IEHTTP1.sl.Text; 两个手机,一个可以。一个在上面那句返回的结果不对。 '<?xml version="1.0" encoding="utf-8" ?><results status-code="401" />'#$D#$A |
hmilyygq
35750
|
2008/10/13 21:25:20 |
ghs_79: 你试一下飞信可以登录吗?如果可以登录,可以抓包对比一下二者的区别,我就是这样调试的
lanyong: 好友列表的部分可能处理的不够完善,至少好友分组我没有实现;实际上组列表我已经获取了,再把用户组加上没有技术难度 |
lanyong
35749
|
2008/10/13 21:19:20 |
我的D7+INDY10 成功发出了消息,不过我在D7+INDY9下面略作了点修改,不过好友列表取不出来,只有自己,没得好友!! |
onecool
35747
|
2008/10/13 21:09:36 |
测试D7版本的那个成功登陆,成功发消息。 |
onecool
35746
|
2008/10/13 20:37:25 |
是登陆不了。账号错误或网络故障! |