1.什么是Discuz!NT API?ûOJ<â8wnt.discuz.netèEàÛr®V
Discuz!NT API是Discuz!NT发布的REST式web service,支持任何web技术系统和Discuz!NT进行跨域的整合。利用API可以在整合程序中调用用户资料,版块,帖子等内容,来开发跟论坛高度整合的应用程序。ûOJ<â8wnt.discuz.netèEàÛr®V ûOJ<â8wnt.discuz.netèEàÛr®V

ûOJ<â8wnt.discuz.netèEàÛr®V
ûOJ<â8wnt.discuz.netèEàÛr®V如图所示,Discuz!NT Server是运行着Discuz!NT的服务器。而App Server则是运行着App(应用程序)的客户端。ûOJ<â8wnt.discuz.netèEàÛr®V
ûOJ<â8wnt.discuz.netèEàÛr®V当用户访问某个App时,Discuz!NT Server会发送一些必要的参数给AppServer,以供App确认当前访问App的用户来自于合法的Discuz!NT Server站点。ûOJ<â8wnt.discuz.netèEàÛr®V在App运行时,如果需要从服务器端获取信息(例如判断当前登录用户的id),首先要向服务器端发送一个请求;服务器端接收到请求后,判断该请求是否合法(是否是由经过授权的App发送的,参数是否正确并完整等等)。如果请求合法,则服务器端调用对应的方法,并将执行结果返回给客户端。ûOJ<â8wnt.discuz.netèEàÛr®VûOJ<â8wnt.discuz.netèEàÛr®V Discuz!NT API返回信息有XML和JSON两种ûOJ<â8wnt.discuz.netèEàÛr®V
XML返回示例:ûOJ<â8wnt.discuz.netèEàÛr®V<?xml version="1.0" encoding="utf-8"?>
ûOJ<â8wnt.discuz.netèEàÛr®V<users_getInfo_response xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="
http://www.w3.org/2001/XMLSchema" list="true" xmlns="
http://nt.discuz.net/api/">
ûOJ<â8wnt.discuz.netèEàÛr®V <user>
ûOJ<â8wnt.discuz.netèEàÛr®V <user_name>admin</user_name>
ûOJ<â8wnt.discuz.netèEàÛr®V <nick_name>测试管理员</nick_name>
ûOJ<â8wnt.discuz.netèEàÛr®V </user>
ûOJ<â8wnt.discuz.netèEàÛr®V</users_getInfo_response>
ûOJ<â8wnt.discuz.netèEàÛr®VJSON返回实例:ûOJ<â8wnt.discuz.netèEàÛr®V[{"user_name":"admin","nick_name":"测试管理员"}]
ûOJ<â8wnt.discuz.netèEàÛr®VûOJ<â8wnt.discuz.netèEàÛr®VûOJ<â8wnt.discuz.netèEàÛr®V2.我们要先做什么样的部署才可以使用它?ûOJ<â8wnt.discuz.netèEàÛr®V 因为使用一个Discuz!NT站点的API是需要Discuz!NT站点进行身份验证的,为了站点的信息安全,我们必须先在Discuz!NT站点的后台--扩展--通行证设置 中去添加整合程序设置,添加后站点将生成APIKEY和secret_key供整合程序使用。ûOJ<â8wnt.discuz.netèEàÛr®V
ûOJ<â8wnt.discuz.netèEàÛr®V3.Sessionkey是如何获取到的,以及Sessionkey和AuthToken的关系。ûOJ<â8wnt.discuz.netèEàÛr®V 因为之前有很多网友对这个环节有很多的疑问,所以这次先解释这个问题。
ûOJ<â8wnt.discuz.netèEàÛr®V 虽然有些API调用并不需要整合程序提供正确的Sessionkey,但是涉及到了用户密码修改等涉及信息安全系数较高的操作,系统会要求整合程序提供Sessionkey。
ûOJ<â8wnt.discuz.netèEàÛr®V 在官方提供的API方法中,
auth.getSession 方法是返回Sessionkey的,但是这里就需要用户在使用它时提供AuthToken,AuthToken是通过请求 http://你的论坛地址/login.aspx?api_key=整合程序的API_KEY 获得的,如果当前状态为用户已登录,则会通过Callback(此信息在添加整合程序中需要填写,为返回信息给整合程序的某个页面)里面的地址返回AuthToken,否则则需要登录,登录后同样会返回AuthToken。
ûOJ<â8wnt.discuz.netèEàÛr®V 所以说正确获取Sessionkey的步骤为:登录--获取AuthToken--调用
auth.getSession --获取Sessionkey
ûOJ<â8wnt.discuz.netèEàÛr®V想知道更多关于API的使用,请点击ûOJ<â8wnt.discuz.netèEàÛr®VûOJ<â8wnt.discuz.netèEàÛr®V4.一个API的调用示例。ûOJ<â8wnt.discuz.netèEàÛr®Vhttp://localhost/services/restserver.aspx?ûOJ<â8wnt.discuz.netèEàÛr®Vsig=d5f3507f828c1c6c101c82d777861311&api_key=81e86044e429674c229187005ae66e46
ûOJ<â8wnt.discuz.netèEàÛr®V&fields=user_name,nick_name&method=users.getInfo&uids=1
ûOJ<â8wnt.discuz.netèEàÛr®V这个环节要注意的是sig的生成。ûOJ<â8wnt.discuz.netèEàÛr®V
sig是由以下字串经由MD5加密后生成
ûOJ<â8wnt.discuz.netèEàÛr®Vapi_key=81e86044e429674c229187005ae66e46fields=user_name,nick_name
method=users.getInfouids=
ûOJ<â8wnt.discuz.netèEàÛr®V1
f974283986424571dc6a67f83fd0c3faûOJ<â8wnt.discuz.netèEàÛr®V该字串生成规则为,key1=value1key2=value2key3=value3secret_key,并且参数名需按首字母顺序排列,大家可以仔细看下上面的字串
ûOJ<â8wnt.discuz.netèEàÛr®V使用Discuztoolkit整合的同志们注意了,如果有使用toolkit出现xml(x,x)错误,不能正常返回数据的。请检查设置的dnt论坛地址
ûOJ<â8wnt.discuz.netèEàÛr®V比如将dnt论坛地址设置
http://nt.discuz.net 是不对的。
ûOJ<â8wnt.discuz.netèEàÛr®V正确的dnt论坛地址是应该设置为
http://nt.discuz.net/ 后面有一道斜杠
ûOJ<â8wnt.discuz.netèEàÛr®VûOJ<â8wnt.discuz.netèEàÛr®VûOJ<â8wnt.discuz.netèEàÛr®VûOJ<â8wnt.discuz.netèEàÛr®V想知道更多API方法,请点击ûOJ<â8wnt.discuz.netèEàÛr®V