第三方程序完美整合phpwind8的UC用户中心-教程加P8

来源:互联网 发布:先帝知臣谨慎的谨慎 编辑:程序博客网 时间:2024/05/09 02:44
不管phpwind未来路如何走我们都会永远支持!!本教程分析 phpwind的UC用户中心如何整合,和提供从P8分离后的完整P8UC整合接口包。

P8UC作用:
P8的UC与其它程序的UC通信原理基本相同,主要为方便整合用户和站内同步信息,如:
同步登录、同步注册、同步积分等等。

简介
因phpwind官方一直未出教程和开发文档,很多人不知道phpwind是否有UC的存在,是否能用怎么使用。
答案是PHPwind 的UC是有的本人自行研究把研究成果与大家分享。
为了大家方便二次开发整合P8UC而由 edoog威客 制作此教程,edoog成为phpwind史上第一个整合P8UC的程序。
edoog从phpwind原程序中分离的P8UC独立UC接口包本章教程的后面供大家下载研究。
注:此教程和P8UC整合独立接口包可以通用,如与 dede 程序、PHP168程序等整合。

这里有人要问了,phpwind之前程序也不是可以整合通行整吗,为什么还用UC?请看以下前沿

前沿
早在phpwind7.5中已内置有自己的UC,功能未实现这些暂不清楚直到P8后估计是比较成熟,UC的出现淘汰早期的通行证,通行证在整合上只是单向整合同步,意味着在第三方注册只能去论坛注册页面进行注册或相反。注册成功后通过地址跳转反回原点击页面,看起来很累效果不好。UC的出现使注册、登录等得到双向同步,用户在第三方程序页面注册、登录即可,注册登录后第三方程序通知UC,UC再通知其它第三方程序形成双向同步,而用户不需要在主站和第三方网站中跳来跳去。

疑问
是否可以用 UCenter 代替?
phpwind8有自己的UC,人个认为没必要整另一个UC。最近在此版块看到有人发布整合P8的 UCenter ,还称 P8下的
uc_client文件夹没用删除,无语啊。。。 今天我就让此 uc_client 文件夹发挥作用。

P8UC与UCenter主要功能对比
如图:





P8UC通信原理
把P8论坛为主站就是服务端,其它第三方程序设为客户端,
只有了解原理才好下手开发,以下流程图让大家更深层次了解P8UC通信过程。




分析通信文件与文件夹
假设其它第三方程序为客户端
这是关键的一步,要把混在P8内的通信接口文件分离出来,这样其它程序才可以方便整合使用。
此次分离和整理出 pw_api.php 文件、pw_client文件夹(是uc_client文件夹,作客户端可能跟其它UC重名,所以改名了)、/api/pw_api 文件夹.

经分析P8通信是以 /pw_api.php 文件为切入口,好我们就先从 /pw_api.php 下手。
其中 /pw_client 文件夹是   客户端通知服务端程序
其中 /api/pw_api  文件夹是 服务端通知客户端程序

以上分析和分离完成客户端独立接口文件,简单吧!


实战修改UC接口程序整合
上面我们分离好文件后,现在进行整合程序修改,有经验老鸟估计用半个钟可以完成 dede 的P8 UC整合包开发。
同步整合项目很多,我只选同步注册、同步登录作为参考修改例子,其它同步项目修改方法一致。
以下为PHPwind8设为服务端与edoog威客客户端的修改讲解,修改与其它dede 、PHP168程序通用。
1.通信接入pw_api.php  

首先进行 /pw_api.php  文件的改造,pw_api.php  文件里引用的网站和数据库信息都是P8的,我们去掉这些信息换成
自己要整合的程序配置与数据库链接信息。修改后如下:

注意以下讲解需要PHP知识才能看懂

复制代码
  1. <?php
  2. error_reporting(0);
  3. define('P_W','admincp');

  4. include('./common.php');

  5. define('R_P',S_DIR.'/');
  6. define('D_P',R_P);

  7. require_once(S_DIR.'/api/pw_api/security.php');

  8. require_once(S_DIR.'/api/pw_api/pw_common.php');

  9. require_once(S_DIR.'/api/pw_api/class_base.php');

  10. $api = new api_client();

  11. $response = $api->run($_POST + $_GET);

  12. if ($response) {
  13.     echo $api->dataFormat($response);
  14. }

  15. ?>

