电话
13363039260
项目需求:
我发布一个内容,内容里面包含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", "/"}