全局表单,提交并付款的效果

开发思路,参考官方的付款手册,https://www.xunruicms.com/doc/458.html
官方提供的流程时表单提交后,然后进行单击付款,我这套方案就不用点击两次,一次性提交和付款一起操作。
开发流程:
1、新建表单,名字取名为ceyice
2、进入自定义字段,然后创建payid字段,来存储是否支付成功的id号
3、新建支付类文件:dayrui/App/Form/Models/Ceyice.php
<?php namespace Phpcmf\Model\Form; // 这里需要把App改成项目目录名称
// 付款模型示例
class Ceyice extends \Phpcmf\Model
{
private $row;
// 付款表单格式
public function get_myfield() {
return [
'fieldtype' => 'Pay', // 字段类型
'fieldname' => 'price',
'setting' => [
'option' => [
'payfile' => 'ceyice.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['price'];
}
// 付款数据
// $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_site('form_ceyice')->update($id, ['payid' => $paylog['id']]);
}
// 根据id查询表数据
// $id 记录id; $siteid 站点id
private function _get_row($id, $siteid) {
return [
'title' => '',
'price' => 200, // 测试200
];
}
// 付款成功跳转URL
// $id 记录id; $paylog 支付表记录数组
public function call_url($id, $paylog) {
return dr_url_prefix("/index.php"); // 跳转url
}
}4、修改表单控制器文件:dayrui/App/Form/Contrllers/Ceyice.php
<?php namespace Phpcmf\Controllers;
/**
* 二次开发时可以修改本文件,不影响升级覆盖
*/
class Ceyice extends \Phpcmf\Home\Form
{
public function index() {
$this->_Home_List();
}
public function show() {
$this->_Home_Show();
}
public function post() {
$this->_Home_Post();
}
//
protected function _Call_Post($data) {
// 组合发起支付功能
$pay = [
'mark' => 'my-form_ceyice-'.$data[1]['id'],
'title' => '支付发起',
'money' => 200, // 测试200
];
$pay['uid'] = (int)$this->member['uid'];
$pay['username'] = (string)$this->member['username'];
$pay['type'] = $_POST['pay']['type'];
$money = floatval($pay['money']);
if (!$money) {
$this->_msg(0, dr_lang('金额(%s)不正确', $money));
exit;
}
$rt = \Phpcmf\Service::M('Pay')->post($pay);
if (!$rt['code']) {
$this->_msg(0, $rt['msg']);
}
$url = PAY_URL.'index.php?s=pay&id='.$rt['code'];
if (IS_API_HTTP || (\Phpcmf\Service::L('input')->get('is_ajax') || IS_API_HTTP || IS_AJAX)) {
// 回调页面
$this->_json($rt['code'], "提交成功,即将进入付款", ['url' => $url]);
} else {
// 跳转到支付页面,必须跳转到统一的主域名中付款
dr_redirect($url, 'auto');
}
return parent::_Call_Post($data);
}
}5、新建支付文件 config/pay/ceyice.html
<input type="hidden" name="pay[url]" value="{$html.url}" />
<input type="hidden" name="pay[mark]" value="{$html.mark}" />
<input type="hidden" name="pay[title]" value="{$html.title}" />
<div class="form-body form">
<div class="form-group">
<label class="col-md-3 control-label">支付金额</label>
<div class="col-md-2">
<input type="hidden" value="{$html.pay_value}" name="pay[money]">
<p class="form-control-static fc-price-color"> <i class="fa fa-rmb"></i> {number_format($html.pay_value, 2)} 元</p>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label">账户余额</label>
<div class="col-md-2">
<p class="form-control-static fc-price-color"> <i class="fa fa-rmb"></i> {number_format($member.money, 2)} 元</p>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" style="padding-top:10px">付款方式</label>
<div class="col-md-5">
<div class="btn-group" data-toggle="buttons">
{loop $html.pay_type $name $t}
<input type="radio" name="pay[type]" {if $name == $html.pay_default}selected{/if}" value="{$name}" class="toggle"> {$t['icon']} {$t['name']} </label>
{/loop}
</div>
</div>
</div>
</div>6、修改表单框架代码:在表单提交form内部加上
{dr_payform("my-form_ceyice-sn")} {php $rt_url="";}
7、效果就是图一的效果了
支持迅睿开源精神,我把我在开发中做的一些笔记分享,需要有开发基础的开发者才能看得懂,也可以接收付费定制!
大神这个字段是什么类型 文本 还是组合购买或是单一购买