• 微信、支付宝个人免签约第三方支付接口需求,欢迎联系我们!
  • 严禁一切非法使用,请不要将本站接口用于违法行为!

帝国CMS网站管理系统是一个高效的网站解决方案,本文将给出开发好的帝国CMS第三方个人免签约支付接口插件(支持支付宝/微信扫码即时到账支付),可用于帝国系统收款使用,供有需求的用户参考或快速接入。本代码无加密完全开源,欢迎参考/使用。

概述

环境

本接口插件基于帝国CMS 7.5开发,7.2版本也经过测试,其余版本正常也是可以用的,可自行尝试。

效果展示

帝国CMS原生体验:
在线支付展示

支付方式选择页面效果:
支付方式选择页面效果

微信支付页面效果:
微信支付页面效果

支付成功效果:
支付成功效果
支付成功效果

支付宝支付页面效果:
支付宝支付页面效果

快速接入

下载

7.5插件下载

7.2插件下载

HTTPS补丁

7.5 GBK补丁

源码上传

将源码包里 e文件夹和ezhifu文件夹 上传到网站根目录

执行SQL

进入后台 - 系统 - 备份与恢复数据 - 执行SQL语句,并执行下列语句
执行SQL语句

insert into [!db.pre!]enewspayapi (paytype,payfee,paysay,payname) values ("ezhifu",0,"易支付(www.ezhifu.org) - 微信支付宝免签约即时到账系统","在线支付");

配置

进入后台 - 其他 - 在线支付 - 管理支付接口 - 找到易支付接口配置
配置支付接口
主要对 接口类型、商户号(ID)、密钥(KEY) 三项进行配置,其余项根据需要,可改可不改。其中接口类型有微信+支付宝、单微信、单支付宝三项可选。商户号(ID)和密钥(KEY)在这里获取,分别对应APPID和APPKEY:http://user.ezhifu.org/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 易支付(www.ezhifu.org) 易支付免签约支付插件
 * 无需签约,快速接入
 */

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'] = 'http://www.ezhifu.org';

    /* 版本号 */
    $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 = '<a href="http://pay.ezhifu.org/'.$url.'&type=1" target="_blank"><img src="http://pay.ezhifu.org/static/wechat.png" style="height:40px;margin-right:25px"></a><a href="http://pay.ezhifu.org/'.$url.'&type=2" target="_blank"><img src="http://pay.ezhifu.org/static/alipay.png" height="40px"></a>';
                break;
            case '1'://仅微信
                $html = '<a href="http://pay.ezhifu.org/'.$url.'&type=1" target="_blank"><img src="http://pay.ezhifu.org/static/wechat.png" style="height:40px;"></a>';
                break;
            case '2'://仅支付宝
                $html = '<a href="http://pay.ezhifu.org/'.$url.'&type=2" target="_blank"><img src="http://pay.ezhifu.org/static/alipay.png" height="40px"></a>';
                break;
        }

        return '<div style="text-align:center;padding:10px">'.$html.'</div>';
    }

    /**
     * 响应操作
     */
    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进行了小部分更改,不再详细说明,需要可自行查阅代码。

拓展阅读