在自动化脚本中如何在自己的后端服务中调用open api进行用户相关操作?
开发者可以在自有后台服务中完成用户创建、信息查询、脚本权限配置、自定义数据管理等核心操作实现自动化脚本平台与自有业务系统的深度打通。本文从接入准备、核心接口解析、Java Demo 实现、异常处理与最佳实践全流程讲解帮助开发者快速完成集成。一、冰狐 OpenAPI 接入基础1.1 接口核心规范基础域名https://aznfz.com数据格式统一返回 JSON成功state1失败state-1认证机制clientKeyclientSecret获取accessToken接口调用必传clientKeyaccessToken请求方式GET 为主创建用户为 POST数组 / JSON 参数需encodeURI编码调用限制/api/get_token禁止频繁调用否则 IP 拉黑1.2 开发前置准备注册冰狐开发者账号获取clientKey、clientSecret自有 Java 后端环境JDK8、Maven、HTTP 工具OkHttp/Hutool-HTTP依赖引入以 Hutool-HTTP 为例简化请求操作dependencies !-- Hutool工具包 -- dependency groupIdcn.hutool/groupId artifactIdhutool-all/artifactId version5.8.23/version /dependency !-- JSON解析 -- dependency groupIdcom.alibaba/groupId artifactIdfastjson2/artifactId version2.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/createPOSTclientKey、accessToken、username获取用户信息/api/user/infoGETclientKey、accessToken、openId选填获取用户列表/api/user/listGETclientKey、accessToken、分页参数设置用户支持脚本/api/user/set_support_scriptsGETopenId、scripts# 分隔获取用户自定义数据/api/user/getCustomDataGETopenId、key选填三、Java 实现冰狐用户操作完整 Demo3.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即可快速集成到自有项目中实现自动化脚本平台与业务系统的深度融合。