magein/think-pay

支付中心

v1.0.0 2024-08-03 14:44 UTC

This package is not auto-updated.

Last update: 2024-12-21 18:37:40 UTC


README

THINK,PAY

简介

php-pay适用于think6的支付扩展

安装

composer require magein/think-pay

使用

以使用composer.json中的extra参数进行加载

服务类

app()->payment;

重写服务

use think\Service;
class PaymentService extends Service{

    public function register()
    {
        $this->app->bind('payment', Payment::class);
    }
    
    public function boot()
    {
        PayConfig::instance()->setConfig(config('pay'));
    }
}

在app/service.php新增服务

return [
    AppService::class,
    PaymentService::class
];

配置

在config目录下新增pay.php

路由

路由地址请求方式说明
/pay/centerget收银台
/pay/unifypost统一下单
/pay/qrcodepost获取二维码
/pay/qrcode/availableget验证二维码是否有效
/pay/queryget查询订单支付信息
/pay/scanget扫码支付接口
/pay/oauthany微信授权回调
/pay/notifyany支付异步通知
/pay/successany支付完成跳转

路由中间件

在配置pay.php文件中添加

return [

// 域名
'domain' => trim(env('app.url'), '/'),

// 中间件
'middleware' =>[
    // 请求unify、qrcode、qrcode/available、query由后端发起,需要验证数据来源
    'auth' => [],
    // 收银台中间件
    'center' => [],
    // 扫码支付中间件
    'scan' => [],
    // 支付平台异步通知中间件
    'notify' => [],
    // 支付平台支付完成跳转中间件
    'success' => []
],

// 静态资源
'assets' => [
    // jquery使用的cdn
    'jquery' => 'https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/1.12.4/jquery.min.js',
],

数据库文件

migrations

使用think-migration包则将migrations目录下的文件复制到database/migrations下执行

php think migrate:run

sql

支付订单表

CREATE TABLE `pay_orders`
(
    `id`            int(11) unsigned                        NOT NULL AUTO_INCREMENT,
    `pay_no`        char(32) COLLATE utf8mb4_unicode_ci     NOT NULL COMMENT '支付编号',
    `order_no`      varchar(64) COLLATE utf8mb4_unicode_ci  NOT NULL COMMENT '平台订单编号',
    `channel_id`    varchar(30) COLLATE utf8mb4_unicode_ci  NOT NULL COMMENT '渠道',
    `platform_id`   varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '交易平台',
    `scene`         tinyint(4)                              NOT NULL DEFAULT '1' COMMENT '场景 1 支付订单 order 2 充值 recharge',
    `user_id`       varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户信息',
    `subject`       varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '交易标题',
    `appid`         varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'appid',
    `merchant_id`   varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '收款账号',
    `trade_no`      varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '第三方交易编号',
    `trade_type`    varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '平台交易方式 支付宝的h5、面对面、app,微信的jsapi、h5等',
    `total_amount`  int(11)                                 NOT NULL COMMENT '交易总金额 单位分',
    `coupon_amount` int(11)                                 NOT NULL COMMENT '优惠金额 单位分',
    `coupon_info`   text COLLATE utf8mb4_unicode_ci COMMENT '优惠信息',
    `result`        tinyint(4)                              NOT NULL DEFAULT '0' COMMENT '交易结果 0 等待中 pending 1 成功 success -1 失败 fail',
    `reason`        varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '交易失败原因',
    `remark`        varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '交易备注',
    `notify_date`   timestamp                               NULL     DEFAULT NULL COMMENT '异步通知时间',
    `notify_data`   text COLLATE utf8mb4_unicode_ci COMMENT '异步通知参数',
    `notify_url`    varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '支付完成后通知的地址',
    `return_url`    varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '支付完成后跳转的地址',
    `created_at`    datetime                                NOT NULL COMMENT '创建时间',
    `updated_at`    datetime                                NOT NULL COMMENT '更新时间',
    `deleted_at`    datetime                                         DEFAULT NULL COMMENT '删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `pay_no` (`pay_no`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_unicode_ci;

支付二维码表

CREATE TABLE `pay_qrcodes`
(
    `id`         int(11) unsigned                   NOT NULL AUTO_INCREMENT,
    `pay_no`     char(18) COLLATE utf8_unicode_ci   NOT NULL COMMENT '二维码支付编号',
    `expire_in`  datetime                           NOT NULL COMMENT '过期时间',
    `available`  tinyint(4)                         NOT NULL COMMENT '是否有效 扫码后防止重复支付',
    `params`     mediumtext COLLATE utf8_unicode_ci NOT NULL COMMENT '支付数据',
    `created_at` datetime                           NOT NULL COMMENT '创建时间',
    `updated_at` datetime                           NOT NULL COMMENT '更新时间',
    `deleted_at` datetime DEFAULT NULL COMMENT '删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `pay_no` (`pay_no`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8
  COLLATE = utf8_unicode_ci;