在插件或系统的二次开发中会用到付款功能时,可以运用此教程来完成支付下单功能
例如插件目录:App/Test 插件
一、设计数据库
- CREATE TABLE `dr_test` (
- `id` int(11) NOT NULL,
- `title` varchar(255) NOT NULL COMMENT '产品名称',
- `price` varchar(255) NOT NULL COMMENT '产品价格',
- `inputtime` int(11) NOT NULL COMMENT '发布时间'
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
- ALTER TABLE `dr_test`
- ADD PRIMARY KEY (`id`);
- ALTER TABLE `dr_test`
- MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
二、设计表单支付模型
App/Models/Buy.php
- <?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
- }
- }
三、发起支付
表单参数格式:
- my-插件目录_模型名称-相关ID-数量-SKU参数值
那么调用表单格式为(可以放到任意前台html页面之中):
- {dr_payform("my-test_buy-111")}
111表示test表的id号,cms会查询111记录的price字段作为付款金额
四、支付回调
上面(二)中的App/Models/Buy.php模型类,回调方法:success
开发者可以在success方法内完成支付后的动作,比如更新数据库等操作
文档最后更新时间:2018-02-05 15:41:00