智简魔方文档

支付接口开发

位置

支付接口放在 public/plugins/gateway/ 目录下

目录结构

public/plugins/gateway/ali_pay_dmf/
|--- controller (外部调用)
|--- config
|----- config.php(支付宝 SDK 配置文件,位于 config/ 目录)
|--- AliPayDmf.php (入口文件)
|--- config.php (配置项客户配置项,在插件设置中显示)
|--- AliPayDmf.png (支付界面上要显示的图片)

开发流程

以支付宝当面付为例:

创建支付宝当面付目录 public/plugins/gateway/ali_pay_dmf/

①目录名以小写字母+下划线形式,必须以字母开头,如ali_pay_dmf;

创建入口文件:AliPayDmf.php

命名空间namespace gateway\ali_pay_dmf(控制器下命名空间对应相应目录即可,其它同理);

②以目录名大驼峰+.php,创建在支付接口根目录下,如ali_pay_dmf\AliPayDmf.php;

③文件中需要定义info属性,示例:

// 插件基础信息
public $info = array(
    'name'        => 'AliPayDmf', // 必填 插件标识(唯一)
    'title'       => '支付宝当面付插件', // 必填 插件显示名称
    'description' => '支付宝当面付插件', // 必填 插件功能描述
    'author'      => 'idcsmart', // 必填 插件作者
    'version'     => '1.0',  // 必填 插件版本
    'help_url'    => '', // 选填 申请链接
    'author_url'  => '', // 选填 作者链接
    'url'         => '', // 选填 图标地址(可以自定义支付图片地址)
);

④定义临时订单生成规则,系统默认规则1:

// 临时订单生成规则,1:毫秒时间戳+8位随机数(21-22位长度订单号,默认规则),2:时间戳+8位随机数(18位长度订单号),3:10位随机数(10位长度订单号)
public $orderRule=1;

⑤必须实现install()安装以及uninstall()卸载方法

⑥必须实现入口方法,发起支付:目录名大驼峰+Handle;

方法签名:

public function AliPayDmfHandle($param)

参数 param 为数组,以下使用 JSON 展示:

{
  "out_trade_no": "1660030044500783722161",
  "client": {
    "id": 62,
    "username": "wyh",
    "company": "智简魔方",
    "address": "示例地址",
    "country": "中国",
    "phone_code": 86,
    "phone": "12345678910",
    "email": ""
  },
  "product": [
    "魔方云"
  ],
  "global": {
    "website_name": "智简魔方",
    "website_url": "https://test.test.com"
  },
  "finance": {
    "id": 1728,
    "total": "500.00",
    "tmp_order_id": "1660030044500783722161",
    "tmp_order_id2": "166003004463630999",
    "tmp_order_id3": "5075991847"
  }
}

参数说明

参数类型必填说明
out_trade_nostring临时订单号
client.idinteger客户ID
client.usernamestring客户姓名
client.companystring公司
client.addressstring地址
client.countrystring国家
client.phone_codestring国家区号
client.phonestring电话
client.emailstring邮件
productarray商品数组
global.website_namestring网站名称
global.website_urlstring网站地址
finance.idinteger订单号
finance.totalnumber订单金额
finance.tmp_order_idstring规则1的临时订单号
finance.tmp_order_id2string规则2的临时订单号
finance.tmp_order_id3string规则3的临时订单号

⑦入口方法(发起支付)返回html即可,系统会将html渲染至支付输出页面;

返回值

字段类型说明
返回值HTML系统将 HTML 渲染至支付输出页面

确定是否需要后台配置文件,如果需要,在支付接口根目录下加上config.php,示例

return [
    'module_name'            => [    # 在后台插件配置表单中的键名(统一规范:小写+下划线),会是config[module_name]
        'title' => '名称',            # 表单的label标题
        'type'  => 'text',           # 表单的类型:text文本,password密码,checkbox复选框,select下拉,radio单选,textarea文本区域,tip提示
        'value' => '支付宝当面付',     # 表单的默认值
        'tip'   => 'friendly name',  # 表单的帮助提示
        'size'  => 200,               # 输入框长度(当type类型为text,password,textarea,tip时,可传入此键)
    ],
    'app_id'                 => [
        'title' => 'appID',
        'type'  => 'text',
        'value' => '',
        'tip'   => '',
        'size'  => 200,
    ],
    'merchant_private_key'   => [
        'title' => '商户私钥',
        'type'  => 'password',
        'value' => '',
        'tip'   => '商户私钥,保存后不应完整回显',
        'size'  => 200,
    ],
    'alipay_public_key'      => [
        'title' => '支付宝公钥',
        'type'  => 'text',
        'value' => '',
        'tip'   => '',
        'size'  => 200,
    ],
    # 此配置作为范例
    'mode'                   => [
        'title'      => '模式',
        'type'       => 'radio',
        'options'    => [            # 当type类型为checkbox,select,radio时,需要有此键,作为选项
            'debug'  => '调试',
            'online' => '上线',
        ],
        'value'      => 'online',
        'tip'        => '请选择模式',
        'attribute'  => 'disabled',  # 属性,加入此键:disabeld表示禁止编辑,只能看;
    ],

];

需要外部访问,在根目录下创建controller目录,添加控制器,处理异步或同步回调

①创建自定义控制器,如controller/IndexController.php;

②自定义异步回调方法,如 notifyHandle(),则异步回调地址为:

网站地址/gateway/ali_pay_dmf/index/notifyHandle

③在②的方法中处理支付回调逻辑,进行订单等的验证;

④支付成功调系统订单处理方法order_pay_handle($param),传入数组参数:

$param = [

     'tmp_order_id' => 123456, // 临时订单ID

     'amount' => 1.00, // 支付金额

     'trans_id' => 22483701327490139472, // 交易流水ID

     'currency' => 'CNY', // 货币代码

     'paid_time' => '2022-08-09 15:52:19', // 时间,**注意必须是此标准格式**

     'gateway' => 'AliPayDmf', // 支付接口标识

];

到后台支付接口管理界面刷新就会看到新添加的支付接口,安装、配置即可使用

示例

参考支付宝当面付ali_pay_dmf