PAYATHON 2026

支付宝支付 SDK v3 中没有 autoload.php,如何调用类?

支付小周

结论

支付宝 PHP SDK v3 的源码压缩包不一定带有 autoload.php。这个文件通常由 Composer 安装依赖时生成,默认位于:

vendor/autoload.php

所以,没有找到 autoload.php 不代表 SDK 下载不完整。建议先通过 Composer 安装或初始化依赖,再使用项目中的 vendor/autoload.php 加载类。

使用 Composer 加载

如果 SDK 目录中有 composer.json,进入该目录执行:

composer install

执行后会生成:

vendor/autoload.php

在业务代码中引入该文件:

<?php

require_once __DIR__ . '/vendor/autoload.php';

如果已经通过 Composer 将 SDK 安装到现有项目中,应引入项目根目录下的自动加载文件:

<?php

require_once __DIR__ . '/vendor/autoload.php';

接下来按照当前 SDK 的命名空间调用类。以 EasySDK 风格的版本为例,常见写法如下:

<?php

require_once __DIR__ . '/vendor/autoload.php';

use Alipay\EasySDK\Kernel\Factory;
use Alipay\EasySDK\Kernel\Config;

$config = new Config();
$config->protocol = 'https';
$config->gatewayHost = 'openapi.alipay.com';
$config->signType = 'RSA2';
$config->appId = '你的应用 AppId';
$config->merchantPrivateKey = '你的应用私钥';
$config->alipayPublicKey = '支付宝公钥';

Factory::setOptions($config);

$result = Factory::payment()
    ->common()
    ->query('商户订单号');

类名和命名空间应以实际下载版本的目录结构和示例代码为准。不同的支付宝 PHP SDK 即使都叫“v3”,调用方式也可能不一样。

没有 Composer 时如何调用

如果下载的是传统 AOP SDK,目录中也没有 composer.json,可以直接引入需要的类文件。假设目录结构如下:

aop/
├── AopClient.php
└── request/
    └── AlipayTradeQueryRequest.php

加载方式如下:

<?php

require_once __DIR__ . '/aop/AopClient.php';
require_once __DIR__ . '/aop/request/AlipayTradeQueryRequest.php';

$aop = new AopClient();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = '你的应用 AppId';
$aop->rsaPrivateKey = '你的应用私钥';
$aop->alipayrsaPublicKey = '支付宝公钥';
$aop->signType = 'RSA2';
$aop->format = 'json';
$aop->charset = 'UTF-8';

$request = new AlipayTradeQueryRequest();
$request->setBizContent(json_encode([
    'out_trade_no' => '商户订单号',
], JSON_UNESCAPED_UNICODE));

$response = $aop->execute($request);

具体的文件路径、属性名称和请求类名称,需要根据实际 SDK 确认,不能直接套用其他版本的示例。

配置自己的自动加载器

如果 SDK 使用规范的命名空间,并且命名空间与目录结构一一对应,也可以通过 spl_autoload_register() 加载:

<?php

spl_autoload_register(function (string $class): void {
    $prefix = 'Alipay\\';
    $baseDir = __DIR__ . '/src/';

    if (strncmp($class, $prefix, strlen($prefix)) !== 0) {
        return;
    }

    $relativeClass = substr($class, strlen($prefix));
    $file = $baseDir . str_replace('\\', '/', $relativeClass) . '.php';

    if (is_file($file)) {
        require_once $file;
    }
});

这种方式只适用于命名空间与目录符合上述映射关系的 SDK。传统 AOP SDK 可能包含没有命名空间的类、额外依赖或特殊目录结构。遇到这类情况,逐个使用 require_once,或者改用 Composer 会更合适。

常见检查方法

可以先查看 SDK 根目录:

  • 如果有 composer.json,执行 composer install,然后使用 vendor/autoload.php。
  • 如果 SDK 已安装在项目的 vendor 目录中,引入项目根目录下的 vendor/autoload.php。
  • 如果只有 aop/AopClient.php、aop/request/ 等目录,通常是传统 AOP SDK,可以直接引入相应文件。
  • 如果示例代码中使用了 use Alipay\...,说明类带有命名空间,建议按照 Composer 的 PSR-4 规则加载。
  • 如果示例代码直接使用 new AopClient(),通常是无命名空间的传统调用方式。

不要从其他项目中单独复制 autoload.php。Composer 生成的自动加载文件依赖同一目录内的映射文件和依赖信息,只复制这一个文件通常无法正常使用。生产环境中的私钥、公钥等敏感配置也不应写入公开代码仓库。

备注:内容仅供参考。