1.什么是Discuz!NTAPI?á›�fEÖnnt.discuz.netJëèÐ2ª2Discuz!NTAPI是Discuz!NT发布的REST式webservice,支持任何web技术系统和Discuz!NT进行跨域的整合。利用API可以在整合程序中调用用户资料,版块,帖子等内容,来开发跟论坛高度整合的应用程序。á›�fEÖnnt.discuz.netJëèÐ2ª2á›�fEÖnnt.discuz.netJëèÐ2ª2á›�fEÖnnt.discuz.netJëèÐ2ª2á›�fEÖnnt.discuz.netJëèÐ2ª2如图所示,Discuz!NTServer是运行着Discuz!NT的服务器。而AppServer则是运行着App(应用程序)的客户端。á›�fEÖnnt.discuz.netJëèÐ2ª2á›�fEÖnnt.discuz.netJëèÐ2ª2当用户访问某个App时,Discuz!NTServer会发送一些必要的参数给AppServer,以供App确认当前访问App的用户来自于合法的Discuz!NTServer站点。á›�fEÖnnt.discuz.netJëèÐ2ª2在App运行时,如果需要从服务器端获取信息(例如判断当前登录用户的id),首先要向服务器端发送一个请求;服务器端接收到请求后,判断该请求是否合法(是否是由经过授权的App发送的,参数是否正确并完整等等)。如果请求合法,则服务器端调用对应的方法,并将执行结果返回给客户端。á›�fEÖnnt.discuz.netJëèÐ2ª2á›�fEÖnnt.discuz.netJëèÐ2ª2Discuz!NTAPI返回信息有XML和JSON两种á›�fEÖnnt.discuz.netJëèÐ2ª2XML返回示例:á›�fEÖnnt.discuz.netJëèÐ2ª2?xmlversion=1.0encoding=utf-8?á›�fEÖnnt.discuz.netJëèÐ2ª2users_getInfo_responsexmlns:xsi=:xsd==truexmlns=á›�fEÖnnt.discuz.netJëèÐ2ª2userá›�fEÖnnt.discuz.netJëèÐ2ª2user_nameadmin/user_nameá›�fEÖnnt.discuz.netJëèÐ2ª2nick_name测试管理员/nick_nameá›�fEÖnnt.discuz.netJëèÐ2ª2/userá›�fEÖnnt.discuz.netJëèÐ2ª2/users_getInfo_responseá›�fEÖnnt.discuz.netJëèÐ2ª2JSON返回实例:á›�fEÖnnt.discuz.netJëèÐ2ª2[{user_name:admin,nick_name:测试管理员}]á›�fEÖnnt.discuz.netJëèÐ2ª2á›�fEÖnnt.discuz.netJëèÐ2ª2á›�fEÖnnt.discuz.netJëèÐ2ª22.我们要先做什么样的部署才可以使用它?á›�fEÖnnt.discuz.netJëèÐ2ª2因为使用一个Discuz!NT站点的API是需要Discuz!NT站点进行身份验证的,为了站点的信息安全,我们必须先在Discuz!NT站点的后台--扩展--通行证设置中去添加整合程序设置,添加后站点将生成APIKEY和secret_key供整合程序使用。á›�fEÖnnt.discuz.netJëèÐ2ª2á›�fEÖnnt.discuz.netJëèÐ2ª23.Sessionkey是如何获取到的,以及Sessionkey和AuthToken的关系。á›�fEÖnnt.discuz.netJëèÐ2ª2因为之前有很多网友对这个环节有很多的疑问,所以这次先解释这个问题。á›�fEÖnnt.discuz.netJëèÐ2ª2虽然有些API调用并不需要整合程序提供正确的Sessionkey,但是涉及到了用户密码修改等涉及信息安全系数较高的操作,系统会要求整合程序提供Sessionkey。á›�fEÖnnt.discuz.netJëèÐ2ª2在官方提供的API方法中,auth.getSession方法是返回Sessionkey的,但是这里就需要用户在使用它时提供AuthToken,AuthToken是通过请求http://你的论坛地址/login.aspx?api_key=整合程序的API_KEY获得的,如果当前状态为用户已登录,则会通过Callback(此信息在添加整合程序中需要填写,为返回信息给整合程序的某个页面)里面的地址返回AuthToken,否则则需要登录,登录后同样会返回AuthToken。á›�fEÖnnt.discuz.netJëèÐ2ª2所以说正确获取Sessionkey的步骤为:登录--获取AuthToken--调用auth.getSession--获取Sessionkeyá›�f–EÖnnt.discuz.netJëèÐ2ª2想知道更多关于API的使用,请点击á›�fEÖnnt.discuz.netJëèÐ2ª2á›�fEÖnnt.discuz.netJëèÐ2ª24.一个API的调用示例。á›�fEÖnnt.discuz.netJëèÐ2ª2?á›�fEÖnnt.discuz.netJëèÐ2ª2sig=d5f3507f828c1c6c101c82d777861311&api_key=81e86044e429674c229187005ae66e46á›�fEÖnnt.discuz.netJëèÐ2ª2&fields=user_name,nick_name&method=users.getInfo&uids=1á›�fEÖnnt.discuz.netJëèЖ2ª2这个环节要注意的是sig的生成。á›�fEÖnnt.discuz.netJëèЖ2ª2sig是由以下字串经由MD5加密后生成á›�fEÖnnt.discuz.netJëèÐ2ª2api_key=81e86044e429674c229187005ae66e46fields=user_name,nick_namemethod=users.getInfouids=á›�fEÖnnt.discuz.netJëèÐ2ª21f974283986424571dc6a67f83fd0c3faá›�fEÖnnt.discuz.netJëèÐ2ª2该字串生成规则为,key1=value1key2=value2key3=value3secret_key,并且参数名需按首字母顺序排列,大家可以仔细看下上面的字串á›�fEÖnnt.discuz.netJëèÐ2ª2使用Discuztoolkit整合的同志们注意了,如果有使用toolkit出现xml(x,x)错误,不能正常返回数据的。请检查设置的dnt论坛地址á›�fEÖnnt.discuz.netJëèÐ2ª2比如将dnt论坛地址设置是不对的。á›�fEÖnnt.discuz.netJëèЖ2ª2正确的dnt论坛地址是应该设置为后面有一道斜杠á›