开发者可以在自有后台服务中完成用户创建、信息查询、脚本权限配置、自定义数据管理等核心操作,实现自动化脚本平台与自有业务系统的深度打通。本文从接入准备、核心接口解析、Java Demo 实现、异常处理与最佳实践全流程讲解,帮助开发者快速完成集成。
一、冰狐 OpenAPI 接入基础
1.1 接口核心规范
- 基础域名:
https://aznfz.com - 数据格式:统一返回 JSON ,成功
state=1,失败state=-1 - 认证机制:
clientKey+clientSecret获取accessToken,接口调用必传clientKey+accessToken - 请求方式:GET 为主,创建用户为 POST ,数组 / JSON 参数需
encodeURI编码 - 调用限制:
/api/get_token禁止频繁调用,否则 IP 拉黑
1.2 开发前置准备
- 注册冰狐开发者账号,获取
clientKey、clientSecret - 自有 Java 后端环境:JDK8+、Maven、HTTP 工具(OkHttp/Hutool-HTTP)
- 依赖引入(以 Hutool-HTTP 为例,简化请求操作)
XML
<dependencies>
<!-- Hutool工具包 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.23</version>
</dependency>
<!-- JSON解析 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.32</version>
</dependency>
</dependencies>
二、用户操作核心接口解析
2.1 认证接口(Token 获取与刷新)
2.1.1 获取 Token
- 地址:
GET /api/get_token - 参数:
clientKey(必填)、clientSecret(必填) - 响应:
accessToken、refreshToken、expiresIn(过期时间 / 秒)
2.1.2 刷新 Token
- 地址:
GET /api/refresh_token - 参数:
clientKey、refreshToken - 作用:避免
accessToken过期,延长调用有效期
2.2 用户核心操作接口
| 接口功能 | 请求地址 | 请求方式 | 核心参数 |
|---|---|---|---|
| 创建用户 | /api/user/create |
POST | clientKey、accessToken、username |
| 获取用户信息 | /api/user/info |
GET | clientKey、accessToken、openId(选填) |
| 获取用户列表 | /api/user/list |
GET | clientKey、accessToken、分页参数 |
| 设置用户支持脚本 | /api/user/set_support_scripts |
GET | openId、scripts(# 分隔) |
| 获取用户自定义数据 | /api/user/getCustomData |
GET | openId、key(选填) |
三、Java 实现冰狐用户操作完整 Demo
3.1 配置类与工具类
java
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
/**
* 冰狐OpenAPI配置类
*/
public class BingHuConfig {
// 基础域名
public static final String BASE_URL = "https://aznfz.com";
// 开发者密钥(替换为自己的)
public static final String CLIENT_KEY = "your_client_key";
public static final String CLIENT_SECRET = "your_client_secret";
// Token缓存
public static String ACCESS_TOKEN;
public static String REFRESH_TOKEN;
}
/**
* 冰狐API调用工具类
*/
class BingHuApiUtil {
/**
* 获取AccessToken
*/
public static boolean getToken() {
String url = BingHuConfig.BASE_URL + "/api/get_token"
+ "?clientKey=" + BingHuConfig.CLIENT_KEY
+ "&clientSecret=" + BingHuConfig.CLIENT_SECRET;
try {
HttpResponse response = HttpRequest.get(url).timeout(5000).execute();
JSONObject result = JSON.parseObject(response.body());
if (result.getIntValue("state") == 1) {
JSONObject data = result.getJSONObject("data");
BingHuConfig.ACCESS_TOKEN = data.getString("accessToken");
BingHuConfig.REFRESH_TOKEN = data.getString("refreshToken");
System.out.println("Token获取成功:" + BingHuConfig.ACCESS_TOKEN);
return true;
} else {
System.err.println("Token获取失败:" + result.getString("data"));
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 通用GET请求
*/
public static JSONObject doGet(String api, JSONObject params) {
StringBuilder url = new StringBuilder(BingHuConfig.BASE_URL + api);
url.append("?clientKey=").append(BingHuConfig.CLIENT_KEY);
url.append("&accessToken=").append(BingHuConfig.ACCESS_TOKEN);
if (params != null && !params.isEmpty()) {
params.forEach((k, v) -> {
try {
url.append("&").append(k).append("=")
.append(URLEncoder.encode(v.toString(), StandardCharsets.UTF_8.name()));
} catch (Exception e) {
e.printStackTrace();
}
});
}
try {
HttpResponse response = HttpRequest.get(url.toString()).timeout(5000).execute();
return JSON.parseObject(response.body());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 通用POST请求(JSON格式)
*/
public static JSONObject doPost(String api, JSONObject bodyParams) {
String url = BingHuConfig.BASE_URL + api
+ "?clientKey=" + BingHuConfig.CLIENT_KEY
+ "&accessToken=" + BingHuConfig.ACCESS_TOKEN;
try {
HttpResponse response = HttpRequest.post(url)
.header("Content-Type", "application/json")
.body(JSON.toJSONString(bodyParams))
.timeout(5000)
.execute();
return JSON.parseObject(response.body());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
3.2 用户操作实现类
java
import com.alibaba.fastjson2.JSONObject;
/**
* 冰狐用户操作实现类
*/
public class BingHuUserService {
/**
* 1. 创建用户
*/
public String createUser(String username, String password, String phone, String wx) {
JSONObject body = new JSONObject();
body.put("username", username);
body.put("password", password);
body.put("phoneNumber", phone);
body.put("wx", wx);
JSONObject result = BingHuApiUtil.doPost("/api/user/create", body);
if (result != null && result.getIntValue("state") == 1) {
return result.getJSONObject("data").getString("openId");
} else {
System.err.println("创建用户失败:" + (result == null ? "请求异常" : result.getString("data")));
return null;
}
}
/**
* 2. 获取用户信息
*/
public JSONObject getUserInfo(String openId) {
JSONObject params = new JSONObject();
if (openId != null) params.put("openId", openId);
JSONObject result = BingHuApiUtil.doGet("/api/user/info", params);
if (result != null && result.getIntValue("state") == 1) {
return result.getJSONObject("data");
} else {
System.err.println("获取用户信息失败");
return null;
}
}
/**
* 3. 设置用户支持的脚本
*/
public boolean setUserScripts(String openId, String... scriptNames) {
JSONObject params = new JSONObject();
params.put("openId", openId);
params.put("scripts", String.join("#", scriptNames));
JSONObject result = BingHuApiUtil.doGet("/api/user/set_support_scripts", params);
return result != null && result.getIntValue("state") == 1 && result.getBooleanValue("data");
}
/**
* 4. 获取用户自定义数据
*/
public Object getUserCustomData(String openId, String key) {
JSONObject params = new JSONObject();
if (openId != null) params.put("openId", openId);
if (key != null) params.put("key", key);
JSONObject result = BingHuApiUtil.doGet("/api/user/getCustomData", params);
if (result != null && result.getIntValue("state") == 1) {
return result.get("data");
} else {
System.err.println("获取自定义数据失败");
return null;
}
}
/**
* 5. 获取用户列表
*/
public JSONObject getUserList(int cursor, int count) {
JSONObject params = new JSONObject();
params.put("cursor", cursor);
params.put("count", count);
JSONObject result = BingHuApiUtil.doGet("/api/user/list", params);
return result != null && result.getIntValue("state") == 1 ? result.getJSONObject("data") : null;
}
}
3.3 测试主类
java
/**
* 测试类
*/
public class BingHuUserTest {
public static void main(String[] args) {
// 1. 获取Token
boolean tokenFlag = BingHuApiUtil.getToken();
if (!tokenFlag) return;
BingHuUserService userService = new BingHuUserService();
// 2. 创建用户
String openId = userService.createUser("test001", "123456", "13800138000", "wx_test001");
System.out.println("创建用户OpenId:" + openId);
if (openId == null) return;
// 3. 获取用户信息
JSONObject userInfo = userService.getUserInfo(openId);
System.out.println("用户信息:" + userInfo);
// 4. 设置用户支持脚本
boolean scriptFlag = userService.setUserScripts(openId, "自动签到", "数据采集");
System.out.println("设置脚本权限:" + scriptFlag);
// 5. 获取用户自定义数据
Object customData = userService.getUserCustomData(openId, null);
System.out.println("用户自定义数据:" + customData);
// 6. 获取用户列表
JSONObject userList = userService.getUserList(0, 10);
System.out.println("用户列表:" + userList);
}
}
四、关键注意事项与最佳实践
4.1 Token 管理
- 禁止频繁调用
get_token,建议缓存 Token ,过期前用refresh_token刷新 - 多线程环境下保证 Token 线程安全,避免重复获取
4.2 参数编码
- 数组 / JSON 参数(如
uuids、params)必须URL 编码,防止特殊字符导致请求失败 - 脚本名多个时用
#分隔,严格匹配冰狐后台脚本名称
4.3 异常处理
- 统一判断
state字段,1为成功,-1时读取data获取错误信息 - 处理网络超时、DNS 解析失败、参数非法等异常
- 关键操作(创建用户、设置权限)增加重试机制
4.4 安全规范
clientKey、clientSecret严禁硬编码,建议配置在配置中心 / 环境变量- 生产环境禁用日志打印敏感信息,避免密钥泄露
- 接口调用添加权限校验,仅允许内部服务访问
五、集成价值与扩展方向
通过冰狐 OpenAPI,自有 Java 后台可实现:
- 用户体系打通:自有账号体系与冰狐用户无缝同步,统一管理
- 脚本权限精细化:按用户 / 用户组分配脚本权限,实现商业化管控
- 数据互通:自定义数据字段存储业务信息,实现业务数据联动
- 自动化运维:批量创建用户、配置权限、查询状态,降低运维成本
扩展方向可结合设备管理接口 、卡密接口 、脚本执行接口,实现从用户→设备→脚本→卡密的全流程自动化,打造完整的自动化脚本运营平台。
六、总结
本文完整实现了 Java 后端调用用户相关接口的 Demo,覆盖创建、查询、权限配置、自定义数据 四大核心场景。开发者只需替换自己的clientKey和clientSecret,即可快速集成到自有项目中,实现自动化脚本平台与业务系统的深度融合。