请教自定义付款(https://www.xunruicms.com/doc/458.html)一个问题。
看到官方文档中自定义付款示例如下:
<?php namespace Phpcmf\Model\App; // 这里需要把App改成项目目录名称
// 付款模型示例
class Buy extends \Phpcmf\Model
{
private $row;
// 付款表单格式
public function get_myfield() {
return [
'fieldtype' => 'Pay', // 字段类型
'fieldname' => 'price',
'setting' => [
'option' => [
'payfile' => '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['price']; // 测试200
}
// 付款数据
// $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']);
}
// 根据id查询表数据
// $id 记录id; $siteid 站点id
private function _get_row($id, $siteid) {
if (isset($this->row[$id]) && $this->row[$id]) {
return $this->row[$id];
}
$this->row[$id] = $this->table('test')->get($id);
return $this->row[$id];
}
// 付款成功跳转URL
// $id 记录id; $paylog 支付表记录数组
public function call_url($id, $paylog) {
return dr_url_prefix("/index.php"); // 跳转url
}
}这段代码中get_price()是针对数据库已经有具体定价然后通过数据库读取定价再进行支付调用,我这边的需求是用户自行输入金额(类似打赏),而不是从数据库中get_price(),请问如何实现?试了下$post和\Phpcmf\Service::L('input') 都获取不到post 的值。
其实功能需求就是类似官方的donation(模块内容打赏)插件,但因为官方的插件代码都集成到框架中了,所以不能仿照,请各位大大不吝赐教。
然后点击付款的时候因为获取不到post的值而提示金额不规范。
{dr_payform("my-test_buy-111")}缓存用户输入的内容还得再写个控制器吧,感觉绕路了,或者您说的缓存具体怎么实现,麻烦明示一下。// 付款前的权限验证,返回null表示可进行付款,返回字符串是就输出字符串 // $id 记录id; $paylog 支付表记录数组; $num 数量; $sku 自定义属性 public function pay_before($id, $num, $sku, $siteid) { \Phpcmf\Service::L('cache')->set_data("test".\Phpcmf\Service::L('input')->get_user_agent().$this->uid, $_POST['post值'], 60); return ''; } // 付款价格 // $id 记录id; $num 数量; $sku 自定义属性; $siteid 站点id public function get_price($id, $num, $sku, $siteid) { return \Phpcmf\Service::L('cache')->get_data("test".\Phpcmf\Service::L('input')->get_user_agent().$this->uid); }public function pay_before($id, $num, $sku, $siteid) { \Phpcmf\Service::L('cache')->set_data("test".\Phpcmf\Service::L('input')->get_user_agent().$this->uid, $_POST['post值'], 60); return ''; }这里的$_POST就获取不到值,是我哪里不对吗?// 付款表单格式 public function get_myfield() { return [ 'fieldtype' => 'Pay', // 字段类型 'fieldname' => 'price', 'setting' => [ 'option' => [ 'payfile' => 'aaaaaaaaa.html', // 模板文件 'is_finecms' => 1, // 是否启用余额付款 ], ] ]; }aaaaaa.html模板是支付模板,你要把输入框写在这个模板里面,我记得是config/pay/aaaaaaa.html新建// 付款前的权限验证,返回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) { return \Phpcmf\Service::L('cache')->get_data("test".\Phpcmf\Service::L('input')->get_user_agent().$this->uid); } // 付款数据 // $id 记录id; $num 数量; $sku 自定义属性; $siteid 站点id public function get_row($id, $num, $sku, $siteid) { if ($_POST) { \Phpcmf\Service::L('cache')->set_data("test".\Phpcmf\Service::L('input')->get_user_agent().$this->uid, $_POST['pay']['money'], 60); } // 查询数据记录,判断是否存在 $data = $this->_get_row($id, $siteid); return [ 'price' => $this->get_price($id, $num, $sku, $siteid), 'title' => '支付记录标题'.$data['title'], 'sell_uid' => 0, // 商家uid 'sell_username' => '', // 商家账号 ]; }支付的html是<div class="form-group"> <label class="col-md-3 control-label">支付金额</label> <div class="col-md-2"> <input type="text" name="pay[money]" value="" class="form-control"> </div> </div>post一定要是还好电脑有笔记