显示目录
DSO2O帮助手册 DSO2O技术手册 DSO2O开发手册

增加支付插件

如果需要为系统增加新的支付能力,可以将支付插件放到\plugins\payments目录中。

首先新增一个目录,名称最好为新支付插件的名称,该目录中至少需要包含两个文件,{支付插件名称}.php以及payment.info.php{支付插件名称}.php的名称需要与它的上级目录名称一致。

payment.info.php用数组保存支付插件信息,payment_code{支付插件名称}payment_name为支付插件的展示名称,payment_desc为支付插件的介绍,payment_is_online表示是否是线上支付方式,payment_platform为支付插件应用的场景,值有pc(电脑端)、h5(手机端)、appapp端),payment_author为作者名称,payment_website为支付插件官网链接,payment_version为支付插件的版本信息,payment_config为支付插件需要用到的配置参数,其中的name为配置参数名,type为配置参数的输入类型,有text(文本型)、textarea(多行文本型)、file(文件型)。

return array(
    'payment_code' => 'wxpay_h5',
    'payment_name' => '微信H5支付',
    'payment_desc' => '微信H5支付',
    'payment_is_online' => '1',
    'payment_platform' => 'h5', #支付平台 pc h5 app
    'payment_author' => '长沙德尚',
    'payment_website' => 'http://www.alipay.com',
    'payment_version' => '1.0',
    'payment_config' => array(
        array('name' => 'wx_appid', 'type' => 'text', 'value' => '', 'desc' => '描述'),
        array('name' => 'wx_appsecret', 'type' => 'text', 'value' => '', 'desc' => '描述'),
        array('name' => 'wx_mch_id', 'type' => 'text', 'value' => '', 'desc' => '描述'),
        array('name' => 'wx_key', 'type' => 'text', 'value' => '', 'desc' => '描述'),
    ),
);

 

在{支付插件名称}.php文件中,需要实现get_payformreturn_verifyverify_notify方法。

系统调用get_payform生成支付单,其中$order_info参数为待支付订单信息,含有pay_sn(商户订单号)、api_pay_amount(交易金额)、order_type(订单类型)、subject(订单描述)。

        //构造参数
        $payRequestBuilder = new AlipayTradePagePayContentBuilder();
        $payRequestBuilder->setBody($order_info['order_type']);
        $payRequestBuilder->setSubject($order_info['subject']);
        $payRequestBuilder->setTotalAmount($order_info['api_pay_amount']);
        $payRequestBuilder->setOutTradeNo($order_info['order_type'] . '-' . $order_info['pay_sn']);

 

verify_notify和return_verify都要返回结果数组,其中trade_status表示支付验证状态,0为失败1为成功,out_trade_no为商户订单号,trade_no交易凭证单号,total_fee为交易金额,order_type为订单类型。

        $return_result = array(
                'trade_status' => '0',
            );

 

            $return_result = array(
                    'out_trade_no' => $out_trade_no, #商户订单号
                    'trade_no' => input('param.trade_no'), #交易凭据单号
                    'total_fee' => input('param.total_amount'), #涉及金额
                    'order_type' => $order_type,
                    'trade_status' => '1',
                );