composer install 不生成 openapi sdk,需先用 openapi-generator-cli 从 openapi.yaml 生成代码,再配置 composer.json 的 psr-4 自动加载并执行 composer dump-autoload。

composer install 为什么装不出 OpenAPI SDK?
因为 composer install 本身不生成 SDK,它只安装已存在的 PHP 包。OpenAPI SDK 是从 openapi.yaml 或 openapi.json 文件“生成”的代码,不是现成的包——你得先用工具生成,再把生成的目录纳入 Composer 的自动加载体系。
常见错误现象:composer require some-api-sdk 失败、vendor/ 里没对应命名空间、Class not found 却确认文件存在但未被 autoload。
- 生成的 SDK 代码默认不带
composer.json,不能直接composer require - 别把生成目录扔进
vendor/—— Composer 不管理手动放进去的代码 - 生成后必须显式配置
autoload(通常是"psr-4")并运行composer dump-autoload
用 openapi-generator-cli 生成 PHP SDK 的关键参数
openapi-generator-cli 是当前主流选择(openapi-codegen 已归档),生成 PHP 客户端时,语言侧重点是命名空间、HTTP 客户端依赖、模型/客户端分离方式。
典型命令:
openapi-generator-cli generate -i openapi.yaml -g php --package-name MyApiSdk --additional-properties=packageName=MyApiSdk,srcBasePath=lib,sortParamsByRequiredFlag=true -o ./sdk
注意几个易错点:
-
--package-name决定顶层命名空间,必须和后续composer.json中的psr-4前缀一致 -
srcBasePath=lib让生成结构为./sdk/lib/,比默认的./sdk/src/更符合 PHP 社区习惯(避免和项目src/混淆) - 不加
--additional-properties=variableNamingConvention=camelCase会导致生成的参数名如user_id→$user_id,与 PSR-12 冲突 - 生成结果不含
composer.json,需手动补全或用--additional-properties=withComposer=true(部分模板支持)
让生成的 SDK 被 Composer 正确加载
生成完 SDK 目录(比如 ./sdk/lib),必须让它进 Composer 的类加载机制,否则 new MyApiSdkApiDefaultApi() 会报错。
在项目根目录的 composer.json 中添加:
"autoload": {
"psr-4": {
"MyApiSdk\": "sdk/lib/"
}
}
然后执行:
-
composer dump-autoload(必须!否则新增规则不生效) - 检查是否生效:
composer show --platform | grep MyApiSdk不会显示,但composer dump-autoload -v应列出MyApiSdk的映射路径 - 如果 SDK 里用了
GuzzleHttpClient,确保项目已composer require guzzlehttp/guzzle—— 生成器不自动装依赖
SDK 生成后调用时报 cURL 错误或空响应?
生成的 PHP SDK 默认用 GuzzleHttpClient,但不会帮你配 SSL、超时、基础 URL。90% 的“调用失败”其实卡在这几步。
典型问题:
-
cURL error 60: SSL certificate problem:Guzzle 默认校验证书,本地测试可临时加'verify' => false,但生产环境必须用composer require symfony/http-client替换或配好 CA bundle - 返回空数组或
null:检查DefaultApi初始化时是否传了正确的Configuration,尤其是host(别漏掉https://)和basePath - 401/403:SDK 不自动塞
Authorizationheader,得手动调$api->getApiClient()->getConfig()->setApiKey('api_key', 'xxx') - 生成时若 OpenAPI spec 里
securitySchemes是apiKey类型,SDK 会生成setApiKey方法;若是oauth2,则需额外处理 token 刷新逻辑
生成不是终点,SDK 和你的运行环境之间那层 HTTP 配置,才是最常掉坑的地方。










