找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11|回复: 0

[扩展插件] Discuz 插件开发【X3.5】 二次开发 - 在线手册

[复制链接]
发表于 前天 17:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
验证插件二次开发

本功能由PHP+MYSQL语言开发,无缝对接新秀网络验证系统,采用独立入口文件、类文件、第三方类文件库进行调用开发。所有功能实现及控制均采用api接口操作,数据输出形式为JSON、XML两种常见形式,达到毫秒级数据快速交换功能。

1、插件开发是结合新秀网络验证系统进行的二次开发,不能独立使用;

2、插件开发遵循Discuz、新秀网络验证、PHP语言规范开发;

3、插件开发适用于新秀网络验证系统旗舰版ver1.0版本以后;

4、本功能与新秀网络验证系统、扩展框架系统,代码相互独立,但功能同时执行;

5、插件开发可使用Discuz内置函数、新秀网络验证内置函数、PHP函数。

适用环境:php版本>7.0、Mysql版本>5.5以上、Discuz版本>3.5。

= Discuz资料库  = Discuz插件开发文档  = 开发交流  =  BUG反馈  =  QQ客服:3188639  QQ交流群:281079920

# \' C6 b# d; j9 \# ?$ ]1 r
接口开发常用函数

1、DB数据库操作函数    /*常用MYSQL数据库操作命令,增、减、改、查功能函数。*/

2、新秀网络验证数据库对照表    /*新秀网络验证系统内部,所有数据库表及说明*/

3、Discuz官方数据库对照表  /*Discuz官方数据库表,包括discuz、UCente数据库字典。*/

4、Discuz基础框架、类、函数    /*包含Discuz官方基础框架、类、函数、方法使用说明。*/

5、新秀网络基础框架类、函数    /*包含新秀网络验证基础框架、类、函数、方法使用说明。*/