其中
复制代码
  1. include('./common.php');

上这句是edoog的网站配置数据信息载入,其它程序换它的网站配置数据信息载入

其中
复制代码
  1. define('R_P',S_DIR.'/');

以上句中的 S_DIR 是edoog网站路径,其它程序换它的网站路径变量。
哈哈以上完成UC通信接入


2.同步注册-客户端通知服务端  
此项是在客户端注册时如dede注册时,载入P8客户端类并配置数据库链接,前期测试可以直接写入数据库等配置信息。
其中一些配置信息如 KEY 等后面有应用详解。


2.0 载入客户端代码
复制代码

  1. define('P_W','admincp');

  2. require_once(S_DIR.'/api/pw_api/security.php');

  3. require_once(S_DIR.'/api/pw_api/pw_common.php');

  4. //应用的P8UC配置信息
  5. define('UC_DBHOST', 'localhost'); // P8论坛 数据库主机
  6. define('UC_DBUSER','root'); // P8论坛 数据库用户名
  7. define('UC_DBPW', 'root'); // P8论坛 数据库密码
  8. define('UC_DBNAME', 'phpwind'); // P8论坛 数据库名称
  9. define('UC_DBCHARSET','gbk'); // P8论坛 数据库字符集
  10. define('UC_DBTABLEPRE', 'pw_'); // P8论坛 数据库表前缀
  11. define('UC_DBCONNECT', '0'); // P8论坛 数据库持久连接 0=关闭, 1=打开
  12. define('UC_KEY', 'df5gd8g7sdf54sd8'); // 与 P8论坛 的通信密钥, 要与 P8论坛应用 保持一致
  13. define('UC_API', 'http://localhost/pw'); // P8论坛 的 URL 地址, 在调用头像时依赖此常量
  14. define('UC_CHARSET', 'gbk'); // P8论坛 的字符集
  15. define('UC_IP', '127.0.0.1'); // P8论坛 的 IP
  16. define('UC_APPID', '2'); // 当前应用的 ID

  17. @include_once(S_DIR.'/pw_client/uc_client.php');


以上代码是跟服务端链接和配置,在实际应用中可以单独写到整合里进行二次引用。

配置好后将它载入到实际注册程序的代码中进行判断。

2.1  下面程序检测UC是否已注册用户名


打开 /pw_client/uc_client.php  文件你会发现有很多同步应用项目接口

其中
复制代码
  1. function uc_check_username($username) {
  2.     $args = func_get_args();
  3.     return uc_data_request('user', 'checkName', $args);
  4. }


这是我加的函数用于检测用户是否存在

假设注册信息
用户名  测试用户
密码    123456
邮箱    123456@abc.com

使用方法

复制代码
  1.            $checkuser =uc_check_username('测试用户');
  2.            if($checkuser==1){
  3.                return 1;
  4.            }elseif($checkuser==-1){
  5.                return -1;
  6.            }else{
  7.                return -3;
  8.            }


返回1说明可以注册否则暂用或其它。

2.2  UC注册用户

注册用户UC客户端内置有了
使用方法
复制代码
  1. uc_user_register('测试用户',md5(123456),'123456@abc.com');


注意:同步注册密码要 md5  

恭喜你已完成同步注册。


3.同步登录
您在上节已知道同步注册修改使用了,接下来我们修改同步登录。
同步登录分有
1.客户端通知服务端
2.服务端通知客户端

这两个修改,同步登录是最简单的修改之一

3.1 同步登录-客户端通知服务端

同样是客户端通知服务端修改,都要在客户端程序中截入前节 2.0 载入客户端代码 ,才能使用UC客户端函数
假设登录信息
用户ID  2
密码   123456

复制代码
  1. $user_login=uc_user_login(2,md5(123456),1);
  2. return $user_login['synlogin'];


