开发教程
关注DiYunCMS公众号
公众号二维码

输入金额的付款/支付/收费

更新时间:2020-10-25 加入收藏

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

image

本教程用于让用户自己输入金额并付款的功能


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


一、设计表单支付模型

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' => 'pay.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 '';
    }
    
    // 付款后的验证,一般验证金额是否符合规则,返回null表示可进行付款,返回字符串是就输出字符串
    // $id 记录id; $paylog 支付表记录数组; $num 数量; $sku 自定义属性
    public function pay_after($id, $num, $sku, $siteid) {
  /*
  $price = $this->get_price($id, $num, $sku, $siteid);
  if ($price < 10) {
   return '最小支付10元';
  }*/
      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;  $siteid 站点id
    private function _get_row($id, $siteid) {

        if (isset($this->row[$id]) && $this->row[$id]) {
            return $this->row[$id];
        }
        
        // 此方法只能用于支付前的调用,支付成功后将不能调用post值
 $pay = \Phpcmf\Service::L('input')->post('pay'); // 这里接受pay.html模板的输入金额值
        $this->row[$id] = [
     'title' => '义务捐赠收款',
     'price' => $pay['money'],
 ];

        return $this->row[$id];
    }
    
    
    // 付款成功跳转URL
    // $id 记录id; $paylog 支付表记录数组
    public function call_url($id, $paylog) {
        return dr_url_prefix("/index.php"); // 跳转url
    }
}


二、发起支付

表单参数格式:

my-插件目录_模型名称-相关ID-数量-SKU参数值 (数量-SKU参数值可以忽略)

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

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

111表示标注的id号,可以作为发起收款的记录ID号,比如是什么情况下发起收款的


三、支付回调

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

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


Hello,欢迎来咨询~
点击在线咨询