PHP 项目集成支付宝支付实战:从 epay 插件到完整订单系统

本文记录了一个基于 FastAdmin 框架的项目中,从零开始集成支付宝支付的完整开发过程,包括 epay 插件安装、订单系统设计、支付流程实现以及回调处理中遇到的坑。

目录

一、技术栈概览

二、epay 插件安装与配置

2.1 插件介绍

2.2 支付宝参数配置

三、订单系统设计

3.1 数据库设计

3.2 订单模型

3.3 订单服务层

四、支付流程实现

4.1 PayTrait 封装

4.2 订单控制器

4.3 回调业务处理

五、支付流程图

六、踩坑记录

6.1 回调验证方法错误

6.2 订单取消时支付宝关闭失败

6.3 回调幂等性处理

七、总结


一、技术栈概览

  • 框架:FastAdmin(基于 ThinkPHP 5)
  • 支付插件:epay(微信支付宝整合插件,v1.3.15)
  • 支付 SDK:yansongda/pay(v2 版本)
  • 支付渠道:支付宝(手机网页支付 WAP)

二、epay 插件安装与配置

2.1 插件介绍

epay 是 FastAdmin 生态中的一个支付整合插件,

需要安装到项目中,封装了 `yansongda/pay` SDK,提供了统一的支付接口。

插件目录结构如下:

addons/epay/
├── certs/                          # 证书目录
│   ├── alipayCertPublicKey.crt     # 支付宝公钥证书
│   ├── alipayRootCert.crt          # 支付宝根证书
│   ├── appCertPublicKey.crt        # 应用公钥证书
│   └── private_key                 # 应用私钥
├── controller/                     # 控制器
│   ├── Api.php                     # 支付 API
│   └── Index.php                   # 插件管理
├── library/                        # 核心库
│   ├── v2/Yansongda/Pay/           # yansongda/pay SDK v2
│   └── Service.php                 # 支付服务类
├── config.php                      # 插件配置
└── info.ini                        # 插件信息

2.2 支付宝参数配置

在插件后台配置支付宝相关参数,主要配置项在 `addons/epay/config.php` 中:

'alipay' => [
    'mode'                  => 'dev',              // 运行模式:dev=沙箱,normal=正式
    'app_id'                => '你的支付宝应用 APPID', // 支付宝应用 APPID
    'signtype'              => 'cert',             // 签名类型:证书模式
    'ali_public_key'        => '支付宝公钥证书',
    'app_cert_public_key'   => '应用公钥证书',
    'alipay_root_cert'      => '支付宝根证书',
    'private_key'           => '应用私钥',
    'notify_url'            => '/addons/epay/api/notifyx/type/alipay',
    'return_url'            => '/addons/epay/api/returnx/type/alipay',
    'scanpay'               => '0',                // PC 端是否使用扫码支付
    'log'                   => '1',                // 是否开启日志
],

证书模式说明:支付宝推荐使用证书模式进行签名验证,需要下载三个证书文件:

- 应用公钥证书(appCertPublicKey.crt)

- 支付宝公钥证书(alipayCertPublicKey.crt)

- 支付宝根证书(alipayRootCert.crt)

三、订单系统设计

3.1 数据库设计

你的订单表结构。

3.2 订单模型

// application/common/model/Order.php
namespace app\common\model;

use think\Model;

class Order extends Model
{
    protected $name = 'order';
    protected $autoWriteTimestamp = false;
    protected $createTime = 'created_at';
    protected $updateTime = 'updated_at';
}

3.3 订单服务层

订单服务类 `OrderService` 负责订单的创建、查询、取消和回调处理:

// application/common/services/OrderService.php
class OrderService extends Service
{
    use PayTrait, UserTrait;

    public $model;

    public function __construct()
    {
        $this->model = new \app\common\model\Order();
    }

    /**
     * 创建订单
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值