个人网站与动网整合步骤(支持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 ' -----------------------------------------------------------------
 4 Dim  DvApi_Obj,DvApi_SaveCookie,SysKey
 5 If  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
24 End   If
25 ' -----------------------------------------------------------------

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

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

 1 < %
 2 If  Request.QueryString <> ""   Then
 3      ' 处理登录和注销请求,参数以调用外部JS的方式发送(A)
 4 Else
 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
31 End   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

转载于:https://www.cnblogs.com/dnawo/archive/2007/12/27/1016244.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值