以上代码 2 是用户ID ,密码也是要 md5,后面的 1是指 使用UID通信,可以参考 phpwind官方在旁边的注解。
当登录后会返回数组 $user_login['synlogin']  关键生效要把这组 在页面里输出。不把$user_login['synlogin']  输出无法同步登录。

同步登录-客户端通知服务端修改已完成,现在客户端已通知了服务端,其它程序也同步登录了


3.2 同步登录-服务端通知客户端
前面介绍的都是 第三方客户端程序通知服务端,下面讲解 服务端如何通知第三方客户端的。
假设登录信息
用户ID  2
密码   123456
已在服务端 P8论坛登录,服务端会通知到 客户端的服务程序类里,这块指 /api/pw_api 文件夹
其中P8会通知到
\api\pw_api\class_User.php 文件,文件里的 function synlogin($user)  函数是同步通知登录,是不是跟UCenter 很像呀

好我们在 synlogin 函数中加入 我们的登录代码,如加入 edoog威客登录代码

复制代码
  1.     function synlogin($user) {
  2.         global $timestamp,$uc_key;
  3.         list($winduid, $windid, $windpwd) = explode("\t", $this->base->strcode($user, false));
  4.         
  5.         header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
  6.             
  7.         include_once S_DIR.'/class/class.user_login.php';

  8.         $member=getmember($winduid);
  9.         if($member){
  10.              $windid=$member->username;
  11.         }

  12.         $Suserlogin=new UserLogin($windid,'',3600*24);
  13.         $Suserlogin->setcookies();

  14.     }


其中
复制代码
  1.      include_once S_DIR.'/class/class.user_login.php';

  2.         $member=getmember($winduid);
  3.         if($member){
  4.              $windid=$member->username;
  5.         }

  6.         $Suserlogin=new UserLogin($windid,'',3600*24);
  7.         $Suserlogin->setcookies();

这是edoog威客代码部分,可以换成 dede 的登录代码。


同步登录-服务端通知客户端完成简单吧~

更简单的是同步退出登录
这项也分有
1.客户端通知服务端
2.服务端通知客户端

照以上方法一样修改即可.

程序的修改已讲解完,初学者可能很难了解,建议去看 UCenter 的开发手册原理一样。然后套用我提供的客户端程序即可。


实战操作整合UC应用
上节讲的是修改程序整合,但双方程序没有设置开启同步应用所以还未成功,
接下来我讲解最后的部分设置整合UC应用。
后台教程以edoog威客整合为例,之前都是代码是不是头大了,后全图欣赏让大家学习更轻松。

phpwind8后台整合设置


phpwind8后台添加应用


phpwind8后台积分同步


edoog后台整合设置




友情提示:
1. PHPwind8 UC 的服务端就是 PHPwind8 它本身,服务端没有独立的程序,只有客户端我分离的独立程序。请大家不要理解错了。

2.在开发测试客户端程序时发现一个服务端BUG,服务端积分同步通知 BUG ,服务端不会发出积分同步通知,客户端正常不清楚目前的P8版本修正没。

3.本人提供的P8 UC客户端下载,是第三方客户端程序专用。

4.使用技巧 由于大部分程序都使用 UCenter,在整合P8 UC时,只需要在 他们程序里 加个判断这样能保留之前的 UCenter 整合又可以加入 P8 UC 整合,整合代码直接照搬 UCenter 客户端里的程序,一下很快搞定P8 UC整合 爽不!


以下P8 UC客户端程序edoog 已改进增强,使用方法下载后解压放到其它程序根目录下,如 dede 、php168 等程序根目录下,然后按我的教程修改调试很简单方便,祝大家整合愉快!。

P8 UC客户端GBK下载
  PHPwind8 UC_client_GBK.zip (28 K) 下载次数:232 

P8 UC客户端UTF8下载

  PHPwind8 UC_client_UTF8.zip (28 K) 下载次数:103



官方原文:http://www.phpwind.net/read-htm-tid-1082159.html
用户中心说明手册:http://www.phpwind.net/read-htm-tid-905070.html
原创粉丝点击