Yodlee REST api addSiteAccount1 异常 IncompleteArgumentException

Yodlee REST api addSiteAccount1 exception IncompleteArgumentException

我有为 cobUser、用户、siteId、用户名、密码添加 SiteAccount1 的代码。

此代码在开发环境中为我正确添加了站点帐户,即我得到了有效响应并可以继续(注意这是针对 DAG Bank 的)。

但是在暂存环境中,addSiteAccount returns 我是个例外(注意这是针对 siteId 15798)。

异常类型:com.yodlee.core.IncompleteArgumentException 参考代码:_xxxxxxx 消息:'FieldInfo:FieldInfoSingle 的解密失败:

Yodlee 已实施 PKI 以进一步增强当前的安全措施。您的暂存环境似乎启用了 PKI 功能。启用此功能后,Yodlee 希望您以加密形式发送凭据。这意味着在调用 addSiteAccount1 API 和其他 APIs 如 putMFARequest 和 updateCredentials 之前,您需要加密 username/password 和 MFA 信息的值,然后发送它而不是像您一样将其作为明文发送现在正在做。或者您可以要求 Yodlee 支持团队在您的临时环境中禁用 PKI 功能。

要为您的环境获取 public 密钥,您可以调用 getPublicKeyDetails API 子- URL: jsonsdk/DataEncryptionService/getPublicKeyDetails

您必须将 cobSessionToken 作为参数传递,这是一个 HTTP POST 调用。

EDIT-1(在 Java 中添加了用于加密值的代码) 下面是Java中关于如何加密的代码,仅供参考:-

public static String encrypt(String plainText) throws Exception
{

    Security.addProvider(new BouncyCastleProvider());
    String pub = "-----BEGIN PUBLIC KEY-----"+
            "\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtUS7ZJpnbcu8B+mfGrr0Gz6A23lS893mEFNnuR+frbtWDsoIHTfN4yhfbslkzsAMp3ENvM6Ic/0nHEvftrZxFXSrN7n3xZ+mdzOV/u8rqZoB7MEu6mZvdg3zfj7dGglq/fqlYxzHLlxDHjeCrY0dSD0ZAX1zCm3IZ0ufbMBqTrsSaHAuDlIXaQlJXmz3/Y+YfynJZXth/ats1gTBQhMIU9lWutMa4iKkeehn+P9ja4pC9NUlB9W4pojF2Qs+pY4kgTb9+SP8WjnhoSAmJMQGbYwY3HOZyfuOqAmdjoh9Y0LEZ3tq5NGD0b+T7L+P/FuIzvjYZYq6g/FaWaPcVrVLpwIDAQAB"+
            "\n-----END PUBLIC KEY-----";
    System.out.println(pub);
    String strt= pub;
    StringReader fileReader= new StringReader(strt); 
    PEMReader pemReader= new PEMReader(fileReader);
    PublicKey pk= (PublicKey)pemReader.readObject();

    Cipher c = Cipher.getInstance(RSA_ECB_PKCS5);
    PublicKey publicKey = pk;
    c.init(Cipher.ENCRYPT_MODE, transformKey(publicKey,     
    "RSA", new BouncyCastleProvider()));
    byte[] encValue= new byte[0];
    try {
        encValue = c.doFinal(plainText.getBytes());
    } catch (IllegalBlockSizeException e) {
        e.printStackTrace();
    } catch (BadPaddingException e) {
        e.printStackTrace();
    }
    String encrypted = DatatypeConverter.printHexBinary(encValue);  
    System.out.println("Encrypted value: "+encrypted);
    return encrypted;
}