上一讲座我们讲述了ecshop语言包lang的加载原理-讲座11 ,由于最近ecshop二次开发的项目比较多,而且周期也比较长,所以没来得及写教程。今天刚好做一个支付插件.让我又一次深刻的理解了ecshop支付插件的工作原理.
首先我们知道ecshop支付插件,是在后台可以安装和卸载的。ecshop 数据库中有一个表ecs_payment .这个表就是用来存储ecshop支付方式的。
ecshop的插件位于includes\modules\payment目录.文件的名称也就是支付方式的标志代码。
每个支付插件类有两个方法。
1: function get_code($order, $payment)
2:function respond()
说说上面两个方法,一个是获得支付页面提交的参数,第二个就是支付完后返回的动作处理函数.这个文件在跟目录的respond.php里面非常有用.
我们看下支付后返回处理动作.
$pay_code = !empty($_REQUEST['code']) ? trim($_REQUEST['code']) : '';
//获取首信支付方式
if (empty($pay_code) && !empty($_REQUEST['v_pmode']) && !empty($_REQUEST['v_pstring']))
{
$pay_code = 'cappay';
}
//获取快钱神州行支付方式
if (empty($pay_code) && ($_REQUEST['ext1'] == 'shenzhou') && ($_REQUEST['ext2'] == 'ecshop'))
{
$pay_code = 'shenzhou';
}
这里返回要获得支付方式的参数,目的就是获取所用的支付方式名称,然后通过调用支付插件所在文件里面的返回处理函数.
$plugin_file = 'includes/modules/payment/' . $pay_code . '.php';
/* 检查插件文件是否存在,如果存在则验证支付是否成功,否则则返回失败信息 */
if (file_exists($plugin_file))
{
/* 根据支付方式代码创建支付类的对象并调用其响应操作方法 */
include_once($plugin_file);
$payment = new $pay_code();
$msg = ($payment->respond()) ? $_LANG['pay_success'] : $_LANG['pay_fail'];
}
else
{
$msg = $_LANG['pay_not_exist'];
}
大家看下,都是为了respond()方法的调用。