自定义付款:模块表单发起支付

2024-01-26 13:48 小编

项目需求:

我发布一个内容,内容里面包含2个费用。 也就是比如说 
1、报名费,
2、保险费
创建了这2个字段,然后也创建了模块表单字段,
前端提交表单的时候,同时显示出来当前提交预约内容的 这2个费用字段,
然后在支付,
比如说 内容里面设置的是 报名费100, 保险费50,
点击提交模块表单后就跳转支付,并且支付的金额是100+50.

需求分析它满足自定义付款教程的付款流程:http://help.xunruicms.com/458.html

准备工作:

1、创建模块主表字段,比如模块是Demo

报名费:bmf     Text类型

保险费:bxf     Text类型

2、创建模块表单,比如是 预约,Yuyue

可以在模块表单里面创建一个字段,表示是否支付,sfzf Radio字段,1表示支付,0表示未支付


开发流程:

1、按上面的文档,创建文件:dayrui/App/Demo/Models/Buy.php

<?php namespace Phpcmf\Model\Demo; // 这里需要把Demo改成项目目录名称


// 付款模型示例

class Buy extends \Phpcmf\Model

{


    private $row;


    // 付款表单格式

    public function get_myfield() {


        return [

            'fieldtype' => 'Pay', // 字段类型

            'fieldname' => 'price',

            'setting' => [

                'option' => [

                    'payfile' => 'buy.html', // 模板文件config/pay/buy.html

                    'is_finecms' => 1, // 是否启用余额付款

                ],

            ]

        ];

    }


    // 付款类型名称

    public function paytype() {

        return  '<span class="label label-danger"> 测试 </span>'; // 最好2个汉字表述

    }

    

    // 付款前的权限验证,返回null表示可进行付款,返回字符串是就输出字符串

    // $id 记录id; $paylog 支付表记录数组; $num 数量; $sku 自定义属性

    public function pay_before($id, $num, $sku, $siteid) {

     return '';

    }


    // 付款价格

    // $id 记录id; $num 数量; $sku 自定义属性; $siteid 站点id

    public function get_price($id, $num, $sku, $siteid) {


        // 计算付款价格

        $data = $this->_get_row($id, $siteid);


        return $data['index']['bmf'] + $data['index']['bxf']; // 报名费+保险费

    }


    // 付款数据

    // $id 记录id; $num 数量; $sku 自定义属性; $siteid 站点id

    public function get_row($id, $num, $sku, $siteid) {


        // 查询数据记录,判断是否存在

        $data = $this->_get_row($id, $siteid);


        return [

            'price' => $this->get_price($id, $num, $sku, $siteid),

            'title' => '支付记录标题'.$data['title'],

            'sell_uid' => 0, // 商家uid

            'sell_username' => '', // 商家账号

        ];

    }


    // 付款成功

    // $id 记录id; $paylog 支付表记录数组; $num 数量; $sku 自定义属性

    public function success($id, $paylog, $num, $sku) {


        // 支付成功之后的回调处理动作

        $data = $this->_get_row($id, $paylog['site']);

        

        // 支付成功后更新状态

        $this->table($paylog['site'].'_demo_form_yuyue')->update($data['id'], [

            'sfzf' => 1,

        ]);


    }


    // 根据id查询表数据

    // $id 记录id;  $siteid 站点id

    private function _get_row($id, $siteid) {


        if (isset($this->row[$id]) && $this->row[$id]) {

            return $this->row[$id];

        }


        $yuyue = $this->table($siteid.'_demo_form_yuyue')->get($id);

        $yuyue['index'] = $this->table($siteid.'_demo')->get($yuyue['cid']);

        

        $this->row[$id] = $yuyue;

        

        return $this->row[$id];

    }

    

    

    // 付款成功跳转URL

    // $id 记录id; $paylog 支付表记录数组

    public function call_url($id, $paylog) {

        return dr_url_prefix("/index.php"); // 跳转url

    }

}

2、打开模块表单yuyue控制器,我们做一个提交成功后跳转到支付页面的功能

dayrui/App/Demo/Controllers/Yuyue.php


<?php namespace Phpcmf\Controllers;


/**

 * 二次开发时可以修改本文件,不影响升级覆盖

 */


class Yuyue extends \Phpcmf\Home\Mform

{


    public function index() {

        $this->_Home_List();

    }


    public function show() {

        $this->_Home_Show();

    }


    public function post() {

        $this->_Home_Post();

    }

    

    /**

     * 回调处理结果

     * $data

     * */

    protected function _Call_Post($data) {

    

        // 提交后跳转的url地址

        $data['url'] = dr_url("demo/yuyue/pay", ['id' => $data[1]['id']]);

        if ($data[1]['status']) {

            // 挂钩点

            \Phpcmf\Hooks::trigger('module_form_post_after', $data);

            return dr_return_data($data[1]['id'], dr_lang('操作成功'), $data);

        } else {

            return dr_return_data($data[1]['id'], dr_lang('操作成功,等待管理员审核'), $data);

        }

    

    }

    

    /**

     * 支付页面控制器

     * */

    public function pay() {

    

        \Phpcmf\Service::V()->assign("id", (int)$_GET['id']);

        \Phpcmf\Service::V()->display("pay.html");

    }

}

3、新建支付模板文件

template/pc/default/home/demo/pay.html

{template "header.html", "/"}


<div class="page-wrapper-row full-height">

    <div class="page-wrapper-middle">

        <div class="page-head">

            <div class="container">

                <div class="page-title">

                    支付页面

                </div>

            </div>

        </div>

        <div class="page-content">


            <div class="portlet-body margin-top-20">


                {dr_payform("my-demo_buy-".$id)}


            </div>


        </div>

    </div>

</div>


{template "footer.html", "/"}


在线咨询 拨打电话

电话

13363039260

内部绝密传真282期

微信二维码