在自动化脚本中如何在自己的后端服务中调用open api进行用户相关操作?
开发者可以在自有后台服务中完成用户创建、信息查询、脚本权限配置、自定义数据管理等核心操作,实现自动化脚本平台与自有业务系统的深度打通。本文从接入准备、核心接口解析、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 为例,简化请求操作)
<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 配置类与工具类
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 用户操作实现类
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 测试主类
/** * 测试类 */ 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,即可快速集成到自有项目中,实现自动化脚本平台与业务系统的深度融合。
