个人网站与动网整合步骤(支持PDO1.0)

自从发布了"个人网站与动网整合非官方方法"后,经常有网友来咨询动网整合的相关事情,我也常常建议大家好好去看下"PDO通行接口开发人员参考规范1.0",因为一旦你知道了怎么去使用它,就会发现其实整合并不是一件困难的事情,并且比我的非官方方法有更大的灵活性,毕竟去改动网数据库表总不是非常的完美。

一、数据同步原理

假设A、B两个系统要实现会员数据同步,同步过程是这样的:当A系统要注册(登录/注销/资料修改/删除用户)时,就发一条消息告诉B系统说,我要注册(登录/注销/资料修改/删除用户)了,B系统收到消息后在其系统内进行注册(登录/注销/资料修改/删除用户),完成后返回一条消息告诉A系统执行的结果(成功/失败),如果成功,A系统继续在其系统内进行注册(登录/注销/资料修改/删除用户)操作,如果失败则中止本次操作,反之亦然。

1.数据格式

现在我们引进两个词语:请求和响应,对于上述过程中发出消息我们称它为请求,返回消息我们称它为响应。对于请求和响应的数据格式,PDO是有规定的,它应是一个构造良好的xml文档。标准的请求和响应数据格式如下:

1<?xml version="1.0" encoding="gb2312"?>
2<root>
3<appid>程序标识</appid>
4<action>请求类型(用户名检测/注册/登录/注销/资料修改/删除用户)</action>
5<syskey>安全码</syskey>
6<username>用户名</username>
7<可选元素列表 />
8</root>

 1<?xml version="1.0" encoding="gb2312"?>
 2<root>
 3<appid>程序标识</appid>
 4<status>请求结果</status>
 5<needcookie>是否需要写cookie</needcookie>
 6<body>
 7    <message>操作不成功时的错误说明</message>
 8<可选元素列表 />
 9 </body>
10</root>

在请求的XML文档中有些节点是必需的,有些节点是可选的,必需的节点总结如下:

1.注册(reguser):appid,action,syskey,username,password,email,question,answer
2.登录(login):appid,action,syskey,username
3.注销(logout):appid,action,syskey,username
4.资料修改(update):appid,action,syskey,username
5.删除用户(delete):appid,action,syskey,username
6.注册时检测用户名是否可用(checkname):appid,action,syskey,username

在响应的XML文档中有三个节点是必需的:appid,status,message

2.数据如何传递?

对于请求,将使用XMLHttpRequest对象的Send方法以post方式发送,然后再从XMLHttpRequest对象的responseXML属性中获取响应数据。

3.接口安全码

接口安全码(syskey节点)是用来检验程序间传输的数据来源合法性的依据,它的值是由username节点的值和各程序接口配置文件中用户定义的密钥连接起来,再进行16位MD5加密得出一个定长32字节的字符串。

二、动网实现PDO1.0

从第一节的原理中我们可以知道,要支持数据同步,那么每个系统中都必须有请求和响应的程序,这样才能向其他系统发出请求和响应其他系统发出的请求。

对于请求,动网中包含有一个类DvApi,它位于dv_dpo"Cls_DvApi.asp,在各种请求中都使用该类生成请求的XML文档并发送和获取响应值,下边是修改资料的请求:

 1'-----------------------------------------------------------------
 2'系统整合:更新资料(update)
 3'-----------------------------------------------------------------
 4Dim DvApi_Obj,DvApi_SaveCookie,SysKey
 5If DvApi_Enable Then
 6    Set DvApi_Obj = New DvApi
 7        DvApi_Obj.NodeValue "syskey",SysKey,0,False
 8        DvApi_Obj.NodeValue "action","update",0,False
 9        DvApi_Obj.NodeValue "username",txtUserName,1,False
