支付接口
本文整理智简魔方财务系统中“支付接口”相关的配置、操作或问题处理内容,供管理员和运维人员按原文步骤查阅与执行。
【魔方开发者交流群: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');