基于 Laravel 5.8 + omnipay 开发的支持多个应用接入的聚合支付系统。简单配置即可使用。
- 支持多应用接入
- 可以通过 command 添加应用
- 支持多种三方平台接入
- 支持 QQ钱包
- Native 已验证
- JS支付 开发完成但未经线上验证
- App支付 开发完成但未经线上验证
- 支持 支付宝
- 电脑网站支付 已验证
- 手机网站支付 已验证
- JSAPI 开发完成但未经线上验证
- APP支付 未完成
- 当面付 未完成
- 支持 微信支付
- 原生扫码支付 已验证
- H5支付 已验证
- 微信网页、公众号、小程序支付 开发完成但未经线上验证
- APP支付 开发完成但未经线上验证
- 刷卡支付 开发完成但未经线上验证
- 支持 QQ钱包
- 认证
- 并发控制
- 交易日志
- 事件
- Webhook通知
- 订单管理api
- 退款
- 订单关闭
- 交易统计接口
- 交易数据推送
- 管理面板
- 管理面板前段页面
- 管理面板后端接口
- 客户端SDK
- 文档编写
-
项目配置
-
支付宝开放平台配置
-
微信支付后台配置
-
QQ钱包后台配置
-
应用接入
在订单支付完成之后,系统可能会同时产生同步跳转和异步的结果通知(如支付宝 PC网站支付)。
系统会在收到同步回调的时候不做任何订单状态的更新。
系统仅在收到三方支付平台的异步通知时才更新订单状态,并通过 webhook 通知给应用方。
因此应用方因该已 webhook 的通知为准。同步通知仅做页面提示使用。
建议应用系统在处理订单的时候将`订单与
支付订单`分开处理。否则可能会带来无法支付的问题。
使用单一订单号带来的支付问题:
- 用户下单完成后,选择微信支付。但用户取消,随后使用支付宝支付。这时候支付系统会提示无法下单。
- 用户在小程序下单完成后,选择微信支付,但支付未成功。随后,用户前往app,继续选择微信支付。这时,会无法支付。
正确的处理方式:
- 用户下单,创建订单号
- 用户选择 支付宝支付,创建 支付宝支付订单(独立的订单号,可以使用上述订单号来生成),并使用此支付单号前往支付系统下单。
- 用户取消支付,再次选择微信支付,此时应用需要再次创建 微信支付订单(独立的订单号),并再次使用此支付订单号前往支付系统下单。
- 用户完成支付。
- 接接收异步通知,进行后续处理。
-
为确定订单的支付结果能够有效的送达通知,支付结果可能会重复的通知给应用。应用端需要检查订单的后续处理状态,避免重复处理。 订单处理成功后,应用需要返回 status_code 为 200 的响应,三方支付平台在收到此响应后便会终止此订单的通知。
-
若长时间未收到支付结果的通知,应用可调用订单查询接口主动查询订单的支付状态。
- php > 7.1
- extension-redis
- mysql >= 5.7
- redis
- composer
推荐使用 Laradock 作为开发环境。
推荐的配置步骤如下:
-
在你的工作目录,配置 Laradock
git clone --branch member git@github.com:laradock/laradock.git
-
修改
laradock/.env
配置文件修改映射目录为自己的真实项目目录
APP_CODE_PATH_HOST = YourSelf Application Path
修改 MYSQL 版本为 5.7
MYSQL_VERSION=5.7
为了节省编译时间且在不需要使用前端的情况下,可以取消node,yarn的安装
WORKSPACE_INSTALL_NODE = false WORKSPACE_INSTALL_YARN = false
其他的参数调整都是可选的,具体可参考文档 relevant documentations
-
运行 docker 容器
通过下面的命令来构建容器和启动容器:
docker-compose up -d mysql redis workspace nginx rabbitmq
如果容器没有正常启动,可以去掉
-d
参数,并查看控制台输出的日志以确定原因。停止容器:
docker-compose down
-
通过 Compose 安装依赖
所有的依赖都是通过 Composer 来管理的,通过下面的命令来安装:
docker exec -it laradock_workspace_1 bash
然后执行:
composer install
-
修改
.env
文件在项目根目录
.env
文件为项目的配置文件,可以从.env.example
复制后进行修改:cp .env.example .env
可能需要修改项目的关键配置,例如 mysql 相关的配置修改如下:
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=YourSelf Database DB_USERNAME=root DB_PASSWORD=root
-
初始化项目
在 workspace 容器中,执行下列命令:
php artisan key:generate php artisan migrate php artisan db:seed
欢迎贡献、共同完善!