UCenter应用程序开发简单实例(双向同步),php与UCenter对接
2014-01-09 20:42
711 查看
应用的主 URL:http://127.0.0.1/hf_Plugin_test
通信密钥:hf_ucenter_201210
应用接口文件名称:uc.php
在网站根目录新建一个文件夹hf_plugin然后在里面建立
config.inc.php
<?php //define('UC_CONNECT', 'mysql'); // 连接 UCenter 的方式: mysql/NULL, 默认为空时为 fscoketopen() // mysql 是直接连接的数据库, 为了效率, 建议采用 mysql //数据库相关 (mysql 连接时, 并且没有设置 UC_DBLINK 时, 需要配置以下变量) define('UC_DBHOST', 'localhost'); // UCenter 数据库主机 define('UC_DBUSER', 'root'); // UCenter 数据库用户名 define('UC_DBPW', ''); // UCenter 数据库密码 define('UC_DBNAME', 'ultrax_Plugin_'); // UCenter 数据库名称 define('UC_DBCHARSET', 'utf8'); // UCenter 数据库字符集 define('UC_DBTABLEPRE','`ultrax_Plugin_`.Plugin_ucenter_'); // UCenter 数据库表前缀 //define('UC_DBCONNECT', 0); //通信相关 define('UC_KEY', 'hf_ucenter_201210'); // 与 UCenter 的通信密钥, 要与 UCenter 保持一致 define('UC_API', 'http://127.0.0.1/hf_Plugin_test/uc_server'); // UCenter 的 URL 地址, 在调用头像时依赖此常量 define('UC_CHARSET', 'utf8'); // UCenter 的字符集 define('UC_IP', '');// UCenter 的 IP, 当 UC_CONNECT 为非 mysql 方式时, 并且当前应用服务器解析域名有问题时, 请设置此值 define('UC_APPID', 2); define('UC_PPP', 20); //同步登录 Cookie 设置 //$cookiedomain = ''; // cookie 作用域 //$cookiepath = '/'; // cookie 作用路径 ?>
新建文件夹
api,在
api中新建一个
uc.php
<?php include("../config.inc.php"); define('UC_CLIENT_ROOT', dirname(__FILE__).'/../uc_client'); /* 以下配置无需修改 */ define('UC_VERSION', '1.0.0'); //UCenter 版本标识 define('API_DELETEUSER', 1); //用户删除 API 接口开关 define('API_RENAMEUSER', 1); //note 用户改名 API 接口开关 define('API_GETTAG', 1); //获取标签 API 接口开关 define('API_SYNLOGIN', 1); //同步登录 API 接口开关 define('API_SYNLOGOUT', 1); //同步登出 API 接口开关 define('API_UPDATEPW', 1); //更改用户密码 开关 define('API_UPDATEBADWORDS', 1); //更新关键字列表 开关 define('API_UPDATEHOSTS', 1); //更新域名解析缓存 开关 define('API_UPDATEAPPS', 1); //更新应用列表 开关 define('API_UPDATECLIENT', 1); //更新客户端缓存 开关 define('API_UPDATECREDIT', 1); //更新用户积分 开关 define('API_GETCREDITSETTINGS', 1); //向 UCenter 提供积分设置 开关 define('API_UPDATECREDITSETTINGS', 1); //更新应用积分设置 开关 define('API_RETURN_SUCCEED', '1'); define('API_RETURN_FAILED', '-1'); define('API_RETURN_FORBIDDEN', '-2'); error_reporting(0); //不显示错误 @set_magic_quotes_runtime(0); //不转义' defined('MAGIC_QUOTES_GPC') || define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc()); $code = $_GET['code']; parse_str(authcode($code, 'DECODE', UC_KEY), $get); if(time() - $get['time'] > 3600) { exit('Authracation has expiried'); } if(empty($get)) { exit('Invalid Request'); } $action = $get['action']; $timestamp = time(); //------------------------------ //通信测试 //------------------------------ if($action == 'test') { exit(API_RETURN_SUCCEED); } //------------------------------ //解密函数 //------------------------------ function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { $ckey_length = 4; $key = md5($key ? $key : UC_KEY); $keya = md5(substr($key, 0, 16)); $keyb = md5(substr($key, 16, 16)); $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey); $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; $string_length = strlen($string); $result = ''; $box = range(0, 255); $rndkey = array(); for($i = 0; $i <= 255; $i++) { $rndkey[$i] = ord($cryptkey[$i % $key_length]); } for($j = $i = 0; $i < 256; $i++) { $j = ($j + $box[$i] + $rndkey[$i]) % 256; $tmp = $box[$i]; $box[$i] = $box[$j]; $box[$j] = $tmp; } for($a = $j = $i = 0; $i < $string_length; $i++) { $a = ($a + 1) % 256; $j = ($j + $box[$a]) % 256; $tmp = $box[$a]; $box[$a] = $box[$j]; $box[$j] = $tmp; $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); } if($operation == 'DECODE') { if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) { return substr($result, 26); } else { return ''; } } else { return $keyc.str_replace('=', '', base64_encode($result)); } } ?>
目录结构
相关文章推荐
- PHP开发Windows桌面应用程序实例
- IOS开发之小实例--创建一个简单的用于视频录制和回放的应用程序
- PHP开发Windows桌面应用程序实例
- Android+PHP+MYSQL开发简单实例
- PHP对接微信公众平台消息接口开发流程详解及实例(一)
- php接口开发简单实例
- Android+PHP+MySQL开发简单实例
- IOS开发之小实例--使用UIImagePickerController创建一个简单的相机应用程序
- JQuery插件开发简单实例
- 用HTML/JS/PHP方式实现页面延时跳转的简单实例
- AJAX技术在PHP开发中的简单应用
- 【Qt5开发及实例】12、实现一个简单的文本编辑器1
- PHP (20140523)PHP实现MVC开发: 一个简单的MVC
- 为什么php开发网站比javaweb简单很多很多,javaweb却还占有很大市场? - 请在web发展历史中找答案
- PHP中的traits简单使用实例
- (PHP+HTML+JavaScript+Css)一个简单爬虫的开发
- 手把手教您用winbinder来开发php的桌面应用程序[连载一:安装配置篇]
- ATL开发COM的简单实例
- php 使用curl模拟登录人人(校内)网的简单实例
- PHP开发多任务应用程序