Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

聚合支付系统,开箱即用。基于 omnipay 开发,支持 wechatpay、alipay、qpay 等第三方支付平台。

Notifications You must be signed in to change notification settings

cmzz/payment-system

Repository files navigation

payment-system

Build Status

基于 Laravel 5.8 + omnipay 开发的支持多个应用接入的聚合支付系统。简单配置即可使用。

功能列表

  • 支持多应用接入
    • 可以通过 command 添加应用
  • 支持多种三方平台接入
    • 支持 QQ钱包
      • Native 已验证
      • JS支付 开发完成但未经线上验证
      • App支付 开发完成但未经线上验证
    • 支持 支付宝
      • 电脑网站支付 已验证
      • 手机网站支付 已验证
      • JSAPI 开发完成但未经线上验证
      • APP支付 未完成
      • 当面付 未完成
    • 支持 微信支付
      • 原生扫码支付 已验证
      • H5支付 已验证
      • 微信网页、公众号、小程序支付 开发完成但未经线上验证
      • APP支付 开发完成但未经线上验证
      • 刷卡支付 开发完成但未经线上验证
  • 认证
  • 并发控制
  • 交易日志
  • 事件
  • Webhook通知
  • 订单管理api
  • 退款
  • 订单关闭
  • 交易统计接口
  • 交易数据推送
  • 管理面板
    • 管理面板前段页面
    • 管理面板后端接口
  • 客户端SDK
  • 文档编写

使用教程

  1. 项目配置

  2. 支付宝开放平台配置

  3. 微信支付后台配置

  4. QQ钱包后台配置

  5. 应用接入

文档

最佳实践

异步通知与异步通知

在订单支付完成之后,系统可能会同时产生同步跳转和异步的结果通知(如支付宝 PC网站支付)。

系统会在收到同步回调的时候不做任何订单状态的更新。

系统仅在收到三方支付平台的异步通知时才更新订单状态,并通过 webhook 通知给应用方。

因此应用方因该已 webhook 的通知为准。同步通知仅做页面提示使用。

应用系统的订单与支付订单

建议应用系统在处理订单的时候将`订单支付订单`分开处理。否则可能会带来无法支付的问题。

使用单一订单号带来的支付问题:

  • 用户下单完成后,选择微信支付。但用户取消,随后使用支付宝支付。这时候支付系统会提示无法下单。
  • 用户在小程序下单完成后,选择微信支付,但支付未成功。随后,用户前往app,继续选择微信支付。这时,会无法支付。

正确的处理方式:

  1. 用户下单,创建订单号
  2. 用户选择 支付宝支付,创建 支付宝支付订单(独立的订单号,可以使用上述订单号来生成),并使用此支付单号前往支付系统下单。
  3. 用户取消支付,再次选择微信支付,此时应用需要再次创建 微信支付订单(独立的订单号),并再次使用此支付订单号前往支付系统下单。
  4. 用户完成支付。
  5. 接接收异步通知,进行后续处理。

订单支付结果

  1. 为确定订单的支付结果能够有效的送达通知,支付结果可能会重复的通知给应用。应用端需要检查订单的后续处理状态,避免重复处理。 订单处理成功后,应用需要返回 status_code 为 200 的响应,三方支付平台在收到此响应后便会终止此订单的通知。

  2. 若长时间未收到支付结果的通知,应用可调用订单查询接口主动查询订单的支付状态。

工具命令

项目依赖

  • php > 7.1
    • extension-redis
  • mysql >= 5.7
  • redis
  • composer

本地开发

推荐使用 Laradock 作为开发环境。

推荐的配置步骤如下:

  1. 在你的工作目录,配置 Laradock

    git clone --branch member git@github.com:laradock/laradock.git
  2. 修改 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

  3. 运行 docker 容器

    通过下面的命令来构建容器和启动容器:

    docker-compose up -d mysql redis workspace nginx rabbitmq

    如果容器没有正常启动,可以去掉 -d 参数,并查看控制台输出的日志以确定原因。

    停止容器:

    docker-compose down
  4. 通过 Compose 安装依赖

    所有的依赖都是通过 Composer 来管理的,通过下面的命令来安装:

    docker exec -it laradock_workspace_1 bash

    然后执行:

    composer install
  5. 修改 .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
    
  6. 初始化项目

    在 workspace 容器中,执行下列命令:

    php artisan key:generate
    php artisan migrate
    php artisan db:seed

Related

欢迎贡献、共同完善!

About

聚合支付系统,开箱即用。基于 omnipay 开发,支持 wechatpay、alipay、qpay 等第三方支付平台。

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

Languages

AltStyle によって変換されたページ (->オリジナル) /