在自动化脚本中如何在自己的后端服务中调用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 开发前置准备

  1. 注册冰狐开发者账号,获取clientKeyclientSecret
  2. 自有 Java 后端环境:JDK8+、Maven、HTTP 工具(OkHttp/Hutool-HTTP)
  3. 依赖引入(以 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(必填)
  • 响应:accessTokenrefreshTokenexpiresIn(过期时间 / 秒)
2.1.2 刷新 Token
  • 地址:GET /api/refresh_token
  • 参数:clientKeyrefreshToken
  • 作用:避免accessToken过期,延长调用有效期

2.2 用户核心操作接口

接口功能 请求地址 请求方式 核心参数
创建用户 /api/user/create POST clientKeyaccessTokenusername
获取用户信息 /api/user/info GET clientKeyaccessTokenopenId(选填)
获取用户列表 /api/user/list GET clientKeyaccessToken、分页参数
设置用户支持脚本 /api/user/set_support_scripts GET openIdscripts(# 分隔)
获取用户自定义数据 /api/user/getCustomData GET openIdkey(选填)

三、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 管理

  1. 禁止频繁调用get_token,建议缓存 Token ,过期前用refresh_token刷新
  2. 多线程环境下保证 Token 线程安全,避免重复获取

4.2 参数编码

  • 数组 / JSON 参数(如uuidsparams)必须URL 编码,防止特殊字符导致请求失败
  • 脚本名多个时用#分隔,严格匹配冰狐后台脚本名称

4.3 异常处理

  1. 统一判断state字段,1为成功,-1时读取data获取错误信息
  2. 处理网络超时、DNS 解析失败、参数非法等异常
  3. 关键操作(创建用户、设置权限)增加重试机制

4.4 安全规范

  1. clientKeyclientSecret严禁硬编码,建议配置在配置中心 / 环境变量
  2. 生产环境禁用日志打印敏感信息,避免密钥泄露
  3. 接口调用添加权限校验,仅允许内部服务访问

五、集成价值与扩展方向

通过冰狐 OpenAPI,自有 Java 后台可实现:

  1. 用户体系打通:自有账号体系与冰狐用户无缝同步,统一管理
  2. 脚本权限精细化:按用户 / 用户组分配脚本权限,实现商业化管控
  3. 数据互通:自定义数据字段存储业务信息,实现业务数据联动
  4. 自动化运维:批量创建用户、配置权限、查询状态,降低运维成本

扩展方向可结合设备管理接口卡密接口脚本执行接口,实现从用户→设备→脚本→卡密的全流程自动化,打造完整的自动化脚本运营平台。

六、总结

本文完整实现了 Java 后端调用用户相关接口的 Demo,覆盖创建、查询、权限配置、自定义数据 四大核心场景。开发者只需替换自己的clientKeyclientSecret,即可快速集成到自有项目中,实现自动化脚本平台与业务系统的深度融合。

相关推荐
weixin_4080996712 小时前
触动精灵调用身份证OCR识别API实现智能信息录入(Lua脚本实战)
junit·ocr·lua·自动化脚本·石榴智能·身份证ocr识别·触动精灵
ai_coder_ai17 小时前
在自动化脚本中如何在自己的后端服务中调用open api获取所有设备信息?
autojs·open·自动化脚本·冰狐智能辅助·easyclick·open api
ai_coder_ai6 天前
使用颜色来实现自动化脚本
autojs·自动化脚本·冰狐智能辅助·easyclick
ai_coder_ai7 天前
在自动化脚本中如何实现文本转语音?
tts·autojs·自动化脚本·冰狐智能辅助·easyclick
ai_coder_ai8 天前
在自动化脚本中如何使用websocket?
websocket·autojs·自动化脚本·冰狐智能辅助·easyclick
ai_coder_ai9 天前
在自动化脚本中如何实现录音功能?
autojs·录音·自动化脚本·冰狐智能辅助·easyclick
Mr -老鬼10 天前
EasyClick 安卓CLI全栈专家能力手册
android·自动化·ai编程·easyclick·易点云测
ai_coder_ai11 天前
在自动化脚本中如何获取手机信息和控制手机?
autojs·自动化脚本·冰狐智能辅助·easyclick
Mr -老鬼12 天前
EasyClick 全平台公开问题解决方案全集(2026最新完整版)
自动化·ec·easyclick·易点云测