Discuz!NT

注册

 

QQ登录

只需一步,快速开始

返回列表 12345678» / 9
发新话题 回复该主题

Discuz!NT API使用指南(更新至5月14日) [复制链接]

1#
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 ‡®žV
JSON返回实例:û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 ‡®žV
2.我们要先做什么样的部署才可以使用它?û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 ‡®žV
3.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 ‡®žV
4.一个API的调用示例。ûOJ<â8wnt.discuz.netèEàÛr ‡®žV
http://localhost/services/restserver.aspxûOJ<â8wnt.discuz.netèEàÛr ‡®žV
sig=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 ‡®žV
api_key=81e86044e429674c229187005ae66e46fields=user_name,nick_namemethod=users.getInfouids=ûOJ<â8wnt.discuz.netèEàÛr ‡®žV
1f974283986424571dc6a67f83fd0c3faû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

    已有1评分我要评分查看所有评分

    最后编辑doopcl 最后编辑于 2011-05-17 16:17:59
    本主题由 超级版主 doopcl 于 2009/9/7 13:58:08 执行 delposts 操作
    分享 转发
    TOP
    2#

    sig倒底怎么生成的,给个例子。ûOJ<â8wnt.discuz.netèEàÛr ‡®žV
    TOP
    3#

    看明白了。跟支付宝的API的差不多。签名是将那一串MD5,同时是没有&符号的。ûOJ<â8wnt.discuz.netèEàÛr ‡®žV
    TOP
    4#

    希望出个 视频教程啊  已看就明白~~ûOJ<â8wnt.discuz.netèEàÛr ‡®žV
    TOP
    5#

    签证签名的时候,将传的key进行了一次排序,所以访问的时候参数的位置不能弄错了,否则会签名错误。ûOJ<â8wnt.discuz.netèEàÛr ‡®žV
    TOP
    6#

    整合时报错

    未能从程序集“Discuz.Toolkit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“Discuz.Toolkit.DiscuzSession”,因为方法“get_Util”没有实现(没有 RVA)。ûOJ<â8wnt.discuz.netèEàÛr ‡®žV
    TOP
    7#

    回复 6# lunfg 的帖子

    你能将你的情况介绍的具体一点么,使用API前期的部署有没有都做好。ûOJ<â8wnt.discuz.netèEàÛr ‡®žV
    TOP
    8#

    ûOJ<â8wnt.discuz.netèEàÛr ‡®žV
    TOP
    9#

    我用的是ASP的程序,只做了简单的用户注册登录整合 呵呵 还没用得上API              我的小站580家居社区ûOJ<â8wnt.discuz.netèEàÛr ‡®žV
    TOP
    10#

    ûOJ<â8wnt.discuz.netèEàÛr ‡®žV
    TOP
    发新话题 回复该主题
    站长