gpt4 book ai didi

java - python 服务器上的 API 参数中提供的 appsecret_proof 无效

转载 作者:行者123 更新时间:2023-11-30 02:42:56 27 4
gpt4 key购买 nike

我无法为我的应用程序的两个不是 friend 的用户获取共同的 friend 。

根据 all_mutual_friends 权限,我需要连同 appsecret_proof 参数一起发出请求。

我使用此 GET 调用生成了 app_access_token:

GET /oauth/access_token
?client_id={app-id}
&client_secret={app-secret}
&grant_type=client_credentials

我已经三次检查了 app_id 和 app_secret,它们是正确的。我通过使用 Java 中的 app_secret 对 app_access_token 进行 SHA256 哈希处理来生成 appsecret_proof。

现在,当我请求共同好友(发送 appsecret_proof 作为查询参数)时,它会回复说

"Invalid appsecret_proof provided in the API argument" 

带有 GraphMethodException。原始请求(没有 appsecret_proof)对于 friend 用户来说运行良好。这里有什么指示吗?

这是我用来生成appsecret_proof的java代码:

public static String hashMac(String text, String secretKey)
throws SignatureException {

try {
Key sk = new SecretKeySpec(secretKey.getBytes(), HASH_ALGORITHM);
Mac mac = Mac.getInstance(sk.getAlgorithm());
mac.init(sk);
final byte[] hmac = mac.doFinal(text.getBytes());
return toHexString(hmac);
} catch (NoSuchAlgorithmException e1) {// throw an exception or pick a different encryption method
throw new SignatureException(
"error building signature, no such algorithm in device "
+ HASH_ALGORITHM);
} catch (InvalidKeyException e) {
throw new SignatureException(
"error building signature, invalid key " + HASH_ALGORITHM);
}
}

private static final String HASH_ALGORITHM = "HmacSHA256";

public static String toHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder(bytes.length * 2);

Formatter formatter = new Formatter(sb);
for (byte b : bytes) {
formatter.format("%02x", b);
}

return sb.toString();
}

我的服务器是基于Python的。

最佳答案

我能够找到共同的 friend 。我使用 app_access_token 来生成 appsecret_proof,但需要使用 session 用户的 access_token 来生成 appsecret_proof。显然,Facebook 没有记录这一点。

关于java - python 服务器上的 API 参数中提供的 appsecret_proof 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41123463/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com