NextEbook OEM API Python SDK
Project description
NextEbook OEM SDK
NextEbook OEM API 的官方 Python SDK,用于管理会员卡激活码的生成、查询和作废。
功能特性
- ✅ 检查 OEM 单位额度
- ✅ 生成会员卡激活码
- ✅ 作废激活码(仅限未激活的激活码)
- ✅ 激活会员卡
- ✅ 完整的类型提示
- ✅ 自定义异常类
- ✅ 详细的 API 文档
安装
pip install nextebook-sdk
或从源码安装:
git clone https://github.com/nextebook/nextebook-sdk.git
cd nextebook-sdk
pip install .
快速开始
1. 初始化客户端
from nextebook_sdk import OemClient
# 初始化客户端
client = OemClient(
base_url="http://127.0.0.1:9999",
api_key="3d0a7dc8-796f-4206-9bc2-b313e6c92a29"
)
2. 检查额度
# 查询 OEM 单位的额度信息
quota = client.check_quota()
print(f"OEM单位: {quota.oem_name}")
print(f"总额度: {quota.activation_code_quota}")
print(f"已使用: {quota.used_quota}")
print(f"剩余: {quota.remaining_quota}")
3. 生成激活码
# 生成 10 个 1 年期激活码
result = client.generate_codes(count=10, validity_years=1)
print(f"成功生成 {len(result.codes)} 个激活码")
for code in result.codes:
print(code)
print(f"已使用额度: {result.used_quota}")
print(f"剩余额度: {result.remaining_quota}")
4. 作废激活码
# 作废未使用的激活码
result = client.revoke_code("550e8400-e29b-41d4-a716-446655440000")
if result.quota_restored:
print(f"成功作废,已恢复 {result.validity_years} 年额度")
else:
print("成功作废")
5. 激活会员卡
# 为用户激活会员卡
result = client.activate_code(
code="550e8400-e29b-41d4-a716-446655440000",
user_id=123
)
print(f"成功激活 {result.validity_years} 年期会员")
print(f"OEM单位: {result.oem_name}")
API 参考
OemClient
OEM API 客户端类。
初始化参数
base_url(str): API 基础 URLapi_key(str): OEM API 密钥(UUID 格式)timeout(int, optional): 请求超时时间(秒),默认 30
方法
check_quota()
检查 OEM 单位的激活码额度。
返回: OemQuotaInfo
抛出异常:
InvalidApiKeyError: API 密钥无效NetworkError: 网络请求失败
generate_codes(count, validity_years)
生成激活码。
参数:
count(int): 生成数量(1-100)validity_years(int): 有效期年限(1/2/3)
返回: GenerateCodesResult
抛出异常:
InvalidApiKeyError: API 密钥无效InsufficientQuotaError: 额度不足ValueError: 参数无效
revoke_code(code)
作废激活码。
业务规则:
- 只有未激活的激活码可以被作废
- 已激活的激活码不可作废(已被用户使用)
- 作废后额度会恢复
- 被作废的激活码不可再激活
参数:
code(str): 要作废的激活码(UUID 字符串)
返回: RevokeCodeResult
抛出异常:
InvalidCodeError: 激活码无效CannotRevokeActivatedError: 激活码已激活AlreadyRevokedError: 激活码已作废PermissionDeniedError: 无权操作该激活码
activate_code(code, user_id)
激活会员卡激活码。
参数:
code(str): 激活码(UUID 字符串)user_id(int): 用户 ID
返回: ActivateCodeResult
抛出异常:
InvalidCodeError: 激活码无效AlreadyActivatedError: 激活码已被激活PermissionDeniedError: 无权操作该激活码
数据模型
OemQuotaInfo
OEM 单位额度信息。
属性:
oem_name(str): OEM 单位名称activation_code_quota(int): 激活码总额度used_quota(int): 已使用额度remaining_quota(int): 剩余额度
GenerateCodesResult
生成激活码结果。
属性:
codes(List[str]): 生成的激活码列表used_quota(int): 已使用额度remaining_quota(int): 剩余额度validity_years(int): 有效期年限
RevokeCodeResult
作废激活码结果。
属性:
code(str): 被作废的激活码validity_years(int): 有效期年限revoked_at(datetime): 作废时间quota_restored(bool): 额度是否已恢复
ActivateCodeResult
激活激活码结果。
属性:
validity_years(int): 有效期年限activated_at(datetime): 激活时间oem_name(str): OEM 单位名称
异常处理
SDK 提供了详细的异常类:
OemApiError: 基础异常类InvalidApiKeyError: 无效的 API 密钥InsufficientQuotaError: 额度不足InvalidCodeError: 无效的激活码AlreadyActivatedError: 激活码已被激活CannotRevokeActivatedError: 无法作废已激活的激活码PermissionDeniedError: 权限不足AlreadyRevokedError: 激活码已作废NetworkError: 网络错误InvalidResponseError: 无效的响应
异常处理示例
from nextebook_sdk import OemClient, InsufficientQuotaError, InvalidCodeError
client = OemClient(base_url="http://127.0.0.1:9999", api_key="...")
try:
result = client.revoke_code("550e8400-e29b-41d4-a716-446655440000")
print(f"成功作废: {result}")
except InvalidCodeError:
print("激活码不存在")
except CannotRevokeActivatedError:
print("该激活码已被激活,不可作废")
except AlreadyRevokedError:
print("该激活码已被作废")
except Exception as e:
print(f"错误: {e}")
开发
安装开发依赖
pip install -e ".[dev]"
运行测试
pytest tests/
代码格式化
black nextebook_sdk/
isort nextebook_sdk/
类型检查
mypy nextebook_sdk/
许可证
MIT License - 详见 LICENSE 文件
支持
- GitHub Issues: https://github.com/nextebook/nextebook-sdk/issues
- 邮箱: support@nextebook.com
更新日志
1.0.0 (2025-01-26)
初始版本发布:
- ✅ 检查 OEM 单位额度
- ✅ 生成会员卡激活码
- ✅ 作废激活码
- ✅ 激活会员卡
- ✅ 完整的类型提示和文档
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nextebook_sdk-1.1.0-py3-none-any.whl.
File metadata
- Download URL: nextebook_sdk-1.1.0-py3-none-any.whl
- Upload date:
- Size: 34.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7724d638e9ce88ad5dded6263347b246aa165df7a8073c796b2802f2c5748637
|
|
| MD5 |
b8377afbf64747d24d5923a7a4bc0883
|
|
| BLAKE2b-256 |
0067eee8800b9b850ade5b76a4588e91cf7ce2387ba6e051db7209cbbb82348d
|