5

Nach Facebook - Authentication within a Canvas Page Document, sagen sie, dass wir eine signed_request bekommen, die ein JSON-Objekt besteht. Jetzt sagen sie, dass signed_request durch $_POST['signed_request'] bekommen werden kann Ich stimme seiner Arbeit für mich zu.wie gelesen facebook signed_request zu erhalten user_id

nach ihnen jetzt, wenn der Benutzer angemeldet ist in i ein JSON-Objektwert wie dies wird immer: -

{ 
    "expires":UNIXTIME_WHEN_ACCESS_TOKEN_EXPIRES, 
    "algorithm":"HMAC-SHA256", 
    "issued_at":UNIXTIME_WHEN_REQUEST_WAS_ISSUED, 
    "oauth_token":"USER_ACCESS_TOKEN", 
    "user_id":"USER_ID", 
    "user":{ 
    "country":"ISO_COUNTRY_CODE", 
    "locale":"ISO_LOCALE_CODE", 
    ... 
    } 
} 

Jetzt möchte ich die user_id aus diesem holen, so verwende ich dieses Stück Code aber seine nicht funktioniert: -

if(isset($_POST['signed_request'])) 
{ 
    echo 'YES'; 
    $json = $_POST['signed_request']; 
    $obj = json_decode($json); 
    print $obj->{'user_id'};  
} 

Es drucken nur die YES. Wieso ist es so?

Ich habe irgendwo gelesen, dass ohne App-Authentifizierung ich nicht in der Lage sein wird, die user_id zu extrahieren, aber nach dem Facebook, dies ist der 1. Schritt und Authentifizierung der Anwendung wäre 4.. Ich bin neu darin, wenn jemand mir helfen kann, wird es eine große Hilfe sein. Vielen Dank.

+0

Wenn Sie eine 'print_r ($ _ POST)' tun, was sehen Sie? – Brad

+0

Was sehen Sie eigentlich, wenn Sie 'print_r ($ _ POST)' versuchen? – Brad

+0

@Brad wenn i 'print_r ($ _ POST [ 'signed_request']);' i erhalten genau dieser Wert 'cnMQQpKShmtfcXXEAjNrazO7AZxAqCuZ0aIA-K1L-P8.qgytuisdhrl0aG0iOiJITUFDLVNIQTI1NiI sImV4cGlyZXMiOjEzNDUwNTM2MDAsImlzc3VlZF9hdCI6MTM0NTA0ODYwOCpoemi1dGhfdG9rZW4iOiJB QUFFOGZCWW1sN2NCQUJHVWZIb1VZUGdMcngwdjBURFlSdVFiNHNQR2pSMDRUNnZKZHkzWkFYU2RBYWNiV nFtMHJRZTFKZ2lrWkFRWkFJR2RPb0JuQ0JiVGxLOGpuUXlCSVpDWkJsWHdzWG5XbHg5VVZEV1dkIiwicG FnZSI6eyJpZCI6IjI2OTY3MDc5NjQ4MDcxOCIsImxpa2VkIjpmYWxzZSwiYWRtaW4iOmZhbHNlfSwidXN lciI6eyJjb3VudHJ5IjoiaW4iLCJsb2NhbGUiOiJlbl9JTiIsImFnZSI6eyJtaW4iOjIxfX0sInVzZXJf aWQiOiIxNTc2NDU1NjQ5In0' –

Antwort

2

Ich denke, es bei json_decode($json) gescheitert, weil $json keine gültige JSON-Zeichenfolge ist, wie Sie in Kommentar über print_r($_POST['signed_request']); erwähnt haben.

Nach Facebook - Authentication within a Canvas Page Document der signed_request Parameter codiert wird, und das Parsen die signed_request Zeichenfolge wird ein JSON Objekt ergeben.

Wenn Sie das PHP SDK verwenden, wie Abhishek im Kommentar gesagt hat, geben $facebook->getSignedRequest(); Ihnen das decodierte JSON.

Blick here für weitere Details über die Unterzeichnung Anfrage

+0

Hey, ich kann die URL mit app_id im iframe bekommen, um auf der Facebook-Registerkarte geöffnet zu sein –

6

Wenn Sie Sie das Code-Snippet nicht mit dem FB SDK arbeiten möchten können Sie die user_id und andere Variablen erhalten (Code-Schnipsel aus https://developers.facebook.com/docs/facebook-login/using-login-with-games/)

function parse_signed_request($signed_request) { 
    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

    // decode the data 
    $sig = base64_url_decode($encoded_sig); 
    $data = json_decode(base64_url_decode($payload), true); 

    // confirm the signature 
    $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); 
    if ($sig !== $expected_sig) { 
    error_log('Bad Signed JSON signature!'); 
    return null; 
    } 

    return $data; 
} 

function base64_url_decode($input) { 
    return base64_decode(strtr($input, '-_', '+/')); 
} 
-1

können Sie meinen Dienst

verwenden HOW TO USE: nur JSONP Anfrage Feuer auf diese

https://websta.me/fbappservice/parseSignedRequest/<append signed request here> 

wenn Erfolg es so etwas wie dieses

{ 
"algorithm": "HMAC-SHA256", 
"issued_at": xxxxx, 
"page": { 
    "id": "xxxxxxx", 
    "admin": true, 
    "liked": false 
}, 
"user": { 
    "country": "jp", 
    "locale": "en_US", 
    "age": { 
     "min": xx 
    } 
} 

wenn fehlgeschlagen gibt er zurück:

Bad signed Json Signature 

glücklich Codierung !!

3

Alte Post Ich weiß aber wollte eine Antwort auf Art Geigel Antwort hinzufügen (ich kann nicht direkt darauf kommen).

Ihr Code-Snippet wird die Zeile fehlt,

$secret = "appsecret"; // Use your app secret here 

und die kompletten Schnipsel,

function parse_signed_request($signed_request) { 
    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

    $secret = "appsecret"; // Use your app secret here 

    // decode the data 
    $sig = base64_url_decode($encoded_sig); 
    $data = json_decode(base64_url_decode($payload), true); 

    // confirm the signature 
    $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); 
    if ($sig !== $expected_sig) { 
     error_log('Bad Signed JSON signature!'); 
     return null; 
    } 

    return $data; 
} 

function base64_url_decode($input) { 
    return base64_decode(strtr($input, '-_', '+/')); 
} 

Um die ursprüngliche Frage zu beantworten

Um Daten aus dem signed_request zu erhalten, umfasst die Funktionen oben und ...

$data = parse_signed_request($_POST['signed_request']); 

echo '<pre>'; 
print_r($data); 
Verwandte Themen