2016-12-13 1 views
1

У меня возникли проблемы с выбором общих друзей для двух пользователей моего приложения, которые не являются друзьями.Недопустимые appsecret_proof, предоставленные в аргументе API на сервере python

Согласно разрешению all_mutual_friends, мне нужно сделать запрос вместе с параметром appsecret_proof.

Я сгенерировал app_access_token, используя этот GET вызов:

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

Я тройная проверила APP_ID и app_secret, они правильны. Я создал appsecret_proof by SHA256, хешируя app_access_token с помощью app_secret в Java.

Теперь, когда я прошу взаимных друзей (посылая appsecret_proof в качестве параметра запроса), он отвечает говоря

"Invalid appsecret_proof provided in the API argument" 

с GraphMethodException. Исходный запрос (без appsecret_proof) отлично работает для пользователей, которые являются друзьями. Какие-нибудь указатели здесь?

Вот код Java я использую для создания appsecret_proof:

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(); 
} 

Мой сервер питон основе.

ответ

0

Я был в состоянии получить общих друзей. Я использовал app_access_token для создания appsecret_proof, но access_token сеансового пользователя нужно использовать для создания appsecret_proof. По-видимому, это не было зарегистрировано Facebook.

Смежные вопросы