請(qǐng)教自定義付款(http://apdwn.com/doc/458.html)一個(gè)問(wèn)題。
看到官方文檔中自定義付款示例如下:
<?php namespace Phpcmf\Model\App; // 這里需要把App改成項(xiàng)目目錄名稱
// 付款模型示例
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"> 測(cè)試 </span>'; // 最好2個(gè)漢字表述
}
// 付款前的權(quán)限驗(yàn)證,返回null表示可進(jìn)行付款,返回字符串是就輸出字符串
// $id 記錄id; $paylog 支付表記錄數(shù)組; $num 數(shù)量; $sku 自定義屬性
public function pay_before($id, $num, $sku, $siteid) {
return '';
}
// 付款價(jià)格
// $id 記錄id; $num 數(shù)量; $sku 自定義屬性; $siteid 站點(diǎn)id
public function get_price($id, $num, $sku, $siteid) {
// 計(jì)算付款價(jià)格
$data = $this->_get_row($id, $siteid);
return $data['price']; // 測(cè)試200
}
// 付款數(shù)據(jù)
// $id 記錄id; $num 數(shù)量; $sku 自定義屬性; $siteid 站點(diǎn)id
public function get_row($id, $num, $sku, $siteid) {
// 查詢數(shù)據(jù)記錄,判斷是否存在
$data = $this->_get_row($id, $siteid);
return [
'price' => $this->get_price($id, $num, $sku, $siteid),
'title' => '支付記錄標(biāo)題'.$data['title'],
'sell_uid' => 0, // 商家uid
'sell_username' => '', // 商家賬號(hào)
];
}
// 付款成功
// $id 記錄id; $paylog 支付表記錄數(shù)組; $num 數(shù)量; $sku 自定義屬性
public function success($id, $paylog, $num, $sku) {
// 支付成功之后的回調(diào)處理動(dòng)作
$data = $this->_get_row($id, $paylog['site']);
}
// 根據(jù)id查詢表數(shù)據(jù)
// $id 記錄id; $siteid 站點(diǎn)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];
}
// 付款成功跳轉(zhuǎn)URL
// $id 記錄id; $paylog 支付表記錄數(shù)組
public function call_url($id, $paylog) {
return dr_url_prefix("/index.php"); // 跳轉(zhuǎn)url
}
}這段代碼中g(shù)et_price()是針對(duì)數(shù)據(jù)庫(kù)已經(jīng)有具體定價(jià)然后通過(guò)數(shù)據(jù)庫(kù)讀取定價(jià)再進(jìn)行支付調(diào)用,我這邊的需求是用戶自行輸入金額(類似打賞),而不是從數(shù)據(jù)庫(kù)中g(shù)et_price(),請(qǐng)問(wèn)如何實(shí)現(xiàn)?試了下$post和\Phpcmf\Service::L('input') 都獲取不到post 的值。
其實(shí)功能需求就是類似官方的donation(模塊內(nèi)容打賞)插件,但因?yàn)楣俜降牟寮a都集成到框架中了,所以不能仿照,請(qǐng)各位大大不吝賜教。
補(bǔ)充:
類似下圖,調(diào)用支付以后需要自行填寫金額
然后點(diǎn)擊付款的時(shí)候因?yàn)楂@取不到post的值而提示金額不規(guī)范。
我記得,充值那里是有自定義金額的
回復(fù)@小黃人 18html.com 是想自定義開發(fā),但是看官方的文檔接口獲取不到post的自定義金額
這個(gè)簡(jiǎn)單啊,將用戶輸入的金額存儲(chǔ)到本地緩存中,get_price就讀緩存金額,我做過(guò)這種,類似打賞
回復(fù)@易學(xué)習(xí) 這個(gè)官方的接口不能獲取post的值么?感覺(jué)用緩存存提交的數(shù)據(jù)不是個(gè)好辦法吧
ajax傳過(guò)去不就好了
四樓思路對(duì),我也是這樣開發(fā)的,get_price不能獲取post,但get_price可以獲取到緩存值
回復(fù)@靠懸賞(設(shè)置懸賞)賺錢買授權(quán) 但是官方調(diào)用的時(shí)候就一個(gè)
{dr_payform("my-test_buy-111")}緩存用戶輸入的內(nèi)容還得再寫個(gè)控制器吧,感覺(jué)繞路了,或者您說(shuō)的緩存具體怎么實(shí)現(xiàn),麻煩明示一下。
樓主不會(huì)舉一反三,post變量改成你自己的
// 付款前的權(quán)限驗(yàn)證,返回null表示可進(jìn)行付款,返回字符串是就輸出字符串 // $id 記錄id; $paylog 支付表記錄數(shù)組; $num 數(shù)量; $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 ''; } // 付款價(jià)格 // $id 記錄id; $num 數(shù)量; $sku 自定義屬性; $siteid 站點(diǎn)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); }回復(fù)@易學(xué)習(xí) 感謝回復(fù),但是
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就獲取不到值,是我哪里不對(duì)嗎?
就可以讀取用戶輸入的值,然后存儲(chǔ)這個(gè)值,賦值給支付變量,邏輯很簡(jiǎn)單
回復(fù)@易學(xué)習(xí) 為什么我在pay_before里也獲取不到post,無(wú)語(yǔ)了。。。
模板不對(duì)
// 付款表單格式 public function get_myfield() { return [ 'fieldtype' => 'Pay', // 字段類型 'fieldname' => 'price', 'setting' => [ 'option' => [ 'payfile' => 'aaaaaaaaa.html', // 模板文件 'is_finecms' => 1, // 是否啟用余額付款 ], ] ]; }aaaaaa.html模板是支付模板,你要把輸入框?qū)懺谶@個(gè)模板里面,我記得是config/pay/aaaaaaa.html新建
回復(fù)@易學(xué)習(xí) 模板也沒(méi)問(wèn)題啊
好像是我把函數(shù)寫錯(cuò)了,我晚上回家看看我電腦以前的代碼
// 付款前的權(quán)限驗(yàn)證,返回null表示可進(jìn)行付款,返回字符串是就輸出字符串 // $id 記錄id; $paylog 支付表記錄數(shù)組; $num 數(shù)量; $sku 自定義屬性 public function pay_before($id, $num, $sku, $siteid) { return ''; } // 付款價(jià)格 // $id 記錄id; $num 數(shù)量; $sku 自定義屬性; $siteid 站點(diǎn)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); } // 付款數(shù)據(jù) // $id 記錄id; $num 數(shù)量; $sku 自定義屬性; $siteid 站點(diǎn)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); } // 查詢數(shù)據(jù)記錄,判斷是否存在 $data = $this->_get_row($id, $siteid); return [ 'price' => $this->get_price($id, $num, $sku, $siteid), 'title' => '支付記錄標(biāo)題'.$data['title'], 'sell_uid' => 0, // 商家uid 'sell_username' => '', // 商家賬號(hào) ]; }支付的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一定要是
還好電腦有筆記