- 好友
- 分享
- 精華
- 閱讀權限
- 255
- 注冊時間
- 2017-8-17
|
馬上注冊,結交更多好友,享用更多功能,讓你輕松玩轉社區(qū)
您需要 登錄 才可以下載或查看,沒有賬號?立即注冊
×
驗證插件二次開發(fā) | 本功能由PHP+MYSQL語言開發(fā),無縫對接新秀網(wǎng)絡驗證系統(tǒng),采用獨立入口文件、類文件、第三方類文件庫進行調用開發(fā)。所有功能實現(xiàn)及控制均采用api接口操作,數(shù)據(jù)輸出形式為JSON、XML兩種常見形式,達到毫秒級數(shù)據(jù)快速交換功能。 1、插件開發(fā)是結合新秀網(wǎng)絡驗證系統(tǒng)進行的二次開發(fā),不能獨立使用; 2、插件開發(fā)遵循Discuz、新秀網(wǎng)絡驗證、PHP語言規(guī)范開發(fā); 3、插件開發(fā)適用于新秀網(wǎng)絡驗證系統(tǒng)3.5 ver1.3版本以后; 4、本功能與新秀網(wǎng)絡驗證系統(tǒng)、擴展框架系統(tǒng),代碼相互獨立,但功能同時執(zhí)行; 5、插件開發(fā)可使用Discuz內置函數(shù)、新秀網(wǎng)絡驗證內置函數(shù)、PHP函數(shù)。 | 適用環(huán)境:php版本>7.0、Mysql版本>5.5以上、Discuz版本>3.5。 | = Discuz資料庫 = Discuz插件開發(fā)文檔 = 開發(fā)交流 = BUG反饋 = QQ客服:3188639 QQ交流群:281079920 |
驗證插件二次開發(fā)示例 | 1、ip地址查詢 /*用于查詢ip地址接口!*/ |
使 用 簡 介 | 1、插件開發(fā)演示文件下載(IP地址查詢) | | 2、插件開發(fā)演示文件目錄說明 | xinxiu_network_plugin \\新秀網(wǎng)絡驗證應用中心插件主目錄 —lib \\自定義類存放目錄 (用于開發(fā)者存放第三方類、自定義類) —function \\自定義方法存放目錄 (用于開發(fā)者存放自定義開發(fā)接口類和方法) ——function_dev.php \\自定義方法類開發(fā)文件 (自定義開發(fā)接口方法類) —plugins \\插件數(shù)據(jù)庫代碼存放目錄 (用于開發(fā)者存放插件數(shù)據(jù)庫執(zhí)行代碼) ——dev \\插件名目錄 ———extend_network.php \\設置插件數(shù)據(jù)庫執(zhí)行代碼文件(數(shù)據(jù)新增、更新、刪除,接口增加、刪除功能,插件安裝和卸載代碼) —template \\插件前端htm開發(fā)存放目錄(根據(jù)discuz官方插件前臺開發(fā)代碼進行開發(fā)) —admin_dev_set.inc.php \\插件后臺設置文件(根據(jù)discuz官方插件后臺開發(fā)代碼進行開發(fā),并在插件設計頁面自行增加插件設置文件入口) —dev.inc.php \\自定義接口入口開發(fā)文件 | 3、如何安裝、開發(fā)、調試? | #1、下載演示文件后,上傳至新秀網(wǎng)絡驗證應用中心插件根目錄。discuz論壇插件根目錄 \source\plugin\xinxiuvip_network_plugin\ #2、使用PHP代碼編輯軟件,對入口文件 dev.inc.php 和 自定義方法類文件 function_dev.php 等進行開發(fā),注意:UTF8及GBK編碼問題。 #3、如需新增接口文件,請根據(jù)演示文件,修改 “dev” 為您想要的文件名,但不能與新秀框架插件內文件名沖突,且開發(fā)的接口方法,不能與新秀框架沖突。 #4、如何發(fā)布自己開發(fā)的插件并獲取一定收益,請聯(lián)系客服QQ: #5、功能代碼開發(fā)完成,組裝調試接口:
//根據(jù)演示文件中組裝url接口地址 http://demo35.xinxiuvip.com/plugin.php?id=xinxiuvip_network_plugin:ip&action=ip_cha&key=123456&ip=14.21.97.153
[PHP] 純文本查看 復制代碼 {
"code": 200,
"result": "ok",
"count": 2,
"data": {
"ip": "14.21.97.153",
"dizhi": "- 中國廣東"
},
"sqltime": "0.01041s"
} |
ip.inc.php入口文件代碼實例 | [PHP] 純文本查看 復制代碼
<?php
/*
技術支持 QQ:3188639 QQ交流群:281079920
官方網(wǎng)站 [url=http://www.5566wy.com/]http://www.5566wy.com/[/url]
獲取授權 [url=http://www.5566wy.com/plugin.php?id=xinxiuvip_license:accredit]http://www.5566wy.com/plugin.php?id=xinxiuvip_license:accredit[/url]
接口開發(fā)手冊 [url=http://www.5566wy.com/forum.php?mod=viewthread&tid=574]http://www.5566wy.com/forum.php?mod=viewthread&tid=574[/url]
嚴禁反編譯、逆向等任何形式的侵權行為,違者將追究法律責任!
*/
#========================================
#以下兩行代碼,用于開發(fā)環(huán)境下代碼錯誤提示,可根據(jù)提示信息進行代碼檢查,無誤后即可注釋掉!
//ini_set("display_errors", "on");
//error_reporting(E_ALL);
#========================================
#========================================
#防止游客直接輸入網(wǎng)址進行訪問,權限檢測,勿動!!!
if (! defined('IN_DISCUZ')) {
exit('Access Denied');
}
#========================================
#========================================
#引入自定義開發(fā)類文件,此文件保存位置 'function/dev' 代表 function/function_dev.php 如需修改請按格式進行!
C::import('function/ip', 'plugin/xinxiuvip_network_plugin', false);//注意這里插件開發(fā)和接口二次開發(fā)不同!
$api = new function_ip();//實例化function_dev.php類操作,實例化后可用$api->調用function_dev.php中的類方法!
#========================================
#此處為入口文件,根據(jù)接口方法,調用對應類方法。
switch ($api->action) { //$api->action 獲取入口方法,勿動!!!
#========================================
case 'ip_cha': // 判斷是否是此方法,如果是則進入下一步!
$ip = xx_client::safe_check('ip', true); //判斷參數(shù)傳輸,params為參數(shù)名稱,iscore為是否是必填項(true為必填,false為可空)
$api->ip_cha($ip);//調用function_dev.php實例化后類方法,根據(jù)類方法設置傳入?yún)?shù)。
break;
#此處代碼根據(jù)接口開發(fā)需求,可以無限添加循環(huán)。
#========================================
#========================================
case 'ip_demo': // 判斷是否是此方法,如果是則進入下一步!
$ip = xx_client::safe_check('ip', true); //判斷參數(shù)傳輸,params為參數(shù)名稱,iscore為是否是必填項(true為必填,false為可空)
$api->ip_demo($ip);//調用function_dev.php實例化后類方法,根據(jù)類方法設置傳入?yún)?shù)。
break;
#此處代碼根據(jù)接口開發(fā)需求,可以無限添加循環(huán)。
#========================================
#========================================
#此處代碼是判斷接口輸入是否正確。勿刪!!!
default:
xx_client::json_output(400,'error010');
break;
#========================================
}
|
function_ip.php自定義方法類代碼實例 | [PHP] 純文本查看 復制代碼 <?php
/*
技術支持 QQ:3188639 QQ交流群:281079920
官方網(wǎng)站 [url=http://www.5566wy.com/]http://www.5566wy.com/[/url]
獲取授權 [url=http://www.5566wy.com/plugin.php?id=xinxiuvip_license:accredit]http://www.5566wy.com/plugin.php?id=xinxiuvip_license:accredit[/url]
接口開發(fā)手冊 [url=http://www.5566wy.com/forum.php?mod=viewthread&tid=574]http://www.5566wy.com/forum.php?mod=viewthread&tid=574[/url]
嚴禁反編譯、逆向等任何形式的侵權行為,違者將追究法律責任!
*/
#========================================
#以下兩行代碼,用于開發(fā)環(huán)境下代碼錯誤提示,可根據(jù)提示信息進行代碼檢查,無誤后即可注釋掉!
//ini_set("display_errors", "on");
//error_reporting(E_ALL);
#========================================
#========================================
#防止游客直接輸入網(wǎng)址進行訪問,權限檢測,勿動!!!
if (! defined('IN_DISCUZ')) {
exit('Access Denied');
}
#========================================
#========================================
#引入核心系統(tǒng)類,勿刪!!!
C::import('class/plugin','plugin/xinxiuvip_network_plugin',false);
require_once DISCUZ_ROOT.'./config/config_ucenter.php';
require_once DISCUZ_ROOT.'./uc_client/client.php';
#========================================
#========================================
#如何引入自定義系統(tǒng)類?
#1、將自定義核心類、第三方核心類上傳至extend文件夾下;
#2、通過 C::import 、 require_once 兩種引入形式引入第三方核心類;
#3、在下方 public function dev_demo1($demo1,$demo2) 方法中實例化后使用 $new-> 進行調用。
#========================================
class function_ip extends class_plugin
{
public $action_all = array('ip_cha','ip_demo');//所有接口必填,用逗號隔開!!!除以下key、adminkey所包含以外,未包含的接口都是通過token令牌進行訪問。
public $function_action_key = array('ip_cha','ip_demo');//使用key密鑰訪問的接口
public $function_action_adminkey = array();//使用管理密鑰adminkey訪問的接口
/**
* 構造方法 __construct() 是在實例化對象時被自動調用
* 用途:可以用于初始化程序(可以給成員屬性賦值,也可以調用成員方法)
*/
public function __construct(){
$this->plugin_status();//判斷插件后臺開啟狀態(tài),勿刪!
parent::__construct();//注意這里和接口二次開發(fā)不同
}
#========================================
#此處為標準類方法,可根據(jù)DISCUZ、新秀網(wǎng)絡驗證內置函數(shù)進行調用,也可使用PHP官方函數(shù)進行操作。
public function ip_cha($ip){
#-具體DISCUZ內置函數(shù)、新秀網(wǎng)絡驗證內置函數(shù)、PHP函數(shù),論壇相應帖子有專門介紹。
$tinyipfile = DISCUZ_ROOT.'./data/ipdata/tinyipdata.dat';
$data = $this->convertip_tiny($ip,$tinyipfile);
$data_array = array(
'ip'=>$ip,
'dizhi'=>$data,
);
$data ? xx_client::json_output(200,'ok',$data_array): $this->json_output(400,'請檢查IP地址是否正確!');
#-具體DISCUZ內置函數(shù)、新秀網(wǎng)絡驗證內置函數(shù)、PHP函數(shù),論壇相應帖子有專門介紹。
}
#========================================
#========================================
#演示方法設置鉤子
public function ip_demo($ip){
#========================================
#嵌入插件開發(fā)鉤子,注意:此擴展方法在應用中心擴展文件中使用‘extend_plugin.php’;
xx_client::class_hook('hook_ip_ip_cha',array('ip'=>$ip));
/*
* 下面是插件拓展對應的方法
* 注意class_hook中的'hook_ip_ip_cha' 就是擴展文件中的方法名!
*
public function hook_ip_ip_cha($data){
var_dump($data,'plugin');
}
*/
#========================================
}
#========================================
function convertip_tiny($ip, $ipdatafile) {//獲取ip地址的方法類
static $fp = NULL, $offset = array(), $index = NULL;
$ipdot = explode('.', $ip);
$ip = pack('N', ip2long($ip));
$ipdot[0] = (int)$ipdot[0];
$ipdot[1] = (int)$ipdot[1];
if($fp === NULL && $fp = @fopen($ipdatafile, 'rb')) {
$offset = @unpack('Nlen', @fread($fp, 4));
$index = @fread($fp, $offset['len'] - 4);
} elseif($fp == FALSE) {
return '- Invalid IP data file';
}
$length = $offset['len'] - 1028;
$start = @unpack('Vlen', $index[$ipdot[0] * 4] . $index[$ipdot[0] * 4 + 1] . $index[$ipdot[0] * 4 + 2] . $index[$ipdot[0] * 4 + 3]);
for ($start = $start['len'] * 8 + 1024; $start < $length; $start += 8) {
if ($index[$start] . $index[$start + 1] . $index[$start + 2] . $index[$start + 3] >= $ip) {
$index_offset = @unpack('Vlen', $index[$start + 4] . $index[$start + 5] . $index[$start + 6] . "\x0");
$index_length = @unpack('Clen', $index[$start + 7]);
break;
}
}
@fseek($fp, $offset['len'] + $index_offset['len'] - 1024);
if($index_length['len']) {
return '- '.@fread($fp, $index_length['len']);
} else {
return '- Unknown';
}
}
/**
* 析構方法 __destruct() 是在對象被銷毀時自動調用
* 用途:可以進行資源的釋放操作或文件的關閉操作或信息保存操作
*/
public function __destruct()
{
return parent::__destruct(); // TODO: Change the autogenerated stub
}
} |
admin_qq_set.inc.php插件后臺設置文件 | [PHP] 純文本查看 復制代碼 <?php
/*
技術支持 QQ:3188639 QQ交流群:281079920
官方網(wǎng)站 [url=http://www.5566wy.com/]http://www.5566wy.com/[/url]
獲取授權 [url=http://www.5566wy.com/plugin.php?id=xinxiuvip_license:accredit]http://www.5566wy.com/plugin.php?id=xinxiuvip_license:accredit[/url]
接口開發(fā)手冊 [url=http://www.5566wy.com/forum.php?mod=viewthread&tid=574]http://www.5566wy.com/forum.php?mod=viewthread&tid=574[/url]
嚴禁反編譯、逆向等任何形式的侵權行為,違者將追究法律責任!
*/
if (! defined('IN_DISCUZ') || ! defined('IN_ADMINCP')) {
exit('Access Denied');
}
C::import('class/client','plugin/xinxiuvip_network',false);
global $_G;
$tips = '<li>此處為ip插件公開源碼的,后臺演示頁面,做為開發(fā)者參考;</li><li>本后臺函數(shù)根據(jù)discuz官方后臺頁面開發(fā)文檔開發(fā)即可:</li><li>如不需要請刪除插件根目錄admin_ip_set.inc.php即可!</li>';
showtips($tips, 'tips', true, '溫馨提示');
|
extend_network.php插件安裝卸載配置實例 | [PHP] 純文本查看 復制代碼 <?php
/*
技術支持 QQ:3188639 QQ交流群:281079920
官方網(wǎng)站 [url=http://www.5566wy.com/]http://www.5566wy.com/[/url]
獲取授權 [url=http://www.5566wy.com/plugin.php?id=xinxiuvip_license:accredit]http://www.5566wy.com/plugin.php?id=xinxiuvip_license:accredit[/url]
接口開發(fā)手冊 [url=http://www.5566wy.com/forum.php?mod=viewthread&tid=574]http://www.5566wy.com/forum.php?mod=viewthread&tid=574[/url]
嚴禁反編譯、逆向等任何形式的侵權行為,違者將追究法律責任!
*/
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
C::import('class/plugin','plugin/xinxiuvip_network_plugin',false);//引入系統(tǒng)核心類
class extend_network extends class_plugin {
public function __construct()//構造方法
{
parent::__construct(false);
}
public function hook_plugin_install(){//插件安裝代碼
$sql = <<<EOF
CREATE TABLE IF NOT EXISTS `pre_xinxiuvip_plugin_ip` (
`id` BIGINT(16) unsigned NOT NULL AUTO_INCREMENT,
`text1` longtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
EOF;
return $sql;
}
public function hook_plugin_upgrade(){//插件更新代碼
$sql = <<<EOF
CREATE TABLE IF NOT EXISTS `pre_xinxiuvip_plugin_ip` (
`id` BIGINT(16) unsigned NOT NULL AUTO_INCREMENT,
`text1` longtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
EOF;
return $sql;
}
public function hook_plugin_uninstall(){//插件卸載代碼
$sql = <<<EOF
DROP TABLE IF EXISTS `pre_xinxiuvip_plugin_ip`;
EOF;
return $sql;
}
public function hook_plugin_actions_install(){//插件安裝接口代碼
$actions_array = array(
array(
'type'=>'ip模塊',
'name'=>'查詢ip地址',
'actions'=>'ip_cha',
'url'=>'http://www.5566wy.com/forum.php?mod=viewthread&tid=556',
),
);
return $actions_array;
}
public function hook_plugin_actions_upgrade(){//插件接口更新代碼
}
} |
|
|