子比主题添加USDT和QQ收款 – 易支付通道拓展教程-悦玩互联
幻灯片-悦玩互联
优惠前:
已售{{ sales_count }}
原价:
已售{{ sales_count }}
{{ important_discount.small_badge }}
倒计时00分00秒
{{ important_discount.desc }}
{{ opt.name }}
{{ opt.view_mode === 'img' ? '列表' : '图片' }}
{{ item.name }}
{{ item.name }}
{{ item.value }}
{{ item.name }}

本文拓展的是易支付通道,可以对接自己易支付的所有支付收款通道

照抄就行了,QQ收款同理

介绍

共需要修改五个文件,教程很详细,需要增加什么通道自行拓展即可

文件路径文件名功能介绍
/inc/optionsadmin-options.php后台菜单开关
/zibpay/functionszibpay-ajax.php支付处理增加通道
/zibpay/functionszibpay-func.php前端增加支付方式
/zibpay/assets/cssmain.cssmapi出码界面适配
/zibpay/assets/jspay.min.jsmapi出码界面适配

如果没有使用到mapi出码或者qrcode出码可以不修改后面两个静态文件

后台菜单

打开 admin-options.php 文件增加后台支付开关,这里的教程以增加USDT通道为例,请仔细按照教程操作,避免出现致命错误等一系列问题

搜索 支付宝收款接口 在他的下面增加USDT或者QQ通道的开关,如下图所示

图片[1]-子比主题添加USDT和QQ收款 – 易支付通道拓展教程-悦玩网络服务
            array( 
                'id'      => 'pay_qq_sdk_options',
                'default' => 'null',
                'title'   => 'QQ收款接口',
                'class'   => 'compact',
                'type'    => "select",
                'options' => array(
                    'epay'            => __('易支付-QQ', 'zib_language'),
                    'null'            => __('关闭QQ收款', 'zib_language'),
                ),
            ),
            array( //usdt-1
                'id'      => 'pay_usdt_sdk_options',
                'default' => 'null',
                'title'   => 'USDT收款接口',
                'class'   => 'compact',
                'type'    => "select",
                'options' => array(
                    'epusdt'            => __('EPUSDT', 'zib_language'),
                    'epay'            => __('易支付-USDT', 'zib_language'),
                    'diyepay'            => __('自定义接口易支付-USDT', 'zib_language'),
                    'null'            => __('关闭USDT收款', 'zib_language'),
                ),
            ),
            array(
                'dependency' => array('pay_usdt_sdk_options', '==', 'diyepay'),
                'id'         => 'diyepay',
                'type'       => 'accordion',
                'class'      => 'compact',
                'title'      => '易支付',
                'accordions' => array(
                    array(
                        'title'  => '易支付',
                        'fields' => array(
                            array(
                                'content' => '<li class="c-red">源支付无USDT通道,获取你会想要在这里自定义易支付USDT接口</li>',
                                'style'   => 'info',
                                'type'    => 'submessage',
                            ),
                            array(
                                'title'   => 'API接口网址',
                                'id'      => 'apiurl',
                                'default' => '',
                                'type'    => 'text',
                                'desc'    => '请填写接口地址,例如:<code>https://pay.xxxxxxx.cn/</code>',
                            ),
                            array(
                                'title'   => '商户号',
                                'class'   => 'compact',
                                'id'      => 'partner',
                                'default' => '',
                                'type'    => 'text',
                            ),
                            array(
                                'title'   => '商户秘钥',
                                'class'   => 'compact',
                                'id'      => 'key',
                                'default' => '',
                                'type'    => 'text',
                            ),
                        ),
                    ),
                ),
            ),

接着搜索 收款接口显示顺序 增加前端显示时的先后排序

图片[2]-子比主题添加USDT和QQ收款 – 易支付通道拓展教程-悦玩互联
                    array(
                        'title' => 'QQ',
                        'id'    => 'qq',
                        'type'  => 'checkbox',
                    ),
                    array(
                        'title' => 'USDT',
                        'id'    => 'usdt',
                        'type'  => 'checkbox',
                    ),

至此 admin-options.php 文件的修改就结束了,需要增加其他的通道按照相同的格式增加代码即可

支付处理