10        Md5OLD = 1
11        SysKey = Md5(DvApi_Obj.XmlNode("username")&DvApi_SysKey,16)
12        Md5OLD = 0
13        DvApi_Obj.NodeValue "syskey",SysKey,0,False
14        DvApi_Obj.NodeValue "password",txtUserPass,1,False
15        DvApi_Obj.NodeValue "email",txtEmail,1,False
16        DvApi_Obj.NodeValue "answer",txtQuestion,1,False
17        DvApi_Obj.NodeValue "question",txtAnswer,1,False
18        DvApi_Obj.SendHttpData
19        If DvApi_Obj.Status = "1" Then
20            Response.write("<script>alert(""" &  DvApi_Obj.Message & """);history.go(-1);</script>")
21            Response.End()
22        End If
23    Set DvApi_Obj = Nothing
24End If
25'-----------------------------------------------------------------

和请求相关的文件还有:dv_dpo"api_user.xml(XML模板)和dv_dpo"Api_Config.asp(接口配置文件)。

对于所有的请求(响应)动网都集中在一个文件中进行处理:dv_dpo.asp,该文件的结构为:

 1<%
 2If Request.QueryString<>"" Then
 3    '处理登录和注销请求,参数以调用外部JS的方式发送(A)
 4Else
 5    Set XmlDoc = Server.CreateObject("msxml2.FreeThreadedDOMDocument" & MsxmlVersion)
 6    XmlDoc.ASYNC = False
 7    If Not XmlDoc.LOAD(Request) Then
 8        Status = 1
 9        Messenge = "数据非法,操作中止!"
10        appid = "未知"
11    Else
12        If CheckPost() Then
13            Select Case Act
14                Case "checkname"
15                    '处理用户名检测请求
16                Case "reguser"
17                    '处理注册请求
18                Case "login"
19                    '处理登录请求(B)
20                Case "logout"
21                    '处理注销请求(C)
22                Case "update"
23                    '处理更新请求
24                Case "delete"
25                    '处理删除用户请求
26            End Select
27        End If
28    End If
29    ReponseData()'生成响应XML文档
30    Set XmlDoc = Nothing
31End If
32%>

通常情况下B、C直接返回status=0(成功)即可,真正的登录和注销操作应在A处,之所以这样主要是由于XMLHttpRequest对象与服务器的会话方式决定的(见参考文章)。

三、准备工作和实现

1.下载动网8.0/8.1版,解压到站点bbs文件内;
8.0版下载:http://down.dvbbs.net/new_Softview/SoftView_5421.asp
8.1版下载:http://forum.dvbbs.net/download/dvbbs8.1.0_ac.exe

2.将动网dv_dpo文件夹和dv_dpo.asp文件夹复制到站点根目录中,并进行以下修改:
① Cls_DvApi.asp:
a. 修改AppID的值
b. 全部Dvbbs.iCreateObject改为Server.CreateObject
② Api_Config.asp:
a. 修改DvApi_SysKey的值,不能用默认的"API_TEST"
③ dv_dpo.asp:
a. 修改XmlDoc.documentElement.selectSingleNode("appid").text的值,一般是和Cls_DvApi.asp中的AppID相同的值。

3.参照动网修改站点注册/登录/注销/资料修改/删除用户相关文件和dv_dpo.asp文件,使其支持系统整合。下边提供一个我已经整合好的一个会员系统,代码不多,应该能看明白:点击下载

4.设置接口配置文件(Api_Config.asp)中相关文件完成整合。

注:如若是整合动网,动易,oblog三系统可用动易小李刀刀的API整合专用用户数据同步工具,下载地址:http://www.powereasy.net/Soft/PE_Plus/210.html

四、参考文章

1.PDO通行接口开发人员参考规范1.0:http://www.mzwu.com/pic/20070817/pdo.htm
2.解读动网、Oblog、动易三方制订的PDO通行接口:http://www.mzwu.com/article.asp?id=1035
3.说说serverXMLHTTP对象与服务器的会话方式:http://www.mzwu.com/article.asp?id=1039
posted @ 2007-12-27 05:40  张远强  阅读(1310)  评论(4编辑  收藏  举报