在插件或系统的二次开发中会用到付款功能时,可以运用此教程来完成支付下单功能

    image.png

    例如插件目录:App/Test 插件

    一、设计数据库

    1. CREATE TABLE `dr_test` (
    2. `id` int(11) NOT NULL,
    3. `title` varchar(255) NOT NULL COMMENT '产品名称',
    4. `price` varchar(255) NOT NULL COMMENT '产品价格',
    5. `inputtime` int(11) NOT NULL COMMENT '发布时间'
    6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    7.  
    8. ALTER TABLE `dr_test`
    9. ADD PRIMARY KEY (`id`);
    10. ALTER TABLE `dr_test`
    11. MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

    二、设计表单支付模型

    App/Models/Buy.php

    1. <?php namespace Phpcmf\Model\App; // 这里需要把App改成项目目录名称
    2.  
    3. // 付款模型示例
    4. class Buy extends \Phpcmf\Model
    5. {
    6.  
    7. private $row;
    8.  
    9. // 付款表单格式
    10. public function get_myfield() {
    11.  
    12. return [
    13. 'fieldtype' => 'Pay', // 字段类型
    14. 'fieldname' => 'price',
    15. 'setting' => [
    16. 'option' => [
    17. 'payfile' => 'buy.html', // 模板文件
    18. 'is_finecms' => 1, // 是否启用余额付款
    19. ],
    20. ]
    21. ];
    22. }
    23.  
    24. // 付款类型名称
    25. public function paytype() {
    26. return '<span class="label label-danger"> 测试 </span>'; // 最好2个汉字表述
    27. }
    28.  
    29. // 付款前的权限验证,返回null表示可进行付款,返回字符串是就输出字符串
    30. // $id 记录id; $paylog 支付表记录数组; $num 数量; $sku 自定义属性
    31. public function pay_before($id, $num, $sku, $siteid) {
    32. return '';
    33. }
    34.  
    35. // 付款价格
    36. // $id 记录id; $num 数量; $sku 自定义属性; $siteid 站点id
    37. public function get_price($id, $num, $sku, $siteid) {
    38.  
    39. // 计算付款价格
    40. $data = $this->_get_row($id, $siteid);
    41.  
    42. return $data['price']; // 测试200
    43. }
    44.  
    45. // 付款数据
    46. // $id 记录id; $num 数量; $sku 自定义属性; $siteid 站点id
    47. public function get_row($id, $num, $sku, $siteid) {
    48.  
    49. // 查询数据记录,判断是否存在
    50. $data = $this->_get_row($id, $siteid);
    51.  
    52. return [
    53. 'price' => $this->get_price($id, $num, $sku, $siteid),
    54. 'title' => '支付记录标题'.$data['title'],
    55. 'sell_uid' => 0, // 商家uid
    56. 'sell_username' => '', // 商家账号
    57. ];
    58. }
    59.  
    60. // 付款成功
    61. // $id 记录id; $paylog 支付表记录数组; $num 数量; $sku 自定义属性
    62. public function success($id, $paylog, $num, $sku) {
    63.  
    64. // 支付成功之后的回调处理动作
    65. $data = $this->_get_row($id, $paylog['site']);
    66.  
    67. }
    68.  
    69. // 根据id查询表数据
    70. // $id 记录id; $siteid 站点id
    71. private function _get_row($id, $siteid) {
    72.  
    73. if (isset($this->row[$id]) && $this->row[$id]) {
    74. return $this->row[$id];
    75. }
    76.  
    77. $this->row[$id] = $this->table('test')->get($id);
    78.  
    79. return $this->row[$id];
    80. }
    81.  
    82.  
    83. // 付款成功跳转URL
    84. // $id 记录id; $paylog 支付表记录数组
    85. public function call_url($id, $paylog) {
    86. return dr_url_prefix("/index.php"); // 跳转url
    87. }
    88. }

    三、发起支付

    表单参数格式:

    1. my-插件目录_模型名称-相关ID-数量-SKU参数值

    那么调用表单格式为(可以放到任意前台html页面之中):

    1. {dr_payform("my-test_buy-111")}

    111表示test表的id号,cms会查询111记录的price字段作为付款金额

    四、支付回调

    上面(二)中的App/Models/Buy.php模型类,回调方法:success

    开发者可以在success方法内完成支付后的动作,比如更新数据库等操作

    文档最后更新时间:2018-02-05 15:41:00