You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用bunq Java SDK创建PSD2上下文时遇BadRequestException求助

解决bunq Java SDK创建PSD2 ApiContext时的"You can have at most 1 active server credentials"异常

这个错误的意思很明确:bunq的PSD2服务对每个账户有严格限制——同一时间只能存在1个活跃的服务器凭证。你现在的代码每次运行都尝试创建新的凭证,但之前已经成功创建过一个并处于活跃状态,所以触发了这个报错。

这里有两种可行的解决思路,根据你的需求选择:

1. 复用已创建的ApiContext(推荐)

bunq SDK设计的最佳实践就是:只在第一次初始化时调用createForPsd2创建上下文,之后把上下文保存到文件,后续运行直接加载复用即可,不需要重复创建。

调整你的代码如下:

// 封装上下文获取逻辑,自动判断是创建还是加载
public static ApiContext getBunqContext() throws IOException, BunqException {
    File contextFile = new File("bunq_psd2_context.json");
    if (contextFile.exists()) {
        // 后续运行直接加载已保存的上下文
        return ApiContext.load(contextFile.getAbsolutePath());
    } else {
        // 第一次运行创建新上下文
        ApiContext apiContext = ApiContext.createForPsd2(
            ApiEnvironmentType.SANDBOX,
            SecurityUtils.getCertificateFromFile("cert.pem"),
            SecurityUtils.getPrivateKeyFromFile("key.pem"),
            new Certificate[]{SecurityUtils.getCertificateFromFile("cert.pem")},
            API_DEVICE_DESCRIPTION,
            new ArrayList<>()
        );
        // 保存上下文到文件,方便后续复用
        apiContext.save(contextFile.getAbsolutePath());
        return apiContext;
    }
}

这样后续运行代码时,就不会重复创建新的服务器凭证,自然也就不会触发这个错误了。

2. 撤销现有活跃凭证后重新创建

如果你确实需要创建新的凭证(比如旧凭证丢失、过期,或者测试环境需要重置),可以通过以下方式操作:

  • 沙盒环境:登录bunq开发者门户,找到你的测试账户,进入"Server Credentials"板块,删除现有的活跃凭证,之后再重新运行你的创建代码。
  • 生产环境:如果有旧的ApiContext实例,可以调用相关API撤销现有凭证;或者通过bunq的商户后台操作。

需要注意的是,生产环境中频繁创建/撤销凭证可能会影响账户稳定性,所以优先推荐复用已有的上下文。

内容的提问来源于stack exchange,提问作者Saket Puranik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 07:32:33