财务系统使用文档>其他>如何开发自己的支付接口
config.php,格式查看下方“配置文件”4.如需外部访问,请加controller目录,再添加Controller文件5.到后台插件管理刷新界面就会看到你新添加的插件二、创建目录网关目录在程序的根目录 `/modules/gateways`目录名应字母小写+下划线形式,并且必须以字母开头 例:`/modules/gateways/demo/`三、创建入口文件文件名应为目录名大驼峰+Plugin.php,创建在你的网关目录下,例:`demo/DemoPlugin.php`#### info属性在网关入口文件定义类属性`info`来配置网关的基本信息(见示例)#### 发起支付##### 支付参数网关的支付方法会以数组的形式接受支付参数<font size="3">```$param['product_name'] # 产品名$param['out_trade_no'] # 订单编号$param['total_fee'] # 金额```</font>复制代码##### 响应参数发起支付需要统一以数组的形式返回<font size="3">```php<?php return [ 'type' => $type, 'data' =>$data,];```</font>复制代码财务系统目前支持三种形式的支付请求1.当 `type=url` 时,[data]值为 转换二维码的url地址 由系统自动转换2.当 `type=insert` 时,[data]值为 第三方支付系统提供的二维码地址 由系统嵌入该二维码3.当 `type=jump` 时,[data]值为 需要跳转到第三方的支付链接网址4.当 `type=html` 时,[data]值为 需要提交的html表单#### 示例<font size="3">```php</font>复制代码### 配置文件 在你的网关根目录下加上config.php 即可定义配置<font size="3">```php<?phpreturn [ 'custom_config' => [// 在后台插件配置表单中的键名 ,会是config[custom_config],这个键值很特殊,是自定义插件配置的开关 'title' => '自定义配置处理', // 表单的label标题 'type' => 'text', // 表单的类型:text,password,textarea,checkbox,radio,select等 'value' => '0', // 如果值为1,表示由插件自己处理插件配置,配置入口在 AdminIndex/setting 'tip' => '自定义配置处理', //表单的帮助提示 ], 'text' => [// 在后台插件配置表单中的键名 ,会是config[text] 'title' => '999文本', // 表单的label标题 'type' => 'text', // 表单的类型:text,password,textarea,checkbox,radio,select等 'value' => 'hello,ThinkCMF!', // 表单的默认值 'tip' => '这是文本组件的演示', //表单的帮助提示 ], 'password' => [// 在后台插件配置表单中的键名 ,会是config[password] 'title' => '密码', 'type' => 'password', 'value' => '', 'tip' => '这是密码组件', ], 'number' => [ 'title' => '数字', 'type' => 'number', 'value' => '1.0', 'tip' => '这是数字组件的演示', ], 'select' => [// 在后台插件配置表单中的键名 ,会是config[select] 'title' => '下拉列表', 'type' => 'select', 'options' => [//select 和radio,checkbox的子选项 '1' => 'ThinkCMFX', // 值=>显示 '2' => 'ThinkCMF', '3' => '跟猫玩糗事', '4' => '门户应用', ], 'value' => '1', 'tip' => '这是下拉列表组件', ], 'checkbox' => [ 'title' => '多选框', 'type' => 'checkbox', 'options' => [ '1' => 'genmaowan.com', '2' => 'www.thinkcmf.com', ], 'value' => 1, 'tip' => '这是多选框组件', ], 'radio' => [ 'title' => '单选框', 'type' => 'radio', 'options' => [ '1' => 'ThinkCMFX', '2' => 'ThinkCMF', ], 'value' => '1', 'tip' => '这是单选框组件', ], 'radio2' => [ 'title' => '单选框2', 'type' => 'radio', 'options' => [ '1' => 'ThinkCMFX', '2' => 'ThinkCMF', ], 'value' => '1', 'tip' => '这是单选框组件2', ], 'textarea' => [ 'title' => '多行文本', 'type' => 'textarea', 'value' => '这里是你要填写的内容', 'tip' => '这是多行文本组件', ], 'date' => [ 'title' => '日期', 'type' => 'date', 'value' => '2017-05-20', 'tip' => '这是日期组件的演示', ], 'datetime' => [ 'title' => '时间', 'type' => 'datetime', 'value' => '2017-05-20', 'tip' => '这是时间组件的演示', ], 'color' => [ 'title' => '颜色', 'type' => 'color', 'value' => '#103633', 'tip' => '这是颜色组件的演示', ], 'image' => [ 'title' => '图片', 'type' => 'image', 'value' => '', 'tip' => '这是图片组件的演示', ], 'file' => [ 'title' => '文件', 'type' => 'file', 'value' => '', 'tip' => '这是文件组件的演示', ], 'location' => [ 'title' => '地理坐标', 'type' => 'location', 'value' => '', 'tip' => '这是地理坐标组件的演示', ],];```</font>复制代码### 回调文件#### 异步回调异步回调统一放在网关根目录下的`controller/IndexController.php`由 `notifyHandle` 方法处理当然你也可以在controller中自定义回调方法, 回调地址为:完整域名/gateway/payssion/index/notifyHandle方法中你可以处理相关验证,然后调用系统函数 `check_pay` 传入数组参数:<font size="3">```$data['invoice_id'] // 订单id$data['payment'] // 支付方式$data['paid_time'] // 支付时间$data['trans_id'] // 三方交易id$data['total_fee'] // 金额$data['currency'] // 货币check_pay($data) // 调用系统函数进行验证及后续支付处理```</font>复制代码例:`IndexController.php`<font size="3">```php<?phpnamespace gateways\wx_pay\controller;use think\Controller;class IndexController extends Controller{ public function notifyHandle() { $data['invoice_id'] = $_POST['invoice_id']; $data['payment'] = $_POST['payment']; $data['paid_time'] = $_POST['paid_time']; $data['trans_id'] = $_POST['trans_id']; $data['total_fee'] = $_POST['total_fee']; $data['currency'] = $_POST['currency']; check_pay($data); }}```</font>复制代码#### 回调账单处理支付回调之后账单处理如下,注意需要引入use app\home\controller\OrderController;<font size="3">```$data = array( 'invoice_id'=>$order_id, // 订单号 'trans_id'=>$_POST['transaction_id'], // 交易流水号 'currency'=>$currency, // 货币的3个字母的ISO代码:例如 USD CNY等 'payment'=>'Payssion', // 网关名称,当前支付网关名称 'amount_in'=>$amount, // 支付金额 金额元 'paid_time'=>time(), // 支付时间);$Order = new OrderController();$Order->orderPayHandle($data,'wx_pay');```</font>复制代码