智简魔方文档

支付接口

本文整理智简魔方财务系统中“支付接口”相关的配置、操作或问题处理内容,供管理员和运维人员按原文步骤查阅与执行。

【魔方开发者交流群:682866869】


顺戴财务系统网关模块开发文档


支付网关


开发流程

1 在 modules/gateways 目录里添加这个网关目录(如:demo)

2 创建入口文件

3 确定是否要后台配置文件,如果需要在网关根目录加上 config.php,格式查看下方“配置文件”

4 如需外部访问,请加 controller 目录,再添加 Controller 文件

5 到后台插件管理刷新界面就会看到你新添加的插件


创建目录

网关目录在程序的根目录:

/modules/gateways

目录名应为小写字母加下划线形式,并且必须以字母开头。例如:

/modules/gateways/demo/

入口文件

文件名应为目录名大驼峰+Plugin.php,创建在你的网关目录下,例:

`demo/DemoPlugin.php`

info 属性

在网关入口文件定义类属性`info`来配置网关的基本信息(见示例)

发起支付


支付参数

网关的支付方法会以数组的形式接受支付参数

$param['product_name'] # 产品名

$param['out_trade_no'] # 订单编号

$param['total_fee'] # 金额

响应参数

发起支付需要统一以数组的形式返回

<?php

return [

'type' => $type,

'data' =>$data,

];

财务系统目前支持三种形式的支付请求


1.当 `type=url` 时,[data]值为 转换二维码的url地址 由系统自动转换


2.当 `type=insert` 时,[data]值为 第三方支付系统提供的二维码地址 由系统嵌入该二维码


3.当 `type=jump` 时,[data]值为 需要跳转到第三方的支付链接网址


4.当 `type=html` 时,[data]值为 需要提交的html表单


示例

<?php

namespace gateways\demo;//Demo 插件英文名,改成你的插件英文就行了

use app\admin\lib\Plugin;

use gateways\wx_pay\validate\WxPayValidate;




//Demo 插件英文名,改成你的插件英文就行了

class DemoPlugin extends Plugin

{

public $info = array(

'name' => 'Demo',//Demo 插件英文名,改成你的插件英文就行了

'title' => '演示',

'description' => '演示',

'status' => 1,

'author' => '顺戴网络',

'version' => '1.0'

);




// 插件安装

public function install()

{

return true;//安装成功返回 true,失败 false

}




// 插件卸载

public function uninstall()

{

// 在这里不要 try catch 数据库异常,直接抛出上层会处理异常后回滚的

return true;//卸载成功返回 true,失败 false

}




//发起支付

public function AliPayHandle($param)

{

//> 处理配置参数

//> 发起支付




//> 返回支付数据

return ['url' => 'url',

'data' => 'weixin://wxpay/bizpayurl/up?prasdSD23d0'

];

}

}

配置文件

在你的网关根目录下加上 config.php 即可定义配置

<?php

return [

'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' => '这是地理坐标组件的演示',

],

];

回调文件

异步回调

异步回调统一放在网关根目录下的`controller/IndexController.php`由 `notifyHandle` 方法处理

当然你也可以在 controller 中自定义回调方法, 回调地址为:完整域名/gateway/payssion/index/notifyHandle


方法中你可以处理相关验证,然后调用系统函数 `check_pay` 传入数组参数:

$data['invoice_id'] // 订单 id

$data['payment'] // 支付方式

$data['paid_time'] // 支付时间

$data['trans_id'] // 三方交易 id

$data['total_fee'] // 金额

$data['currency'] // 货币




check_pay($data) // 调用系统函数进行验证及后续支付处理

例:`IndexController.php`

<?php

namespace 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);

}

}

回调账单处理

支付回调之后账单处理如下,注意需要引入 use app\home\controller\OrderController;

$data = array(

'invoice_id'=>$order_id, // 订单号

'trans_id'=>$_POST['transaction_id'], // 交易流水号

'currency'=>$currency, // 货币的 3 个字母的 ISO 代码:例如 USD CNY 等

'payment'=>'Payssion', // 网关名称,当前支付网关名称

'amount_in'=>$amount, // 支付金额 金额元

'paid_time'=>date("Y-m-d H:i:s"), //支付时间 2020-01-01 08:00:00 标准格式

);

$Order = new OrderController();

$Order->orderPayHandle($data,'wx_pay');