V4.2 API 4 Ntalker(一)

时间:2010-03-20 阅读: 佚名
主接口文件imxml.aspx.cs代码如下 using System; using System.Data; using System.Text; using System.Web; using JumbotCms.Libs; using JumbotCms.Common; namespace JumbotCms.WebFile.Ntalker { /// <summary> /// Ntalker的接口文件 /// 记住千万别用Session或Cookie来验证身份的合法性 /// 否则只能在ie下正常 /// </summary> publ

主接口文件imxml.aspx.cs代码如下

using System;
using System.Data;
using System.Text;
using System.Web;
using JumbotCms.Libs;
using JumbotCms.Common;
namespace JumbotCms.WebFile.Ntalker
{
    /// <summary>
    /// Ntalker的接口文件
    /// 记住千万别用Session或Cookie来验证身份的合法性
    /// 否则只能在ie下正常
    /// </summary>
    public partial class _imxml : JumbotCms.UI.BasicPage
    {
        private bool isusesitekey = true;//需要验证sitekey
        private string sitekey = "b2324e6a53c9aa210453d577d0******";//这个是在Ntalker网站申请时得到的
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Expires = 0;
            Response.Buffer = true;
            Response.ExpiresAbsolute = DateTime.Now.AddSeconds(-1);
            Response.AddHeader("pragma", "no-cache");
            Response.CacheControl = "no-cache";
            Response.Charset = "utf-8";
            Response.ContentType = "text/xml";
            StringBuilder _xml = new StringBuilder();
            _xml.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
            _xml.Append("<imxml encoding=\"utf-8\">");

            string querytype = q("query").ToLower();
            if (querytype == "")
            {
                _xml.Append("<error>no valid query param</error>");
                _xml.Append("</imxml>");
            }
            else
            {
                switch (querytype)
                {
                    case "imxmlversion"://1
                        _xml.Append(GetVersion());
                        break;
                    case "login"://2
                        _xml.Append(GetLogin());
                        break;
                    case "userprofile"://3
                        _xml.Append(GetUserProfile());
                        break;
                    case "siteprofile"://4
                        _xml.Append(GetSiteProfile());
                        break;
                    case "buddylist"://5
                        _xml.Append(GetBuddyList());
                        break;
                    case "addbuddy"://6
                        _xml.Append(AddBuddy());
                        break;
                    case "delbuddy"://7
                        _xml.Append(DelBuddy());
                        break;
                    default:
                        _xml.Append("<error>query param is not valide</error>");
                        break;
                }
                _xml.Append("</imxml>");
            }
            Response.Write(_xml.ToString());
            Response.End();
        }
        /// <summary>
        /// imxml接口的版本号//1
        /// *功能:返回imxml接口的版本号
        /// *输入参数:空
        /// *返回结果
        /// version: 接口文件版本号节点,如2.0,2.1。ntalker2.0要求为2.0.0
        /// for: 适用论坛版本,如discuz7.0等
        /// build: 发行时间节点,如20090501
        /// </summary>
        /// <returns></returns>
        ///
        private string GetVersion()
        {
            StringBuilder _html = new StringBuilder();
            _html.Append("<version>2.0.0</version>");
            _html.Append("<for>JumbotCms 4.2</for> ");
            _html.Append("<build>20100318</build>");
            return _html.ToString();
        }
        /// <summary>
        /// *功能:验证用户是否登陆在社区网站,验证模式包括两种,一是本接口,按照sessionid方式验证
        ///二是其它需要验证身份的接口,先验证session,如果成功,则校验结束,如果失败,再按照userkey方式验证。
        ///(sitekey是网站和ntalker服务器上共同拥有的一个密钥,作为一个变量,存储在配置文件(imconfig)中。
        ///如果要启用sitekey验证,请先修改配置文件中的enablesitekey为true)
        ///*输入参数
        ///query: login
        ///uid: 用户id
        ///sid: 用户seesionid值
        ///*返回结果
        ///返回一个节点sessionvalide,值为true代表验证通过,用户登陆在论坛中,false代表验证失败
        /// </summary>

        /// <returns></returns>
        private string GetLogin()
        {
            string userid = Str2Str(q("uid"));
            string sid = q("sid");
            if (userid == "1") SaveVisitLog(1, 0, "~/ntalker/logs/login_" + DateTime.Now.ToString("yyyyMMdd") + ".log");

            if (IsLogin(userid, sid, "", false))
            {
                return "<sessionvalide>true</sessionvalide>";
            }
            else
            {
                return "<sessionvalide>false</sessionvalide>";
            }
        }
        /// <summary>
        /// *功能:查看用户个人信息
        ///*输入参数
        ///query: userprofile
        ///uid:发起查询的用户id
        ///sid:发起查询的用户seesionid值
        ///userkey:uid和sitekey全小写字符串拼接后再md5的值。例如:uid="001", sitekey="test001",则 userkey = md5("001test001")。
        ///(sitekey从ntalker申请获得,填写到imconfig配置文件中的sitekey字段,必须与ntalker服务器保持一致
        ///destid: 被查询用户id(如果等于uid,则表示查询自己的信息,否则是聊友的信息)
        ///isuserapp: 取值true|false,是否返回userapp节点(被查询用户的用户应用,显示在聊天窗口中)
        ///ismyapp: 取值true|false,是否返回myapp节点(发起查询用户的用户应用,显示在好友列表中)
        ///isdetail: 取值true|false,是否返回全部资料
        ///*返回结果
        ///返回一个节点sessionvalide,值为true代表验证通过,用户登陆在论坛中,false代表验证失败
        ///(如果为false,则再返回一个节点userkeyvalide,值为true代表验证通过,用户登陆在论坛中,false代表验证失败)
        ///返回一个节点userprofile,其中包含一下几个子结点:
        ///uid: 被查询用户的id
        ///name: 被查询用户的名
        ///nick: 被查询用户的昵称
        ///icon: 被查询用户的头像url,包括"http://url"头
        ///smallicon: 被查询用户的小头像url(48*48像素),包括"http://url"头
        ///isdefaulticon: 被查询用户的头像是否是默认头像(即用户没有设置头像),0,非默认头像;1,默认头像;-1,无法判断(未知)
        ///profileurl: 被查询用户个人信息页面地址
        ///sex: 被查询用户的性别(male男性|female女性|-1未知)
        ///bday: 被查询用户的用户生日(XXXX年-XX月-XX日)
        ///country: 被查询用户的地域-国家
        ///province: 被查询用户的地域-省
        ///city: 被查询用户的地域-城市
        ///signature: 被查询用户的用户签名
        ///usergroup: 被查询用户的用户组名称,包含用户组id属性
        ///id: 用户组的id

        ///isdetail为true时,增加下列子节点:
        ///privacy: 隐私设置,如果为1,则显示下列子节点的内容,如果为0,则只显示这些节点本身(即节点内容置空)
        ///isshowemail: 被查询用户的是否显示邮件地址,取值true|false
        ///email: 被查询用户的邮箱地址
        ///profileinfo: 网站自己定义的用户个人信息一段文本,如"积分:23000 帖子:21 精华:2",该字段会显示在好友列表的上边区域
        ///isshowprofile:是否显示前一项用户个人信息,取值true|false
        ///money: 被查询用户在网站的金钱
        ///credit: 被查询用户在网站的积分

        ///isuserapp为true时,增加下列子节点:
        ///userapp : 被查询用户的用户应用,显示在聊天窗口中,最多6个
        ///userapp1: 用户应用的ICON/URL/NAME,每个项目分别是个子节点
        ///userapp2: 用户应用的ICON/URL/NAME
        ///userapp3: 用户应用的ICON/URL/NAME
        ///userapp4: 用户应用的ICON/URL/NAME
        ///userapp5: 用户应用的ICON/URL/NAME
        ///userapp6: 用户应用的ICON/URL/NAME

        ///ismyapp为true时,增加下列子节点:
        ///myapp: 发起查询用户的用户应用,显示在好友列表中,最多6个
        ///myapp1: 用户应用的ICON/URL/NAME,每个项目分别是个子节点
        ///myapp2: 用户应用的ICON/URL/NAME
        ///myapp3: 用户应用的ICON/URL/NAME
        ///myapp4: 用户应用的ICON/URL/NAME
        ///myapp5: 用户应用的ICON/URL/NAME
        ///myapp6: 用户应用的ICON/URL/NAME

        /// </summary>
        /// <returns></returns>
        private string GetUserProfile()
        {
            string sid = q("sid");
            string userid = Str2Str(q("uid"));//发起查询的用户id
            string userkey = q("userkey");
            string destid = Str2Str(q("destid"));//被查询用户id
            bool isdetail = q("isdetail") != "false" ? true : false;
            StringBuilder _html = new StringBuilder();
            if (IsLogin(userid, sid, userkey, isusesitekey))
            {
                _html.Append("<sessionvalide>true</sessionvalide>");
                _html.Append("<userkeyvalide>true</userkeyvalide>");
                JumbotCms.Entity.Normal_User _User = new JumbotCms.SqlServerDAL.Normal_UserDAL().GetEntity(destid);
                _html.Append("<userprofile>");
                _html.Append("<uid>").Append(destid).Append("</uid>");//被查询用户的id
                _html.Append("<name>").Append(_User.UserName).Append("</name>");//被查询用户的名
                _html.Append("<nick>").Append(_User.NickName).Append("</nick>");//被查询用户的昵称
                _html.Append("<icon>").Append(site.Url + site.Dir + "avatar/" + destid + "_l.jpg").Append("</icon>");
                _html.Append("<smallicon>").Append(site.Url + site.Dir + "avatar/" + destid + "_m.jpg").Append("</smallicon>");//被查询用户的小头像url(48*48像素)
                _html.Append("<isdefaulticon>1</isdefaulticon>");//被查询用户的头像是否是默认头像(即用户没有设置头像),0,非默认头像;1,默认头像;-1,无法判断(未知)
                _html.Append("<profileurl>" + _User.HomePage + "</profileurl>");
                if (_User.Sex == 1)
                    _html.Append("<sex>male</sex>");//male男性|female女性|-1未知
                else if (_User.Sex == 2)
                    _html.Append("<sex>female</sex>");//male男性|female女性|-1未知
                else
                    _html.Append("<sex>-1</sex>");
                _html.Append("<bday>" + _User.BirthDay + "</bday>");//用户生日(XXXX年-XX月-XX日)
                _html.Append("<country>中国</country>");//地域-国家
                _html.Append("<province>" + _User.ProvinceCity.Split('-')[0] + "</province>");//地域-省
                _html.Append("<city>" + _User.ProvinceCity.Split('-')[1] + "</city>");//地域-城市
                _html.Append("<signature>" + _User.Signature + "</signature>");//被查询用户的用户签名
                _html.Append("<usergroup>网站会员</usergroup>");
                _html.Append("<usergroup>").Append("网站会员").Append("</usergroup>");
                if (isdetail)
                {
                    _html.Append("<privacy>1</privacy>");//隐私设置,如果为1,则显示下列子节点的内容,如果为0,则只显示这些节点本身(即节点内容置空)
                    _html.Append("<isshowemail>true</isshowemail>");//被查询用户的是否显示邮件地址
                    _html.Append("<email>").Append(_User.Email).Append("</email>");//被查询用户的邮箱地址
                    _html.Append("<profileinfo>积分:" + _User.Integral + " 点数:" + _User.Points + "</profileinfo>");//网站自己定义的用户个人信息一段文本,如"积分:23000 帖子:21 精华:2",该字段会显示在好友列表的上边区域
                    _html.Append("<isshowprofile>true</isshowprofile>");//是否显示前一项用户个人信息,取值true|false
                    _html.Append("<credit>" + _User.Integral + "</credit>");//用户在网站的积分
                    _html.Append("<money>" + _User.Points + "</money>");//用户在网站的金钱
                }
                _html.Append("</userprofile>");
            }
            if (userid == "1") SaveVisitLog(1, 0, "~/ntalker/logs/userprofile_" + DateTime.Now.ToString("yyyyMMdd") + ".log");

            return _html.ToString();
        }
        /// <summary>
        /// *功能:返回网站的配置信息
        ///*输入参数:空
        ///*返回结果
        ///havebuddylist:网站是否有好友列表,取值true或false。如果为false,则用户的好友数据将存储于ntalker。
        ///disablebuddylist:强制关闭好友列表,即打开ntalker后,不出现好友列表项目,也不支持添加、删除好友,取值true或false(暂时没有启用)
        ///disableonlinelist:强制关闭在线会员列表,即打开ntalker后,不出现在线会员列表项目,取值true或false(暂时没有启用)
        ///isbuddyboth:是否双向好友,双向好友加好友需要确认,取值true或false
        ///emailofflinemessage:是否用email发送离线消息,取值true或false
        ///forbiddenwordslist:禁用词列表
        ///domainlogolarge:网站标示图标
        ///software:网站软件类型,包括discuz、phpwind、ucenterhome、dvbbs和custom 共5种类型
        ///softwareversion:软件版本号如5.0 6.0 .6.1等
        ///language:网站语言,包括gbk utf-8等
        ///isusesitekey:是否启用sitekey认证系统,取值true或false,取值来自imconfig的enablesitekey变量
        ///systimestamp: 系统的当前时间戳
        ///sitenanme:网站的名称
        ///version:接口文件版本号节点,如2.0,2.1。ntalker2.0要求至少为2.0.0(同imxmlversion接口)
        ///build:发行时间节点,如20090501(同imxmlversion接口)
        /// </summary>
        /// <returns></returns>
        private string GetSiteProfile()
        {
            StringBuilder _html = new StringBuilder();
            _html.Append("<havebuddylist>true</havebuddylist>");//网站是否有好友列表,取值true或false。如果为false,则用户的好友数据将存储于ntalker。
            _html.Append("<isbuddyboth>true</isbuddyboth>");//强制关闭好友列表,即打开ntalker后,不出现好友列表项目,也不支持添加、删除好友,取值true或false(暂时没有启用)
            _html.Append("<disablebuddylist>true</disablebuddylist>");//强制关闭在线会员列表,即打开ntalker后,不出现在线会员列表项目,取值true或false(暂时没有启用)
            _html.Append("<disableonlinelist>true</disableonlinelist>");//是否双向好友,双向好友加好友需要确认,取值true或false
            _html.Append("<emailofflinemessage>false</emailofflinemessage>");//是否用email发送离线消息,取值true或false
            _html.Append("<forbiddenwordslist>fuck,shit,操,逼,屄,屌</forbiddenwordslist>");//禁用词列表
            _html.Append("<domainlogolarge>" + site.Url + site.Dir + "images/logo.gif</domainlogolarge>");//网站标示图标
            _html.Append("<software>jumbotcms</software>");//网站软件类型
            _html.Append("<softwareversion>4.2</softwareversion>");//软件版本号
            _html.Append("<language>utf-8</language>");//网站语言,包括gbk utf-8等
            if (isusesitekey)
                _html.Append("<isusesitekey>true</isusesitekey>");//是否启用sitekey认证系统,取值true或false
            else
                _html.Append("<isusesitekey>false</isusesitekey>");
            _html.Append("<systimestamp>true</systimestamp>");//系统的当前时间戳
            _html.Append("<sitenanme>" + site.Name + "</sitenanme>");//网站的名称
            _html.Append("<version>2.0.0</version>");
            _html.Append("<build>20100318</build>");
            return _html.ToString();
        }
        /// <summary>
        ///*功能:获取好友列表的信息。
        ///包括两个模式,一是简洁模式,只返回好友uid、username、icon、smallicon、isdefaulticon、buddygroup等基本信息,二是详细信息,返回更多好友信息。
        ///maxbuddynum默认为255,好友数量如果超过maxbuddynum,返回好友列表要按照最近登录时间排序,以保证在线好友出现在好友列表中。
        ///对于好友数量超过maxbuddynum的,提供翻页功能,ntalker服务器通过pageindex传入当前的页数。
        ///*输入参数
        ///query: buddylist
        ///uid:发起查询好友的用户id
        ///sid:发起查询好友的用户seesionid值
        ///userkey:uid和sitekey全小写字符串拼接后再md5的值。例如:uid="001", sitekey="test001",则 userkey = md5("001test001")。
        ///(sitekey从ntalker申请获得,填写到imconfig配置文件中的sitekey字段,必须与ntalker服务器保持一致
        ///pagesize: 单页最大返回好友数量,默认为255个
        ///pageindex: 返回第几页的好友,在好友数量超过pagesize,用户操作好友列表翻页时(从0开始)
        ///isdetail: 取值true|false,是否返回详细资料
        ///*返回结果
        ///返回一个节点sessionvalide,值为true代表验证通过,用户登陆在论坛中,false代表验证失败
        ///(如果为false,则再返回一个节点userkeyvalide,值为true代表验证通过,用户登陆在论坛中,false代表验证失败)
        ///返回一个节点pageindex:当前请求的好友列表页数(从0开始)
        ///返回一个节点pagesize:当前使用的每页好友数量
        ///返回一个节点allbuddynum:所有好友数量,供客户端判断是否需要翻页 (allbuddynum>pagesize时需要客户端翻页)
        ///返回一个节点buddylist,buddylist内包含多个buddy节点,每个buddy包括若干个子节点
        ///buddylist内包含多个buddy节点
        ///isdetalil 为ture时,返回
        ///uid: 好友用户id
        ///name: 好友用户名
        ///icon: 好友头像地址
        ///smallicon: 被查询用户的小头像url(48*48像素),包括"http://url"头
        ///isdefaulticon: 被查询用户的头像是否是默认头像(即用户没有设置头像),0,非默认头像;1,默认头像;-1,无法判断(未知)
        ///buddygroup: 好友组的名称,包含id属性(即好友组的id)
        ///nick:: 好友昵称
        ///sex : 性别
        ///bday: 用户生日(XXXX年-XX月-XX日)
        ///signature :签名
        ///profileurl:空间url
        ///credit: 用户在网站的积分
        ///money: 用户在网站的金钱
        ///usergroup:用户组
        ///country:地域-国家
        ///province:地域-省
        ///city:地域-城市
        ///isdetalil 为false时,返回
        ///uid、name、icon、smallicon、isdefaulticon、profileurl、buddygroup 7个子结点
        /// </summary>
        /// <returns></returns>
        private string GetBuddyList()
        {
            string sid = q("sid");
            string userid = Str2Str(q("uid"));
            string userkey = q("userkey");
            string pagesize = Str2Str(q("pageindex"));//单页最大返回好友数量,默认为255个
            string pageindex = q("pageindex") == "-1" ? "0" : Str2Str(q("pageindex"));//返回第几页的好友,在好友数量超过pagesize,用户操作好友列表翻页时(从0开始)
            bool isdetail = q("isdetail") != "false" ? true : false;
            bool _islogin = IsLogin(userid, sid, userkey, isusesitekey);
            StringBuilder _html = new StringBuilder();
            if (_islogin)
            {
                _html.Append("<sessionvalide>true</sessionvalide>");
                _html.Append("<userkeyvalide>true</userkeyvalide>");
                _html.Append("<pageindex>" + pageindex + "</pageindex>");
                _html.Append("<pagesize>" + pagesize + "</pagesize>");
                DataTable dt = new JumbotCms.SqlServerDAL.Normal_UserFriendsDAL().GetTable(userid);
                _html.Append("<allbuddynum>" + dt.Rows.Count + "</allbuddynum> ");
                _html.Append("<buddylist>");
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    string uid = dt.Rows[i]["FriendUserId"].ToString();
                    string name = dt.Rows[i]["FriendUserName"].ToString();
                    string nick = dt.Rows[i]["FriendNickName"].ToString();
                    string sex = dt.Rows[i]["FriendSex"].ToString();
                    string birthday = dt.Rows[i]["FriendBirthday"].ToString();
                    string province = dt.Rows[i]["FriendProvinceCity"].ToString().Split('-')[0];
                    string city = dt.Rows[i]["FriendProvinceCity"].ToString().Split('-')[1];
                    string homepage = dt.Rows[i]["FriendHomepage"].ToString();
                    string signature = dt.Rows[i]["FriendSignature"].ToString();
                    _html.Append("<buddy>");
                    _html.Append("<uid>").Append(uid).Append("</uid>");//好友用户id
                    _html.Append("<name>").Append(name).Append("</name>");//好友用户名
                    _html.Append("<icon>").Append(site.Url + site.Dir + "avatar/" + uid + "_l.jpg").Append("</icon>");//好友头像地址
                    _html.Append("<smallicon>").Append(site.Url + site.Dir + "avatar/" + uid + "_m.jpg").Append("</smallicon>");//被查询用户的小头像url(48*48像素)
                    _html.Append("<isdefaulticon>1</isdefaulticon>");//被查询用户的头像是否是默认头像(即用户没有设置头像),0,非默认头像;1,默认头像;-1,无法判断(未知)
                    _html.Append("<profileurl>" + homepage + "</profileurl>");
                    _html.Append("<buddygroup id=\"0\">网站好友</buddygroup>");
                    if (isdetail)
                    {
                        _html.Append("<nick>").Append(nick).Append("</nick>");//好友昵称
                        if (sex == "1")
                            _html.Append("<sex>male</sex>");//male男性|female女性|-1未知
                        else if (sex == "2")
                            _html.Append("<sex>female</sex>");//male男性|female女性|-1未知
                        else
                            _html.Append("<sex>-1</sex>");
                        _html.Append("<bday>网站会员</bday>");//用户生日(XXXX年-XX月-XX日)
                        _html.Append("<signature>" + signature + "</signature>");//签名
                        _html.Append("<credit>0</credit>");//用户在网站的积分
                        _html.Append("<money>0</money>");//用户在网站的金钱
                        _html.Append("<usergroup>网站会员</usergroup>");
                        _html.Append("<country>中国</country>");//地域-国家
                        _html.Append("<province>" + province + "</province>");//地域-省
                        _html.Append("<city>" + city + "</city>");//地域-城市
                    }
                    _html.Append("</buddy>");
                }
                _html.Append("</buddylist>");
            }
            else
            {
                _html.Append("<sessionvalide>false</sessionvalide>");
            }
            if (userid == "1") SaveVisitLog(1, 0, "~/ntalker/logs/buddylist_" + DateTime.Now.ToString("yyyyMMdd") + ".log");

            return _html.ToString();
        }
        /// <summary>
        /// 添加好友//6
        ///*输入参数
        ///query: addbuddy
        ///uid:主动发起加好友请求的用户id
        ///sid:主动发起加好友请求的用户seesionid值
        ///userkey:uid和sitekey全小写字符串拼接后再md5的值。例如:uid="001", sitekey="test001",则 userkey = md5("001test001")。
        ///(sitekey从ntalker申请获得,填写到imconfig配置文件中的sitekey字段,必须与ntalker服务器保持一致
        ///newbuddyid:被请求加好友的用户id
        ///*返回结果
        ///返回一个节点sessionvalide,值为true代表验证通过,用户登陆在论坛中,false代表验证失败
        ///(如果为false,则再返回一个节点userkeyvalide,值为true代表验证通过,用户登陆在论坛中,false代表验证失败)
        ///返回一个节点addbuddyresult,节点值:
        ///accepted: 自动接受,网站是单向好友模式或者是双向好友模式,对方设置了自动接受加好友
        ///acceptedboth: 对方已经申请加自己好友,且等待自己验证
        ///refused: 拒绝,网站是双向好友模式,对方设置了自动拒绝加好友
        ///confirming:认证中
        ///failed::添加好友失败
        ///error节点值为一描述字符串,在加好友失败(failed)情况下,描述失败原因
        /// </summary>
        /// <returns></returns>
        private string AddBuddy()
        {
            string sid = q("sid");
            string userid = Str2Str(q("uid"));
            string userkey = q("userkey");
            string newbuddyid = q("newbuddyid");//被加为好友的id
            StringBuilder _html = new StringBuilder();
            if (IsLogin(userid, sid, userkey, isusesitekey))
            {
                _html.Append("<sessionvalide>true</sessionvalide>");
                _html.Append("<userkeyvalide>true</userkeyvalide>");
                if (new JumbotCms.SqlServerDAL.Normal_UserFriendsDAL().AddFriend(userid, "", newbuddyid))
                {
                    _html.Append("<addbuddyresult>accepted</addbuddyresult>");
                }
                else
                {
                    _html.Append("<error>用户已存在于您的好友列表中</error>");
                    _html.Append("<addbuddyresult>failed</addbuddyresult>");
                }
            }
            else
            {
                _html.Append("<sessionvalide>false</sessionvalide>");
                _html.Append("<error>请先登录" + site.Name + "的" + site.UserItem + "中心。</error>");
                _html.Append("<addbuddyresult>failed</addbuddyresult>");
            }
            if (userid == "1") SaveVisitLog(1, 0, "~/ntalker/logs/addbuddy_" + DateTime.Now.ToString("yyyyMMdd") + ".log");

            return _html.ToString();
        }
        /// <summary>
        ///*功能:删除好友
        ///*输入参数
        ///query: delbuddy
        ///uid:主动发起删除好友请求的用户id
        ///sid:主动发起删除好友请求的用户seesionid值
        ///userkey:uid和sitekey全小写字符串拼接后再md5的值。例如:uid="001", sitekey="test001",则 userkey = md5("001test001")。
        ///(sitekey从ntalker申请获得,填写到imconfig配置文件中的sitekey字段,必须与ntalker服务器保持一致
        ///delbuddyid:被删除好友的用户id
        ///*返回结果
        ///返回一个节点sessionvalide,值为true代表验证通过,用户登陆在论坛中,false代表验证失败
        ///(如果为false,则再返回一个节点userkeyvalide,值为true代表验证通过,用户登陆在论坛中,false代表验证失败)
        ///返回一个节点delbuddyresult,节点值:
        ///success: 单向好友解除成功
        ///bothsuccess: 双向好友解除成功
        ///failed: 解除失败,失败原因在error节点中
        ///error节点值为一描述字符串,在解除失败(failed)情况下,描述失败原因
        /// </summary>
        /// <returns></returns>
        private string DelBuddy()
        {
            string sid = q("sid");
            string userid = Str2Str(q("uid"));
            string userkey = q("userkey");
            string delbuddyid = q("delbuddyid");//被删除的好友的id
            StringBuilder _html = new StringBuilder();
            if (IsLogin(userid, sid, userkey, isusesitekey))
            {
                _html.Append("<sessionvalide>true</sessionvalide>");
                _html.Append("<userkeyvalide>true</userkeyvalide>");
                if (new JumbotCms.SqlServerDAL.Normal_UserFriendsDAL().DeleteByFriendID(userid, "", delbuddyid))
                {
                    _html.Append("<delbuddyresult>success</delbuddyresult>");//success: 单向好友解除成功;bothsuccess: 双向好友解除成功
                }
                else
                {
                    _html.Append("<error>您的好友列表中没有该用户</error>");
                    _html.Append("<delbuddyresult>failed</delbuddyresult>");//解除失败
                }
            }
            else
            {
                _html.Append("<sessionvalide>false</sessionvalide>");
                _html.Append("<userkeyvalide>false</userkeyvalide>");
                _html.Append("<error>请先登录" + site.Name + "的" + site.UserItem + "中心。</error>");
                _html.Append("<delbuddyresult>failed</delbuddyresult>");
            }
            if (userid == "1") SaveVisitLog(1, 0, "~/ntalker/logs/delbuddy_" + DateTime.Now.ToString("yyyyMMdd") + ".log");

            return _html.ToString();
        }
        /// <summary>
        /// 验证是否登录
        /// </summary>
        /// <param name="_userid"></param>
        /// <param name="_sid"></param>
        /// <param name="_userkey"></param>
        /// <param name="_isusesitekey"></param>
        /// <returns></returns>
        private bool IsLogin(string _userid, string _sid, string _userkey, bool _isusesitekey)
        {
            if (_userid == "0")
                return false;
            if (_isusesitekey && GetHash32(_userid + sitekey) != _userkey)//sitekey验证
                return false;
            return true;
        }
    }
}

[责任编辑:jumbot]

[发表评论] [收藏本页]