ecshop创建自定义支付插件并使用

1.在 includes/modules/payment文件夹下创建 支付插件.php 文件(例:payplugins.php)
--1.1.payplugins.php 文件内容包含如下内容

<?php
if (!defined('IN_ECS'))
{
    die('Hacking attempt');
}

$payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/payplugins.php';
//payplugins.php这个文件名就是languages对应语言包的payment下的文件名

if (file_exists($payment_lang))
{
    global $_LANG;

    include_once($payment_lang);
}

/* 模块的基本信息 */
if (isset($set_modules) && $set_modules == TRUE)
{
    $i = isset($modules) ? count($modules) : 0;

    /* 代码 */
    $modules[$i]['code']    = basename(__FILE__, '.php');

    /* 描述对应的语言项 */
    $modules[$i]['desc']    = 'payplugins_desc';//这是对支付方式的描述语言包里对应为$_LANG['payplugins_desc']
//下面的选项自定义填写这里不做修改
    /* 是否支持货到付款 */
    $modules[$i]['is_cod']  = '0';

    /* 是否支持在线支付 */
    $modules[$i]['is_online']  = '0';

    /* 作者 */
    $modules[$i]['author']  = 'ECSHOP TEAM';

    /* 网址 */
    $modules[$i]['website'] = 'http://www.ecshop.com';

    /* 版本号 */
    $modules[$i]['version'] = '1.0.0';

    /* 配置信息 */
    $modules[$i]['config']  = array();
/*
    $modules[$i]['config']  = array(
        array('name' => 'payplugins_test',              'type' => 'text',   'value' => ''),
        array('name' => 'payplugins_pay_method',        'type' => 'select', 'value' => '')
    );
    //如果按照注释中方法写配置信息
    语言文件中应该加入
    $_LANG['payplugins_test'] = '';
    $_LANG['payplugins_pay_method'] = '';
    $_LANG['payplugins_pay_method'][0] = '';
    $_LANG['payplugins_pay_method'][1] = '';
    $_LANG['payplugins_pay_method'][2] = '';
*/
    return;
}

/**
 * 类
 */
class payplugins//类名与文件名保持一直
{
    /**
     * 构造函数
     *
     * @access  public
     * @param
     *
     * @return void
     */
    //php5.3版本以上__construct形式构造函数需要在类名同名方法的前面定义
    function __construct()
    {
        $this->payplugins();
    }

    function payplugins()
    {
    }
    /**
     * 提交函数(用于生成支付代码)
     */
    function get_code()
    {
        /*your code*/
        return;
    }

    /**
     * 处理函数(响应支付后的操作,可在此处改变订单的状态、验证数据的完整性,也可在有回调地址的时候封装回调php文件改变订单状态和验证数据完整性)
     */
    function respond()
    {
        /*your code*/
        return;
    }
}

?>

--1.2.respond()方法会被respond.php文件调用,用于判断支付是否完成(respond.php只用于渲染信息)
2.languages/zh_cn/payment/目录下新建一个payplugins.php文件(注:文件名必须和1创建的文件名相同),必要情况下在其他语言文件夹下也创建相同文件。

<?php
global $_LANG;

$_LANG['payplugins'] = '支付插件的名称';//$_LANG['这里的字段一定要与文件名保持一直,否则在后台不出现支付方式的名称']
$_LANG['payplugins_desc'] = '这里是插件的描述信息';
//之后的项目根据不同的支付方式自定义即可一般以$_LANG['payplugins_xxx'] = '';的形式展现
?>

3.创建好上面的文件后在ecshop后台支付方式里面就能出现对应的插件了
4.移动端mobile支付创建
(不同版本的ecshop,mobile文件夹内容可能不同,在根目录下的mobile文件夹----我的目录类似laravel项目目录)
--4.1.在根目录/mobile/app/Plugins/payment文件夹下创建和includes/modules/payment一样文件名的文件payplugins.php,文件内容基本一样,但需要去除插件基本信息和会使使用报错的if (!defined('IN_ECS')){die('Hacking attempt');}

外网引用:

Ecshop把每一种支付方式都封装成一个类,比如支付宝支付方式,对应的文件是

includes\modules\payment\alipay.php,这个文件里面封装了类是alipay,这个类有两个方法,一个是生成支付代码的get_code(),根据不同支付接口所需的参数进行配置,然后生成一个字符串,这个字符串就是支付代码;另外一个是响应操作respond()。其中,接收响应的页面都是通过return_url(basename(__FILE__, '.php'))函数指定的,生成的链接是respond.php?code=,其中code后面的参数就是根据不同的支付方式而不同。Respond.php则根据不同的第三方支付返回的信息进行处理。

标签: ecshop, 支付, 支付插件, ectouch

阅读量:120