为了增加USDT通道或更多通道的支持,修改支付处理函数是必不可少的操作,打开 zibpay-ajax.php 文件搜索 准备付款接口 增加USDT通道的接口,如下图所示:

图片[3]-子比主题添加USDT和QQ收款 – 易支付通道拓展教程-悦玩互联
        case 'qq':
            $pay_sdk = _pz('pay_qq_sdk_options');
            break;

        case 'usdt': //usdt-1
            $pay_sdk = _pz('pay_usdt_sdk_options');
            break;
    }

而后搜索 易支付发起支付 修改易支付处理支付的核心函数,进行增加USDT通道的请求

function zibpay_initiate_epay($order_data)
{
    $config = zibpay_get_payconfig('epay');
    if (empty($config['apiurl']) || empty($config['partner']) || empty($config['key'])) {
        return array('error' => 1, 'msg' => '易支付缺少配置参数');
    }
    require_once get_theme_file_path('/zibpay/sdk/epay/epay.class.php');

    switch ($order_data['payment_method']) {
        case 'alipay':
            $payment_method = 'alipay';
            break;
        case 'wechat':
            $payment_method = 'wxpay';
            break;
        case 'usdt':
            $payment_method = 'usdt';
            break;
        case 'qq':
            $payment_method = 'qqpay';
            break;
    }

    $parameter = array(
        "pid" => trim($config['partner']),
        "type" => $payment_method,
        'notify_url' => ZIB_TEMPLATE_DIRECTORY_URI . '/zibpay/shop/epay/notify.php',
        'return_url' => add_query_arg(['redirect_url' => $order_data['return_url']], ZIB_TEMPLATE_DIRECTORY_URI . '/zibpay/shop/epay/notify.php'),
        "out_trade_no" => $order_data['order_num'], 
        "name" => $order_data['order_name'],
        "money" => $order_data['order_price'],
        "sitename" => get_bloginfo('name'),
        "clientip" => zib_get_remote_ip_addr() ?: '127.0.0.1',
    );

    $is_mobile = wp_is_mobile();
    $EpayCore  = new EpayCore($config);

    if ($is_mobile || empty($config['qrcode'])) {
        $html_text = $EpayCore->pagePay($parameter);
        return array('form_html' => '<div class="hide">' . $html_text . '</div>');
    } else {
        $result = $EpayCore->apiPay($parameter);
       if (isset($result['code']) && 1 == $result['code'] && (!empty($result['code_url']) || !empty($result['qrcode']))) {
            $_code_url            = !empty($result['code_url']) ? ($result['code_url']) : $result['qrcode'];
            $result['url_qrcode'] = zib_get_qrcode_base64(urldecode($_code_url));
            $result['check_sdk']  = 'epay'; //接口查询

            if (!empty($result['money'])) {
                if ($result['order_price'] != $result['money']) {
                    $result['more_html'] = '<div class="badg btn-block c-yellow em09 padding-h10">请扫码后支付' . $result['money'] . '元,为了确保支付成功,请注意付款金额请勿出错</div>';
                }
                $result['order_price'] = $result['money'];
            }
        } elseif (isset($result['code']) && 1 == $result['code'] && (!empty($result['payurl']))) {
            $result['url']      = $result['payurl'];
            $result['open_url'] = true;
        } else {
            $result['error'] = 1;
            $result['msg']   = !empty($result['msg']) ? $result['msg'] : '收款码请求失败';
        }
        return $result;
    }
}
// 自定义usdt易支付接口
function zibpay_initiate_diyepay($order_data)
{
    $config = zibpay_get_payconfig('diyepay');

    if (empty($config['apiurl']) || empty($config['partner']) || empty($config['key'])) {
        return array('error' => 1, 'msg' => '易支付缺少配置参数');
    }

    require_once get_theme_file_path('/zibpay/sdk/epay/epay.class.php');

    $payment_method = 'usdt'; // 设置支付方法为usdt

    $parameter = array(
        "pid" => trim($config['partner']),
        "type" => $payment_method,
        'notify_url' => ZIB_TEMPLATE_DIRECTORY_URI . '/zibpay/shop/epay/notify.php',
        'return_url' => add_query_arg(['redirect_url' => $order_data['return_url']], ZIB_TEMPLATE_DIRECTORY_URI . '/zibpay/shop/epay/notify.php'),
        "out_trade_no" => $order_data['order_num'], 
        "name" => $order_data['order_name'],
        "money" => $order_data['order_price'],
        "sitename" => get_bloginfo('name'),
        "clientip" => zib_get_remote_ip_addr() ?: '127.0.0.1',
    );

    $is_mobile = wp_is_mobile();
    $EpayCore  = new EpayCore($config);

    if ($is_mobile || empty($config['qrcode'])) {
        $html_text = $EpayCore->pagePay($parameter);
        return array('form_html' => '<div class="hide">' . $html_text . '</div>');
    } else {
        $result = $EpayCore->apiPay($parameter);
        if (isset($result['code']) && 1 == $result['code'] && (!empty($result['code_url']) || !empty($result['qrcode']))) {
            $_code_url            = !empty($result['code_url']) ? ($result['code_url']) : $result['qrcode'];
            $result['url_qrcode'] = zib_get_qrcode_base64(urldecode($_code_url));
            $result['check_sdk']  = 'epay'; //接口查询

            if (!empty($result['money'])) {
                if ($result['order_price'] != $result['money']) {
                    $result['more_html'] = '<div class="badg btn-block c-yellow em09 padding-h10">请扫码后支付' . $result['money'] . '元,为了确保支付成功,请注意付款金额请勿出错</div>';
                }
                $result['order_price'] = $result['money'];
            }
        } elseif (isset($result['code']) && 1 == $result['code'] && (!empty($result['payurl']))) {
            $result['url']      = $result['payurl'];
            $result['open_url'] = true;
        } else {
            $result['error'] = 1;
            $result['msg']   = !empty($result['msg']) ? $result['msg'] : '收款码请求失败';
        }
        return $result;
    }
}

