2016-06-17 9 views
1

Ich versuche, diese link zu verwenden beschrieben Antwort zu erhalten:Schnell blox - Signature Generation Ausgabe

{ 
    "session": { 
    "application_id": 2, 
    "created_at": "2012-04-03T07:34:48Z", 
    "device_id": null, 
    "id": 743, 
    "nonce": 1308205278, 
    "token": "0e7bc95d85c0eb2bf052be3d29d3df523081e87f", 
    "ts": 1333438438, 
    "updated_at": "2012-04-03T07:34:48Z", 
    "user_id": null 
    } 
} 

Aber es jetzt sagen Anwendung nicht gefunden:

<?xml version="1.0" encoding="UTF-8"?> 
<errors> 
    <error>No application found</error> 
</errors> 

nicht voran gehen kann zu testen andere Anfragen. Dies ist ein Shell-Skript, das ich für immer curl Anfrage verwendet:

timestamp=`date +%s` 

body="application_id=HIDDENAPPLICATIONIDHERE&auth_key=HIDDENAUTHKEYHERE&nonce=2342546&timestamp=$timestamp" 

signature=`echo -n $body | openssl sha -hmac HIDDENSECRETHERE` 

body=$body"&signature="$signature 

#echo $body 
#echo $signature 

#exit 0 

curl -X POST \ 
-H "QuickBlox-REST-API-Version: 0.1.0" \ 
-d $body \ 
https://api.quickblox.com/session.xml 

So gibt es einige Informationen regrding diese vielleicht habe ich erstellt Shell-Skript auf eine falsche Art und Weise:

HMAC-SHA-Funktion des Körpers der Anfrage, mit einem Schlüssel auth_secret. Anfrage Körper wird gebildet als sortiert (alphabetisch sortiert, als Symbole, nicht als Bytes) durch Erhöhung der String-Array 'Parameter = Wert', getrennt mit dem Symbol "&". Für die Parameter als Benutzer weitergegeben [id] = 123 verwendet, so wird nur eine Zeile anzeigen: [id] = 123

Auch habe ich eine Swift project vorbereitet, wie Signatur zu erzeugen und erhalten Sitzung, aber immer noch der gleiche Fehler ohne Anwendung gefunden.

Irgendwelche Empfehlung? Dank

Antwort

0

Bitte Anwendungs-ID-Parameter überprüfen, da der Server Rückkehr:

<?xml version="1.0" encoding="UTF-8"?> 
<errors> 
    <error>No application found</error> 
</errors> 

Zum Beispiel Signatur generieren (Java):

Random random = new Random(); 

    String nonce = Integer.toString(random.nextInt()); 
    long time = System.currentTimeMillis()/1000; 
    String timestamp = Long.toString(time); 
    String signature; 

    String str = "application_id=" + applicationId + "&" + "auth_key=" + authKey + "&" + "nonce=" 
      + nonce + "&" + "timestamp=" + timestamp + "&" + "user[login]=" + adminLogin + "&" + "user[password]=" 
      + adminPassword; 

    signature = UtilsMethods.calculateHMAC_SHA(str, authSecret); 

calculateHMAC_SHA:

private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1"; 

    public static String calculateHMAC_SHA(String data, String key) throws SignatureException { 
     String result = null; 
     try { 

      // get an hmac_sha1 key from the raw key bytes 
      SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), HMAC_SHA1_ALGORITHM); 

      // get an hmac_sha1 Mac instance and initialize with the signing key 
      Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM); 
      mac.init(signingKey); 

      byte[] digest = mac.doFinal(data.getBytes()); 

      StringBuilder sb = new StringBuilder(digest.length * 2); 
      String s; 
      for (byte b : digest) { 
       s = Integer.toHexString(0xFF & b); 
       if (s.length() == 1) { 
        sb.append('0'); 
       } 

       sb.append(s); 
      } 

      result = sb.toString(); 

     } catch (Exception e) { 
      throw new SignatureException("Failed to generate HMAC : " + e.getMessage()); 
     } 

     return result; 
    } 
+0

Dank Andrey ich überprüfen wird und lass dich wissen, schätze deine Hilfe wirklich! –

+0

@MatrosovAlexander, Sie sind herzlich willkommen! –

+0

Hey Andrey, ich habe versucht, Ihre Empfehlung zu verwenden, und ich baute Swift-Projekt https://github.com/matrosovDev/QuickBloxApiTest/tree/master/QuickBloxTest, wo ich versuchte, das gleiche zu tun, aber immer noch "Keine Anwendung gefunden", Ich habe die App-ID erneut überprüft und bin mir sicher, dass dies korrekt ist, da ich sie mit der Schaltfläche auf der Website kopiert habe. In meinem Beispiel lasse ich leere Felder in Constants.swift, da ich meine nicht teilen möchte. Aber Sie können jede Ihrer App verwenden, um es zu überprüfen. Vielen Dank für Ihre Hilfe! –