文章出处:http://blog.yation.com/webpro/uc_api_debug/
前几天发了一个UTF8版的UC接口应用开发整合包(点这里查阅),包中没有修改官方的代码,只是拿官方提供的示例做了一下编码转换。可是官方提供的开发包示例不能直接使用,感觉api.php文件是直接从DISUCZ中复制出来的,直接放上去都无法正常通信,我这里整理下整个修正过程,以及打包一个可以正常双向通信的示例出来。
首先做准备工作:1、下载UC最新版(下载页面自己选择相应编码);2、下载UC接口开发包(UC及应用为GBK编码请下载官方提供的包,UTF8版下载我转换好的包);3、下载Discuz(下载页面自己选择相应编码,或其他官方应用用于测试同步)。下载好个程序后开始安装,先安装UC,再安装Discuz(如何安装可以到官方论坛查阅相关资料,这里不赘述)。
UC和Discuz安装好后到UC管理中查看应用,Discuz应该显示通信成功了,到这里我们可以添加示例应用了,(GBK版本用户解压developguide.zip文件后把client文件夹重命名为uc_client并简介到examples文件夹下)把examples文件夹放到网站根目录下。到UC用户中心后台使用自定义安装方式添加examples应用,如下图:
按照上图自定义安装“测试应用”并开始同步登录,提交后在测试应用详细页面底部可以看到生成了应用接口配置数据,把它复制出来。
编辑examples/config.inc.php文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// 把添加应用生成的 配置代码粘贴到这里,删除原有的同名项目 define('UC_CONNECT', 'mysql'); define('UC_DBHOST', 'localhost'); define('UC_DBUSER', 'root'); define('UC_DBPW', 'mysql'); define('UC_DBNAME', 'ucenter'); define('UC_DBCHARSET', 'utf8'); define('UC_DBTABLEPRE', '`ucenter`.uc_'); define('UC_DBCONNECT', '0'); define('UC_KEY', '1b9bKBqYJxQzw10JEB41CtF71KM'); define('UC_API', 'http://localhost/ucenter'); define('UC_CHARSET', 'utf-8'); define('UC_IP', '127.0.0.1'); //生成的配置项中此项为空,为了方便通信建议写上UC所在服务器IP define('UC_APPID', '2'); define('UC_PPP', '20'); //应用生成配置项 结束 /* 以下是应用本身的数据库链接配置 先全部注释掉 //ucexample_2.php 用到的应用程序数据库连接参数 $dbhost = 'localhost'; // 数据库服务器 $dbuser = 'root'; // 数据库用户名 $dbpw = ''; // 数据库密码 $dbname = 'ucenter'; // 数据库名 $pconnect = 0; // 数据库持久连接 0=关闭, 1=打开 $tablepre = 'example_'; // 表名前缀, 同一数据库安装多个论坛请修改此处 $dbcharset = 'gbk'; // MySQL 字符集, 可选 'gbk', 'big5', 'utf8', 'latin1', 留空为按照论坛字符集设定 */ //同步登录 Cookie 设置 $cookiedomain = ''; // cookie 作用域 $cookiepath = '/'; // cookie 作用路径 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// 把添加应用生成的 配置代码粘贴到这里,删除原有的同名项目 define('UC_CONNECT', 'mysql'); define('UC_DBHOST', 'localhost'); define('UC_DBUSER', 'root'); define('UC_DBPW', 'mysql'); define('UC_DBNAME', 'ucenter'); define('UC_DBCHARSET', 'utf8'); define('UC_DBTABLEPRE', '`ucenter`.uc_'); define('UC_DBCONNECT', '0'); define('UC_KEY', '1b9bKBqYJxQzw10JEB41CtF71KM'); define('UC_API', 'http://localhost/ucenter'); define('UC_CHARSET', 'utf-8'); define('UC_IP', '127.0.0.1'); //生成的配置项中此项为空,为了方便通信建议写上UC所在服务器IP define('UC_APPID', '2'); define('UC_PPP', '20'); //应用生成配置项 结束 /* 以下是应用本身的数据库链接配置 先全部注释掉 //ucexample_2.php 用到的应用程序数据库连接参数 $dbhost = 'localhost'; // 数据库服务器 $dbuser = 'root'; // 数据库用户名 $dbpw = ''; // 数据库密码 $dbname = 'ucenter'; // 数据库名 $pconnect = 0; // 数据库持久连接 0=关闭, 1=打开 $tablepre = 'example_'; // 表名前缀, 同一数据库安装多个论坛请修改此处 $dbcharset = 'gbk'; // MySQL 字符集, 可选 'gbk', 'big5', 'utf8', 'latin1', 留空为按照论坛字符集设定 */ //同步登录 Cookie 设置 $cookiedomain = ''; // cookie 作用域 $cookiepath = '/'; // cookie 作用路径 |
原理上做到这里应该就可以正常通信了,但是我们到用户中心中查看应用列表发现测试应用仍然无法通信如下图:
官方提供的示例中存在几处错误(疑代码是直接从Discuz中复制出来的没有修正)导致示例配置好后却依然无法通信。没关系,修按照下面的步骤修正基础即可:
1、(examples/api/uc.php)第27行左右DISCUZ_ROOT宏定义修改为:
define('DISCUZ_ROOT', substr(dirname(__FILE__),0,-3));
2、(examples/api/uc.php)注释掉59-63行:
//require_once DISCUZ_ROOT.'./include/db_mysql.class.php'; //$GLOBALS['db'] = new dbstuff; //$GLOBALS['db']->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, true, $dbcharset); //$GLOBALS['tablepre'] = $tablepre; //unset($dbhost, $dbuser, $dbpw, $dbname, $pconnect); $uc_note = new uc_note(); exit($uc_note->$get['action']($get, $post));
修改以上两步之后应该就可以通信成功了,如果还是无法通信的话注意检查上面全部的步骤哦。
通信成功后我们可以试着访问examples/ucexample_1.php 用Discuz安装时候的账户登录下看看哦。如若出现乱码请选择下浏览器端编码为程序的编码,如下图。
乱码的修改下浏览器端编码 或在文件中输出UTF8 header
用Discuz账户登录成功查看源代码如下图:
这时候访问下Discuz发现admin账户已经是登录状态了,同时在Discuz中退出和登录操作examples中都能同步。到这里双向同步已经实现,童鞋们可以根据示例代码修改自己的应用做整合了。有任何疑问都可以在这里留言,共同探讨。
下载:实现双向通信UTF8示例(.68M)