前端支付方式

这一步的教程为修改 zibpay-func.php 增加前端支付时的选项,也就是类别 搜索 //支付方式 增加以下代码:

//支付方式
function zibpay_get_payment_methods($pay_type = 0)
{
    $payment_method_args = zibpay_get_payment_method_args();
    $methods             = array();
    $pay_wechat_sdk      = _pz('pay_wechat_sdk_options');
    $pay_alipay_sdk      = _pz('pay_alipay_sdk_options');
    $pay_usdt_sdk = _pz('pay_usdt_sdk_options'); //usdt-1
    $pay_qq_sdk = _pz('pay_qq_sdk_options');

    if ($pay_usdt_sdk && 'null' != $pay_usdt_sdk) { //usdt-2
        $methods['usdt'] = $payment_method_args['usdt'];
    }

    if ($pay_qq_sdk && 'null' != $pay_qq_sdk) {
        $methods['qq'] = $payment_method_args['qq'];
    }

    if ($pay_wechat_sdk && 'null' != $pay_wechat_sdk) {
        $methods['wechat'] = $payment_method_args['wechat'];
    }

    if ($pay_alipay_sdk && 'null' != $pay_alipay_sdk) {
        $methods['alipay'] = $payment_method_args['alipay'];
    }

    if (_pz('pay_paypal_sdk_s')) {
        $methods['paypal'] = $payment_method_args['paypal'];
    }

    if (zibpay_is_allow_balance_pay($pay_type)) {
        $methods['balance'] = $payment_method_args['balance'];
    }

    if (zibpay_is_allow_card_pass_pay($pay_type)) {
        $methods['card_pass'] = $payment_method_args['card_pass'];
    }
//支付方式参数数组
function zibpay_get_payment_method_args()
{

    $payment_method_names = array(
        'wechat'    => array(
            'name' => '微信',
            'img'  => '<img src="' . ZIB_TEMPLATE_DIRECTORY_URI . '/zibpay/assets/img/pay-wechat-logo.svg" alt="wechat-logo">',
        ),
        'alipay'    => array(
            'name' => '支付宝',
            'img'  => '<img src="' . ZIB_TEMPLATE_DIRECTORY_URI . '/zibpay/assets/img/pay-alipay-logo.svg" alt="alipay-logo">',
        ),
        'usdt' => array( //usdt-3
            'name' => 'USDT',
            'img'  => '<img src="' . vxras_pz('static_vxras') . '/zibpay/assets/img/pay-usdt-logo.svg" alt="usdt-logo">',
        ),
        'qq' => array(
            'name' => 'QQ',
            'img'  => '<img src="' . vxras_pz('static_vxras') . '/zibpay/assets/img/pay-qq-logo.svg" alt="qq-logo">',
        ),
        'balance'   => array(
            'name' => '余额',
            'img'  => '<img src="' . ZIB_TEMPLATE_DIRECTORY_URI . '/zibpay/assets/img/pay-balance-logo.svg" alt="balance-logo">',
        ),
        'points'    => array(
            'name' => '积分',
            'img'  => '',
        ),
        'card_pass' => array(
            'name' => '卡密',
            'img'  => '<img src="' . ZIB_TEMPLATE_DIRECTORY_URI . '/zibpay/assets/img/pay-card-pass-logo.svg" alt="card-pass-logo">',
        ),
        'paypal'    => array(
            'name' => 'PayPal',
            'img'  => '<img src="' . ZIB_TEMPLATE_DIRECTORY_URI . '/zibpay/assets/img/pay-paypal-logo.svg" alt="PayPal-logo">',
        ),
    );

    return $payment_method_names;
}
'points'  => '积分',
        'balance' => '余额',
        'wechat'  => '微信',
        'alipay'  => '支付宝',
        'qq'  => 'QQ',
        'usdt'  => 'USDT',
        'paypal'  => 'PayPal',

剩下的就是CSS和JS,可以不改,也可以改,有图片路径的要自己改,不能完全复制

/*----支付弹窗------*/

.pay-payment.wechat .pay-logo {
    background-image: url(../img/pay-wechat-logo.svg);
}

.pay-payment.alipay .pay-logo {
    background-image: url(../img/pay-alipay-logo.svg);
}

.pay-payment.usdt .pay-logo {
    background-image: url(/wp-content/themes/vxras/zibpay/assets/img/pay-usdt-logo.svg);
}

.pay-payment.qq .pay-logo {
    background-image: url(/wp-content/themes/vxras/zibpay/assets/img/pay-qq-logo.svg);
}
.pay-payment.alipay .pay-notice .notice {
    background: #15acff;
}

.pay-payment.qq .pay-notice .notice{
    background: #f75754;
}

.pay-payment.usdt .pay-notice .notice{
    background: #3bc5a3;
}
function init() {
    var _modal_html = '<div class="modal fade flex jc" style="display:none;" id="' + modal_id + '" tabindex="-1" role="dialog" aria-hidden="false">\
    <div class="modal-dialog" role="document">\
        <div class="pay-payment alipay">\
            <div class="modal-body modal-pay-body">\
                <div class="row-5 hide-sm">\
                    <img class="lazyload pay-sys t-wechat" alt="alipay" src="" data-src="' + _win.uri + '/zibpay/assets/img/alipay-sys.png">\
                    <img class="lazyload pay-sys t-alipay" alt="wechat" src="" data-src="' + _win.uri + '/zibpay/assets/img/wechat-sys.png">\
                    <img class="lazyload pay-sys t-qq" alt="usdt" src="" data-src="/wp-content/themes/vxras/zibpay/assets/img/usdt-sys.webp">\
                    <img class="lazyload pay-sys t-usdt" alt="qq" src="" data-src="/wp-content/themes/vxras/zibpay/assets/img/qq-sys.png">\
                </div>\
                <div class="row-5">\
                <div class="pay-qrcon">\
                    <div class="qrcon">\
                        <div class="pay-logo-header mb10"><span class="pay-logo"></span><span class="pay-logo-name t-wechat">支付宝</span><span class="pay-logo-name t-alipay">微信支付</span><span class="pay-logo-name t-qq">USDT支付</span><span class="pay-logo-name t-usdt">QQ支付</span></div>\
                        <div class="pay-title em09 muted-2-color padding-h6"></div>\
                        <div><span class="em09">¥</span><span class="pay-price em14"></span></div>\
                        <div class="pay-qrcode">\
                            <img src="" alt="pay-qrcode">\
                        </div>\
                    </div>\
                <div class="pay-switch"></div>\
                <div class="pay-notice"><div class="notice load">正在生成订单,请稍候</div></div>\
                </div>\
            </div>\
            </div>\
        </div>\
    </div>\
</div>';