Ich versuche eine Last.fm-Sitzung zu autorisieren und habe Schwierigkeiten, eine Anforderung für einen Sitzungsschlüssel korrekt zu signieren.Authentifizieren mit Last.fm in Jquery - Ungültige Methodensignatur angegeben
Ich bekomme weiter Invalid method signature supplied
Aber wenn ich md5 Hash, was ich glaube, dass die Abfrage außerhalb von JS bestehen sollte, bekomme ich die gleiche Signatur. Ich muss die falschen Daten in die Zeichenfolge aufnehmen, denke ich, kann aber nicht herausfinden, was.
Ich weiß, es gibt ein paar andere Fragen, und ich habe sie alle durchgelaufen, um zu sehen, was hier schief läuft, aber ich schwöre, es sieht gut zu mir aus.
Dies ist der Signaturalgorithmus und Ajax-Aufruf. Ich habe versucht, auch genügend Beispieldaten zu hinterlassen.
// Set elsewhere but hacked into this example:
var last_fm_data = {
'last_token':'TOKEN876234876',
'user': 'bob',
'secret': 'SECRET348264386'
};
// Kick it off.
last_fm_call('auth.getSession', {'token': last_fm_data['last_token']});
// Low level API call, purely builds a POSTable object and calls it.
function last_fm_call(method, data){
// param data - dictionary.
last_fm_data[method] = false;
// Somewhere to put the result after callback.
// Append some static variables
data['api_key'] = "APIKEY1323454";
data['format'] = 'json';
data['method'] = method;
post_data = last_fm_sign(data);
$.ajax({
type: "post",
url: last_url,
data: post_data,
success: function(res){
last_fm_data[method] = res;
console.log(res['key'])// Should return session key.
},
dataType: 'json'
});
}
function last_fm_sign(params){
ss = "";
st = [];
so = {};
Object.keys(params).forEach(function(key){
st.push(key); // Get list of object keys
});
st.sort(); // Alphabetise it
st.forEach(function(std){
ss = ss + std + params[std]; // build string
so[std] = params[std]; // return object in exact same order JIC
});
// console.log(ss + last_fm_data['secret']);
// api_keyAPIKEY1323454formatjsonmethodauth.getSessiontokenTOKEN876234876SECRET348264386
hashed_sec = unescape(encodeURIComponent($.md5(ss + last_fm_data['secret'])));
so['signature'] = hashed_sec; // Correct when calculated elsewhere.
return so; // Returns signed POSTable object
}
Kann irgendjemand sehen, dass ich hier vermisse? Ich bin absolut ratlos, warum dies kein korrekt signiertes POSTable-Objekt im angeforderten Format here zurückgibt. Vielen Dank für Ihre Zeit.
Edit: kann niemandem für ihre Zeit danken, wenn ich keinen Rat bekomme! Keiner hatte Erfahrung mit last.fm?
Versuchen 'Entfernen von Daten [‚format‘] =‚json‘,' – George
Danke, ich versuchen, diese werden zusammen mit der antworte unten. – TechnicalChaos
Prost, obwohl etwas daneben - Ich habe meine eigene Antwort unten mit dem, was ich bezüglich der Format-Attribut gefunden habe, bearbeitet. – TechnicalChaos