+ E/ J( j/ o6 a
验证插件二次开发示例

1、ip地址查询   /*用于查询ip地址接口!*/


8 K* E2 [" G: Q/ c7 e
使 用 简 介

1、插件开发演示文件下载(IP地址查询)

2、插件开发演示文件目录说明

xinxiu_network_plugin \\新秀网络验证应用中心插件主目录

—lib \\自定义类存放目录 (用于开发者存放第三方类、自定义类)

——lib_ip.php \\自定义方法库开发文件 (自定义开发接口方法库)

—function \\自定义方法存放目录 (用于开发者存放自定义开发接口类和方法)

——function_ip.php \\自定义方法类开发文件 (自定义开发接口方法类)

—plugins \\插件数据库代码存放目录 (用于开发者存放插件数据库执行代码)

dev \\插件名目录

——extend_network.php \\设置插件数据库执行代码文件(数据新增、更新、删除,接口增加、删除功能,插件安装和卸载代码)

template\admin \\\\插件前端htm开发存放目录(根据discuz官方插件前台开发代码进行开发

ip.htm \\插件后台设置文件(根据discuz官方插件后台开发代码进行开发,并在插件设计页面自行增加插件设置文件入口)

—ip.inc.php \\\\自定义接口入口开发文件

3、如何安装、开发、调试?

#1、下载演示文件后,上传至新秀网络验证应用中心插件根目录。discuz论坛插件根目录 \\source\\plugin\\xinxiuvip_network_plugin\\

#2、使用PHP代码编辑软件,对入口文件 dev.inc.php 和 自定义方法类文件 function_dev.php 等进行开发,注意:UTF8及GBK编码问题。

#3、如需新增接口文件,请根据演示文件,修改 “dev” 为您想要的文件名,但不能与新秀框架插件内文件名冲突,且开发的接口方法,不能与新秀框架冲突

#4、如何发布自己开发的插件并获取一定收益,请联系客服QQ:

#5、功能代码开发完成,组装调试接口:


//根据演示文件中组装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
 官方网站 [url=http://www.xinxiuvip.com/]http://www.xinxiuvip.com/[/url]
 获取授权 [url=http://www.xinxiuvip.com/plugin.php?id=xinxiuvip_license:accredit]http://www.xinxiuvip.com/plugin.php?id=xinxiuvip_license:accredit[/url]
 接口开发手册 [url=http://www.xinxiuvip.com/forum.php?mod=viewthread&tid=574]http://www.xinxiuvip.com/forum.php?mod=viewthread&tid=574[/url]
 严禁反编译、逆向等任何形式的侵权行为,违者将追究法律责任!
*/

#========================================
#以下两行代码,用于开发环境下代码错误提示,可根据提示信息进行代码检查,无误后即可注释掉!
//ini_set(\"display_errors\", \"on\");
//error_reporting(E_ALL);
#========================================

#========================================
#防止游客直接输入网址进行访问,权限检测,勿动!!!
if (! defined(\'IN_DISCUZ\')) {
    exit(\'Access Denied\');
}
#========================================

#========================================
#引入自定义开发类文件,此文件保存位置 \'function/dev\' 代表 function/function_dev.php 如需修改请按格式进行!
C::import(\'function/ip\', \'plugin/xinxiuvip_network_plugin\', false);//注意这里插件开发和接口二次开发不同!
$api = new function_ip();//实例化function_dev.php类操作,实例化后可用$api->调用function_dev.php中的类方法!
#========================================


#此处为入口文件,根据接口方法,调用对应类方法。
switch ($api->action) { //$api->action 获取入口方法,勿动!!!

    #========================================
    case \'ip_cha\': // 判断是否是此方法,如果是则进入下一步!
       
        $ip =  xx_client::safe_check(\'ip\', true); //判断参数传输,params为参数名称,iscore为是否是必填项(true为必填,false为可空)
        $api->ip_cha($ip);//调用function_dev.php实例化后类方法,根据类方法设置传入参数。
        break;
    #此处代码根据接口开发需求,可以无限添加循环。
    #========================================

    #========================================
    case \'ip_demo\': // 判断是否是此方法,如果是则进入下一步!
        $ip =  xx_client::safe_check(\'ip\', true); //判断参数传输,params为参数名称,iscore为是否是必填项(true为必填,false为可空)
        $api->ip_demo($ip);//调用function_dev.php实例化后类方法,根据类方法设置传入参数。
        break;
    #此处代码根据接口开发需求,可以无限添加循环。
    #========================================

    #========================================
    #此处代码是判断接口输入是否正确。勿删!!!
    default:
        xx_client::json_output(400,\'error010\');
        break;
    #========================================
}
  Y, y* f+ B' b, V/ ]  ^
function_ip.php自定义方法类代码实例
[PHP] 纯文本查看 复制代码
<?php
/*
 技术支持 QQ:3188639 QQ交流群:281079920
 官方网站 [url=http://www.xinxiuvip.com/]http://www.xinxiuvip.com/[/url]
 获取授权 [url=http://www.xinxiuvip.com/plugin.php?id=xinxiuvip_license:accredit]http://www.xinxiuvip.com/plugin.php?id=xinxiuvip_license:accredit[/url]
 接口开发手册 [url=http://www.xinxiuvip.com/forum.php?mod=viewthread&tid=574]http://www.xinxiuvip.com/forum.php?mod=viewthread&tid=574[/url]
 严禁反编译、逆向等任何形式的侵权行为,违者将追究法律责任!
*/

#========================================
#以下两行代码,用于开发环境下代码错误提示,可根据提示信息进行代码检查,无误后即可注释掉!
//ini_set(\"display_errors\", \"on\");
//error_reporting(E_ALL);
#========================================

#========================================
#防止游客直接输入网址进行访问,权限检测,勿动!!!
if (! defined(\'IN_DISCUZ\')) {
    exit(\'Access Denied\');
}
#========================================

#========================================
#引入核心系统类,勿删!!!
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\';
#========================================


#========================================
#如何引入自定义系统类?
#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();//判断插件后台开启状态,勿删!
        parent::__construct();//注意这里和接口二次开发不同
    }

    #========================================
    #此处为标准类方法,可根据DISCUZ、新秀网络验证内置函数进行调用,也可使用PHP官方函数进行操作。
    public function ip_cha($ip){

        #-具体DISCUZ内置函数、新秀网络验证内置函数、PHP函数,论坛相应帖子有专门介绍。
        $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内置函数、新秀网络验证内置函数、PHP函数,论坛相应帖子有专门介绍。
    }
    #========================================

    #========================================
    #演示方法设置钩子
    public function ip_demo($ip){
        #========================================
        #嵌入插件开发钩子,注意:此扩展方法在应用中心扩展文件中使用‘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
    }

}

. L9 l4 Y* j2 }2 s" K
admin_qq_set.inc.php插件后台设置文件
[PHP] 纯文本查看 复制代码
<?php

/*
 技术支持 QQ:3188639 QQ交流群:281079920
 官方网站 [url=http://www.xinxiuvip.com/]http://www.xinxiuvip.com/[/url]
 获取授权 [url=http://www.xinxiuvip.com/plugin.php?id=xinxiuvip_license:accredit]http://www.xinxiuvip.com/plugin.php?id=xinxiuvip_license:accredit[/url]
 接口开发手册 [url=http://www.xinxiuvip.com/forum.php?mod=viewthread&tid=574]http://www.xinxiuvip.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插件公开源码的,后台演示页面,做为开发者参考;</li><li>本后台函数根据discuz官方后台页面开发文档开发即可:</li><li>如不需要请删除插件根目录admin_ip_set.inc.php即可!</li>\';
showtips($tips, \'tips\', true, \'温馨提示\');


, J( u1 A7 F7 _8 b  s! x
extend_network.php插件安装卸载配置实例
[PHP] 纯文本查看 复制代码
<?php

/*
 技术支持 QQ:3188639 QQ交流群:281079920
 官方网站 [url=http://www.xinxiuvip.com/]http://www.xinxiuvip.com/[/url]
 获取授权 [url=http://www.xinxiuvip.com/plugin.php?id=xinxiuvip_license:accredit]http://www.xinxiuvip.com/plugin.php?id=xinxiuvip_license:accredit[/url]
 接口开发手册 [url=http://www.xinxiuvip.com/forum.php?mod=viewthread&tid=574]http://www.xinxiuvip.com/forum.php?mod=viewthread&tid=574[/url]
 严禁反编译、逆向等任何形式的侵权行为,违者将追究法律责任!
*/

if(!defined(\'IN_DISCUZ\')) {
    exit(\'Access Denied\');
}

C::import(\'class/plugin\',\'plugin/xinxiuvip_network_plugin\',false);//引入系统核心类

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.xinxiuvip.com/forum.php?mod=viewthread&tid=556\',
            ),
        );
       return $actions_array;

    }
    public function hook_plugin_actions_upgrade(){//插件接口更新代码
    
    }
}
) A, U" I1 {8 s+ }+ U0 t- o% C

5 k& {% d8 ^* G' s8 V  L来源: Discuz 插件开发【X3.5】 二次开发 - 在线手册
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|新秀网络验证系统API[软著登字第13061951号] ( 豫ICP备2021033257号-1 )

GMT+8, 2025-7-4 18:22 , Processed in 0.226909 second(s), 44 queries , Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表