帝国CMS网站管理系统是一个高效的网站解决方案,本文将给出开发好的帝国CMS第三方个人免签约支付接口插件(支持支付宝/微信扫码即时到账支付),可用于帝国系统收款使用,供有需求的用户参考或快速接入。本代码无加密完全开源,欢迎参考/使用。
概述
环境
本接口插件基于帝国CMS 7.5开发,7.2版本也经过测试,其余版本正常也是可以用的,可自行尝试。
效果展示
帝国CMS原生体验:
支付方式选择页面效果:
微信支付页面效果:
支付成功效果:
支付宝支付页面效果:
快速接入
下载
源码上传
将源码包里 e文件夹和ezhifu文件夹 上传到网站根目录
执行SQL
进入后台 - 系统 - 备份与恢复数据 - 执行SQL语句,并执行下列语句
insert into [!db.pre!]enewspayapi (paytype,payfee,paysay,payname) values ("ezhifu",0,"易支付() - 微信支付宝免签约即时到账系统","在线支付");
配置
进入后台 - 其他 - 在线支付 - 管理支付接口 - 找到易支付接口配置
主要对 接口类型、商户号(ID)、密钥(KEY) 三项进行配置,其余项根据需要,可改可不改。其中接口类型有微信+支付宝、单微信、单支付宝三项可选。商户号(ID)和密钥(KEY)在这里获取,分别对应APPID和APPKEY:/account。
回调设置
设置回调地址为:http://域名/e/payapi/ezhifu/payend.php(设置入口)
测试
至此已安装完成,可以测试下功能是否正常了。
代码解析
本部分将对部分代码解析,供有兴趣的用户阅览,只为接入的用户可以跳过该部分。
修改部分
语言包文件路径为:/e/admin/pay/SetPayApi.php,该文件为管理支付接口-配置接口页面,在97行增加了下列代码:
回调接口
回调接口:/e/payapi/ezhifu/payend.php。由于帝国cms原回调接口里很多参数都是从cookie取的,并不适合异步回调使用,同步回调如果用户支付完后直接关闭了页面将会导致回调丢失,又不稳定,因此我们将回调里从cookie取的部分都改成了从GET参数中取,完美适应同步和异步回调。
支付中转文件
支付中转文件:/e/payapi/ezhifu/transfer.php,该文件用于支付中转,主要用于将cookie参数转换为GET参数,另外也对支付支付类型的跳转作出判断,代码如下:
require("../../class/connect.php");
require("../../member/class/user.php");
$link=db_connect();
$empire=new mysqlquery();
//参数插入
$_GET['payphome'] = getcvar('payphome');
$ddid=(int)getcvar('paymoneyddid');
if($ddid){
$_GET['paymoneyddid'] = $ddid;
}
$bgid=(int)getcvar('paymoneybgid');
if($bgid){
$_GET['paymoneybgid'] = $bgid;
}
$user=islogin();
$_GET['userid'] = $user['userid'];
//跳转支付
if($_GET['type']==0){
unset($_GET['type']);
header("Location:../../../ezhifu/web.php?".http_build_query($_GET));
}else{
header("Location:../../../ezhifu/pay.php?".http_build_query($_GET));
}
/**
* EZHIFU 易支付() 易支付免签约支付插件
* 无需签约,快速接入
*/
if (!defined('IN_ECS'))
{
die('Hacking attempt');
}
$payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/ezhifu.php';
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'] = 'ezhifu_desc';
/* 是否支持货到付款 */
$modules[$i]['is_cod'] = '0';
/* 是否支持在线支付 */
$modules[$i]['is_online'] = '1';
/* 作者 */
$modules[$i]['author'] = 'EZHIFU';
/* 网址 */
$modules[$i]['website'] = '';
/* 版本号 */
$modules[$i]['version'] = '1.0.0';
/* 配置信息 */
$modules[$i]['config'] = array(
array('name' => 'ezhifu_APPID', 'type' => 'text', 'value' => ''),
array('name' => 'ezhifu_APPKEY', 'type' => 'text', 'value' => ''),
array('name' => 'ezhifu_pay_method', 'type' => 'select', 'value' => '')
);
return;
}
/**
* 类
*/
class ezhifu
{
function __construct()
{
$this->ezhifu();
}
/**
* 构造函数
*
* @access public
* @param
*
* @return void
*/
function ezhifu()
{
}
/**
* 生成支付代码
* @param array $order 订单信息
* @param array $payment 支付方式信息
*/
function get_code($order, $payment)
{
if (!defined('EC_CHARSET'))
{
$charset = 'utf-8';
}
else
{
$charset = EC_CHARSET;
}
//整理参数
$url = "?appid={$payment['ezhifu_APPID']}&money={$order['order_amount']}&subject={$order['order_sn']}&logid={$order['log_id']}&returnurl=".urlencode(return_url(basename(__FILE__, '.php')));
$real_method = $payment['ezhifu_pay_method'];
$html = "";
switch ($real_method){
case '0'://双通道
$html = '';
break;
case '1'://仅微信
$html = '';
break;
case '2'://仅支付宝
$html = '';
break;
}
return '
'.$html.'';
}
/**
* 响应操作
*/
function respond()
{
$payment = get_payment($_GET['code']);
unset($_GET['code']);
$sign = $_GET['sign'];
unset($_GET['sign']);
ksort($_GET);
if(md5(http_build_query($_GET).$payment['ezhifu_APPKEY'])!=$sign){
return false;
}
//校验成功
$order_sn = $_GET['logid'];
/* 检查支付的金额是否相符 */
if (!check_money($order_sn, $_GET['money']))
{
return false;
}
//置订单为成功
order_paid($order_sn);
return true;
}
}
支付页面文件
/ezhifu/ 该目录下为支付页面文件,对官方的支付SDK进行了小部分更改,不再详细说明,需要可自行查阅代码。
拓展阅读
php微信支付宝第三方接口开发平台 帝国CMS第三方个人支付接口微信支付宝免签约即时到账api_帝国网站管理系统插件...