# 哈哈零售 Java SDK
[](LICENSE)
[](https://www.oracle.com/java/technologies/downloads/)
[](https://maven.apache.org/)
哈哈零售系统 Java SDK,为智能视觉识别售卖机系统提供完整的API接口封装。
## 📋 目录
- [功能特性](#功能特性)
- [快速开始](#快速开始)
- [核心功能](#核心功能)
- [设备管理](#1-设备管理)
- [商品管理](#2-商品管理)
- [订单管理](#3-订单管理)
- [高级用法](#高级用法)
- [异常处理](#异常处理)
- [完整接口列表](#完整接口列表)
- [常见问题](#常见问题)
---
## 功能特性
✅ **完整接口覆盖** - 支持哈哈零售平台全部31个API接口
✅ **自动令牌管理** - 自动获取、刷新和管理access_token(15天有效期)
✅ **自动签名** - 内置MD5签名算法,无需手动处理
✅ **类型安全** - 提供完整的类型定义和泛型支持
✅ **日志支持** - 集成SLF4J日志框架
✅ **连接池管理** - 基于OkHttp的高性能HTTP客户端
---
## 快速开始
### 1. Maven依赖
```xml
com.haha
haha-sdk
1.0.0
```
### 2. 初始化SDK
```java
import com.haha.sdk.HahaClient;
import com.haha.sdk.config.HahaConfig;
// 创建配置
HahaConfig config = HahaConfig.builder()
.apiBaseUrl("http://api.hahabianli.com") // API地址(默认值)
.appId("your_app_id") // 商家AppId
.appSecret("your_app_secret") // 商家AppSecret
.connectTimeout(10) // 连接超时(秒)
.readTimeout(30) // 读取超时(秒)
.build();
// 创建客户端
HahaClient client = new HahaClient(config);
// 使用完毕后关闭(可选)
// client.shutdown();
```
### 3. 快速调用示例
```java
import com.haha.sdk.exception.HahaException;
try {
// 获取设备列表
List devices = client.getDeviceApi().getDeviceList(1, 20);
// 开门
OpenDoorResult result = client.getDeviceApi()
.openDoor("device001", "ORDER" + System.currentTimeMillis(), null);
System.out.println("订单号: " + result.getOrderNo());
} catch (HahaException e) {
System.err.println("错误: " + e.getMessage());
}
```
---
## 核心功能
### 1. 设备管理
通过 `client.getDeviceApi()` 访问设备相关接口:
#### 1.1 获取设备列表
```java
// 获取第1页,每页20条
List devices = client.getDeviceApi().getDeviceList(1, 20);
for (DeviceInfo device : devices) {
System.out.println("设备ID: " + device.getId());
System.out.println("设备名称: " + device.getName());
System.out.println("设备地址: " + device.getAddress());
System.out.println("设备状态: " + device.getStatus()); // 1-正常, 2-冻结
}
```
#### 1.2 查询设备是否多门单开
```java
String deviceId = "device001";
Integer multiDoorType = client.getDeviceApi().isMultiDoorUnique(deviceId);
// 返回值:0-非多门单开,2-双门单开,3-三门单开,4-四门单开
if (multiDoorType == 2) {
System.out.println("这是双门单开设备");
}
```
#### 1.3 设备开门
```java
String deviceId = "device001";
String outTradeNo = "ORDER" + System.currentTimeMillis(); // 商户订单号
Integer doorIndex = null; // 多门单开时必传:0-A门,1-B门
OpenDoorResult result = client.getDeviceApi().openDoor(deviceId, outTradeNo, doorIndex);
System.out.println("哈哈平台订单号: " + result.getOrderNo());
```
#### 1.4 查询设备在线状态
```java
DeviceOnlineStatus status = client.getDeviceApi().getOnlineStatus("device001");
System.out.println("在线状态: " + status.getOnlineStatus()); // 0-离线, 1-在线
System.out.println("最后在线时间: " + status.getLastOnlineTime());
```
#### 1.5 设置设备音量
```java
// 音量范围:0-100,0表示静音
boolean success = client.getDeviceApi().setVolume("device001", 80);
```
#### 1.6 查询设备和锁的状态
```java
Map status = client.getDeviceApi().getDeviceStatus("device001");
System.out.println("设备状态: " + status.get("device_status")); // 0-离线, 1-在线, 2-故障
System.out.println("门状态: " + status.get("door_status")); // 0-关闭, 1-打开
System.out.println("锁状态: " + status.get("lock_status")); // 0-未锁, 1-已锁
System.out.println("摄像头: " + status.get("camera_status")); // 0-异常, 1-正常
System.out.println("网络: " + status.get("network_status")); // 0-断开, 1-连接
```
---
### 2. 商品管理
通过 `client.getGoodsApi()` 访问商品相关接口:
#### 2.1 获取设备可售卖商品列表
```java
List