使用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
相关产品推荐
相关产品推荐

