网易云信服务端 PHP SDK。
- 基于 Guzzle HTTP 客户端:成熟稳定的 HTTP 库,支持异步请求
- 多域名高可用:支持故障自动切换,保障服务连续性
- 智能服务器调度:动态端点选择,故障切换快速生效
- 灵活重试策略:内置多种重试策略,支持自定义重试逻辑
- 双客户端模式:支持 Raw Client 和面向对象 Client 两种使用方式
- 完整类型支持:PHP 8+ 严格类型声明,IDE 友好的代码提示
- TraceId 支持:完整的请求链路追踪,便于问题排查
- Metrics 集成:支持 Prometheus 格式监控指标输出
- 即时通讯 (IM):用户管理、消息发送、群组管理等 V1/V2 API
- 实时音视频 (RTC):房间管理、用户权限控制、AI 功能集成
- 短信服务 (SMS):验证码发送、模板短信、批量发送
- 直播服务 (Live):直播间管理、推拉流控制
- 点播服务 (VOD):视频上传、转码、播放地址获取
- 房间组件 (Neroom):教育场景房间管理
- 会议服务 (Meeting):会议账号和房间管理
- 私有化环境:支持云信私有化部署环境
- 生产就绪:经过完整测试,72 个测试用例全部通过
- PSR 标准:遵循 PSR-4 自动加载和 PSR-12 代码规范
- PHP: 8.0+ (推荐 PHP 8.1+,已在 8.4 测试通过)
- 扩展: curl, json
- 依赖管理: Composer 2.0+
- HTTP 客户端: Guzzle 7.0+
- ✅ PHP 8.0+: 完全支持,所有功能可用
- ✅ PHP 8.1+: 推荐版本,性能更佳
- ✅ PHP 8.2+: 完全兼容
- ✅ PHP 8.3+: 完全兼容
- ✅ PHP 8.4: 已测试兼容
- ❌ PHP 7.4: 不支持(依赖包psr/log ^3.0要求PHP >= 8.0)
composer require yunxin/server-sdk-phpgit clone https://github.com/netease-im/yunxin-server-sdk-php.git
cd yunxin-server-sdk-php
composer install<?php
require_once 'vendor/autoload.php';
use YunxinServerSdk\Core\BizName;
use YunxinServerSdk\Core\YunxinApiHttpClient;
use YunxinServerSdk\Im\V2\YunxinV2ApiServices;
use YunxinServerSdk\Im\V2\Account\Request\CreateAccountRequestV2;
// 1. 创建 HTTP 客户端
$client = YunxinApiHttpClient::builderWithBizName(
BizName::im(),
'your-app-key',
'your-app-secret'
)
->timeoutMillis(5000)
->build();
// 2. 创建业务服务
$v2Services = new YunxinV2ApiServices($client);
$accountService = $v2Services->getAccountV2Service();
// 3. 创建用户请求
$request = new CreateAccountRequestV2();
$request->setUsername('test_user_001');
$request->setNickname('测试用户');
// 4. 发起 API 调用
$result = $accountService->createAccount($request);
if ($result->isSuccess()) {
$response = $result->getResponse();
echo "用户创建成功,AccountId: " . $response->getAccountId() . "\n";
} else {
echo "创建失败: " . $result->getMsg() . "\n";
}<?php
use YunxinServerSdk\Core\Http\HttpMethod;
// 使用 Raw 客户端直接发送 HTTP 请求
$requestData = json_encode([
'username' => 'test_user_001',
'nickname' => '测试用户'
]);
$response = $client->executeJsonSimple(
HttpMethod::POST,
'/im/v2/accounts',
null,
$requestData
);
$data = json_decode($response->getData(), true);
echo "响应: " . json_encode($data, JSON_PRETTY_PRINT) . "\n";- 短信服务 (SMS) / Raw 模式
- 实时音视频 (RTC) / Raw 模式
- RTC AI 功能 - 语音转文字、实时翻译等
- 点播服务 (VOD) / Raw 模式
# 克隆项目
git clone https://github.com/netease-im/yunxin-server-sdk-php.git
cd yunxin-server-sdk-php
# 安装依赖
composer install
# 复制配置文件
cp phpunit.xml.dist phpunit.xml
# 编辑 .env 文件,填入测试用的 AppKey 和 AppSecret# 运行所有测试
composer test
# 运行指定测试
./vendor/bin/phpunit tests/BasicFunctionalityTest.php
# 生成测试覆盖率报告
composer test-coverage# 代码格式化 (PSR-12)
composer format
# 代码风格检查
composer lint
# 静态分析 (PHPStan Level 7)
composer analyzesrc/YunxinServerSdk/
├── Core/ # 核心功能
│ ├── BizName.php # 业务类型定义
│ ├── YunxinApiHttpClient.php # HTTP 客户端
│ ├── Endpoint/ # 端点管理
│ ├── Metrics/ # 监控指标
│ └── Exception/ # 异常处理
├── Im/ # 即时通讯
│ ├── V1/ # IM V1 API
│ └── V2/ # IM V2 API
├── Sms/ # 短信服务
├── Rtc/ # 实时音视频
├── Vod/ # 点播服务
├── Live/ # 直播服务
├── Meeting/ # 会议服务
└── Neroom/ # 房间组件
use YunxinServerSdk\Core\EndpointConfig;
use YunxinServerSdk\Core\Endpoint\FixedEndpointSelector;
$endpointConfig = new EndpointConfig();
$endpointConfig->setEndpointSelector(
new FixedEndpointSelector('https://your-private-api.example.com')
);
$client = YunxinApiHttpClient::builderWithBizName(BizName::im(), $appkey, $appsecret)
->endpointConfig($endpointConfig)
->build();use YunxinServerSdk\Core\Endpoint\RetryPolicy;
use YunxinServerSdk\Core\Endpoint\RetryAction;
class CustomRetryPolicy implements RetryPolicy
{
public function shouldRetry(int $httpCode, int $attempt): RetryAction
{
if ($attempt >= 3) {
return RetryAction::noRetry();
}
if ($httpCode >= 500) {
return RetryAction::retry(1000 * $attempt); // 递增延迟重试
}
return RetryAction::noRetry();
}
}use YunxinServerSdk\Core\Metrics\MetricsConfig;
$metricsConfig = new MetricsConfig();
$metricsConfig->setEnabled(true);
$metricsConfig->setCallback(function($metrics) {
// 自定义指标处理逻辑
error_log("API Metrics: " . json_encode($metrics));
});
$client = YunxinApiHttpClient::builderWithBizName(BizName::im(), $appkey, $appsecret)
->metricsConfig($metricsConfig)
->build();// 方法 1: 环境变量
putenv('YUNXIN_SDK_DEBUG=true');
// 方法 2: 配置日志
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$logger = new Logger('yunxin-sdk');
$logger->pushHandler(new StreamHandler('php://stdout', Logger::DEBUG));
$client = YunxinApiHttpClient::builderWithBizName(BizName::im(), $appkey, $appsecret)
->logger($logger)
->build();Q: 接口调用返回 403 错误 A: 检查 AppKey 和 AppSecret 是否正确,确认应用权限配置
Q: 网络超时错误 A: 调整超时设置或检查网络连接
$client = YunxinApiHttpClient::builderWithBizName(BizName::im(), $appkey, $appsecret)
->timeoutMillis(10000) // 10秒超时
->build();Q: 如何查看详细的请求响应日志? A: 启用 TraceId 和调试模式,查看日志输出
- 测试覆盖率: 73 个测试用例,覆盖所有核心功能
- 代码质量: PSR-12 规范,PHPStan Level 7 静态分析
- 性能表现: 基于 Guzzle 的高性能 HTTP 客户端
- 内存使用: 优化的对象复用,减少内存占用
我们欢迎任何形式的贡献!
- 详细描述问题场景和复现步骤
- 提供相关的错误日志和环境信息
- 说明期望的行为结果
- Fork 本仓库
- 创建特性分支:
git checkout -b feature/amazing-feature - 提交更改:
git commit -m 'Add amazing feature' - 推送分支:
git push origin feature/amazing-feature - 提交 Pull Request
- 遵循 PSR-12 代码规范
- 添加相应的单元测试
- 更新相关文档
- 通过所有 CI 检查
本项目基于 MIT 许可证开源 - 查看 LICENSE 文件了解详情。
网易云信 PHP SDK
让云信集成更简单 🚀