# SDK 示例
本文档提供多种编程语言的完整 SDK 客户端实现示例。
## 可用 SDK
### Python 客户端
查看完整的 Python SDK 实现和使用示例:
**[查看 Python SDK →](/sdk/python)**
### Go 客户端
查看完整的 Go SDK 实现和使用示例:
**[查看 Go SDK →](/sdk/go)**
### Node.js 客户端
查看完整的 Node.js SDK 实现和使用示例:
**[查看 Node.js SDK →](/sdk/nodejs)**
### PHP 客户端
查看完整的 PHP SDK 实现和使用示例:
**[查看 PHP SDK →](/sdk/php)**
### Java 客户端
查看完整的 Java SDK 实现和使用示例:
**[查看 Java SDK →](/sdk/java)**
## 快速开始
### 1. 初始化客户端
```python
# Python
client = WLWOpenAPIClient(
base_url="https://api.example.com",
access_key="ak_xxxxxxxxxx",
secret_key="sk_xxxxxxxxxx"
)
```
```go
// Go
client := NewWLWOpenAPIClient(
"https://api.example.com",
"ak_xxxxxxxxxx",
"sk_xxxxxxxxxx"
)
```
```javascript
// Node.js
const client = new WLWOpenAPIClient(
'https://api.example.com',
'ak_xxxxxxxxxx',
'sk_xxxxxxxxxx'
);
```
```php
// PHP
$client = new WLWOpenAPIClient(
'https://api.example.com',
'ak_xxxxxxxxxx',
'sk_xxxxxxxxxx'
);
```
```java
// Java
WLWOpenAPIClient client = new WLWOpenAPIClient(
"https://api.example.com",
"ak_xxxxxxxxxx",
"sk_xxxxxxxxxx"
);
```
### 2. 调用接口
```python
# Python
try:
card_info = client.get_card_info("CARD123456789")
print(f"余额: {card_info['balance']}")
except APIError as e:
print(f"错误: {e.message}")
```
```go
// Go
cardInfo, err := client.GetCardInfo("CARD123456789")
if err != nil {
log.Printf("错误: %v", err)
} else {
fmt.Printf("余额: %.2f\n", cardInfo.Balance)
}
```
```javascript
// Node.js
try {
const cardInfo = await client.getCardInfo('CARD123456789');
console.log(`余额: ${cardInfo.balance}`);
} catch (error) {
console.error(`错误: ${error.message}`);
}
```
```php
// PHP
try {
$cardInfo = $client->getCardInfo('CARD123456789');
echo "余额: " . $cardInfo['balance'];
} catch (APIError $e) {
echo "错误: " . $e->getMessage();
}
```
```java
// Java
try {
CardInfo cardInfo = client.getCardInfo("CARD123456789");
System.out.println("余额: " + cardInfo.getBalance());
} catch (APIError e) {
System.err.println("错误: " + e.getMessage());
}
```
## 主要功能
所有 SDK 都提供以下核心功能:
### 基础功能
- ✅ HMAC-SHA256 签名生成
- ✅ 自动参数排序和签名
- ✅ 请求/响应处理
- ✅ 错误处理和异常封装
### 接口方法
- `heartbeat()` - 心跳检测
- `getCardInfo(cardNo)` - 查询卡板信息
- `restartCard(cardNo)` - 卡板复机
- `stopCard(cardNo)` - 卡板停机
- `orderPackage(cardNo, packageId, strategy)` - 套餐订购
## 错误处理
所有 SDK 都实现了统一的错误处理机制:
| 错误类型 | 错误码 | 说明 |
|---------|--------|------|
| 认证失败 | `InvalidSignature`、`InvalidTimestamp`、`InvalidAccessKey` | 检查签名、时间戳和密钥 |
| 权限不足 | `PermissionDenied`、`Forbidden` | 联系管理员配置权限 |
| 频率限制 | `RateLimited` | 降低请求频率或实现重试 |
| 业务错误 | 其他错误码 | 查看错误消息详情 |
## 最佳实践
1. **密钥管理**
- 使用环境变量存储密钥
- 不要在代码中硬编码密钥
- 定期轮换密钥
2. **错误处理**
- 捕获并处理所有异常
- 实现重试逻辑(指数退避)
- 记录详细的错误日志
3. **性能优化**
- 复用客户端实例
- 设置合理的超时时间
- 实现连接池(适用于高并发场景)
4. **监控告警**
- 监控 API 调用成功率
- 监控响应时间
- 设置异常告警
## 更多资源
- [认证机制](2.认证机制.md) - 了解签名算法详情
- [接口详情](3.接口详情.md) - 查看所有 API 接口文档
- [常见问题](7.常见问题.md) - 问题排查和解决方案