FB рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЧрдП рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдпрд╛ рд╡рд░реНрддрдорд╛рди рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН:
- рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо - HMAC-SHA256;
- user_id - рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░ рдЬрд╛рдПрдВ;
- oauth_token - рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдЧреНрд░рд╛рдл рдПрдкреАрдЖрдИ , рдУрд▓реНрдб рд░реЗрд╕реНрдЯ рдПрдкреАрдЖрдИ рдпрд╛ рдПрдлрдХреНрдпреВрдПрд▓ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ;
- expires - рдЬрдм oauth_token рд╕рдорд╛рдкреНрдд рд╣реЛ рд░рд╣рд╛ рд╣реИ;
- profile_id - рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЯреИрдм рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
$ _REQUEST ['рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд_рд░реЗрдХреНрд╕реНрдЯ'] HMAC SHA-256, рдЕрд╡рдзрд┐ (ред) рдХреЗ рдЖрдзрд╛рд░ рдФрд░ рдмреЗрд╕ 64url рдореЗрдВ рдкреИрдХ рдХреА рдЧрдИ рд╡рд╕реНрддреБ рдХреЗ JSON рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (рд╕рднреА рдПрдХ рд╕рд╛рде):
g2LAGH9BQ25BqO8-V5lP4Z74_DQ7U6AzWDGBpz-3yDg ред eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOjAsIm9hdXRoX3Rva2VuIjoiMTI4ODI1OTA3MTYxMTc3fGNlNmM1NTUwNDEyNDlhOGU4NjlmOTVlOC0xMDAwMDEzMzM0ODk4ACR8ZVRzd1d4WjR5b2pkQ2dHU0dUcWx0NFpvBXlBLiIsInVzZXJfaWQiOiIxMDAwMDEzMzM0ODk4NDQifQ
FB рдХреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рд╣реБрдП_рд░реЗрдХреНрд╡реЗрд╕реНрдЯ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рд▓рд╣рд╛рд▓ рдпрд╣ рдПрдХ рдмреАрдЯрд╛ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ):
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЙрд╕рдХреЗ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рдХреИрдирд╡рд╕ рдпреВрдЖрд░рдПрд▓ (рдЬрд╣рд╛рдВ рдПрдлрдмреА рд╕реЗ рдЖрд╡реЗрджрди рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ) рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╕рд╛рдЗрди рдЗрди рдХрд░реЗрдВред рдРрд╕реЗ рд╕рдВрд╡рд╛рдж рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ:
1. рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рддред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрдирдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░реЗрдВ:
https://graph.facebook.com/oauth/authorize? client_id = рд╣рдорд╛рд░реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрдИрдбреА & redirect_uri = рдЬрд╣рд╛рдВ рдЕрдиреБрдорддрд┐ рдХреЗ рдмрд╛рдж рдЬрд╛рдирд╛ рд╣реИ & рдЧреБрдВрдЬрд╛рдЗрд╢ = рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рдХреНрдпрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИрдВ
рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ ред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЖрд╡рд╢реНрдпрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд_рдкреНрд░рддреНрдпреЗрдХ redirect_uri рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдПрдЧрд╛ред
2. FBJS рдореЗрдердб Facebook.showPermissionDialog ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП (FBML рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп):
Facebook.showPermissionDialog ('publish_stream, read_stream', рдХреЙрд▓рдмреИрдХ);
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдПрдХ рдорд╛рдирдХ рдПрдлрдмреА рд╕рдВрд╡рд╛рдж рджреЗрдЦреЗрдВрдЧреЗред рдпрджрд┐ рдПрдХреНрд╕реЗрд╕ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рддреЛ рдХреЙрд▓рдмреИрдХ ('publish_stream, read_stream') рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛, рдХреЙрд▓рдмреИрдХ (рдЕрд╢рдХреНрдд);
3. рдЕрдЬрд╛рдХреНрд╕ ред
рдПрдлрдмреАрдЬреЗрдПрд╕ рдореЗрдВ рдПрдХ рдЕрдЬрд╛рдХреНрд╕ рд╡рд╕реНрддреБ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрдкрддреНрддрд┐ рд╣реИред рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдкрд░ рдпрд╣ рд╕рддреНрдп рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрд╕рдХреЗ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдБрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА ajax рдЕрдиреБрд░реЛрдз рд╕рдлрд▓ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
var рдЕрдЬрд╛рдХреНрд╕ = рдирдпрд╛ рдЕрдЬрд╛рдХреНрд╕ (); ajax.responseType = Ajax.FBML; ajax.ondone = function (data) { рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ (рдбреЗрдЯрд╛); } ajax.requireLogin = true; ajax.post ("http://example.com/processAjax.php");
рдпрд╣рд╛рдБ, рдкрд┐рдЫрд▓реЗ рдкрджреНрдзрддрд┐ рдХреА рддрд░рд╣, FB рд╕рдВрд╡рд╛рдж рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред FBJS рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ FBML рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, appAPPLICATIOPN_ID_ рд▓рд╛рдЗрди рдХреЛ рд╕рднреА рдЪрд░ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд var ajax var app12345390_ajax рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд▓рд░реНрдЯ app1234567890_alert рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рд╡реИрд╕реЗ рдХрдВрд╕реЛрд▓ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЦреНрдп рдбреАрдмрдЧрд░ред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, FB рдиреЗ iframes рдФрд░ Javascript SDK рдХреЗ рдкрдХреНрд╖ рдореЗрдВ FBML рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рд╣реИ , рдЬреЛ рдЯреИрдм рдкрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░реЗрдЧрд╛ред
4. рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрд╕рдбреАрдХреЗ
рдЖрд╡реЗрджрди рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ FB.login рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
FB.login (рдлрд╝рдВрдХреНрд╢рди (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛) { рдЕрдЧрд░ (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред рд╕рддреНрд░) { // рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓реЙрдЧ рдЗрди рдХрд┐рдпрд╛ } { // рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧрд┐рди рдХреЛ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ } });
рд╕рдВрд╡рд╛рдж рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреЙрдкрдЕрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдПрдХ рд╕рдВрд╡рд╛рдж рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ:
рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд_рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред FB рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдлрд╝рдВрдХреНрд╢рди PHP SDK рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ):
рдлрд╝рдВрдХреНрд╢рди parse_signed_request ($ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд, $ рдЧреБрдкреНрдд) {// $ рдЧреБрдкреНрдд - рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЧреБрдкреНрдд рд╕реВрдЪреА ($ рдПрдиреНрдХреЛрдбреЗрдб_рдПрд╕рдЖрдИрдЬреА, $ рдкреЗрд▓реЛрдб) = рд╡рд┐рд╕реНрдлреЛрдЯ ('ред', $ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд_рдХрд░рдирд╛, 2); // рдбреЗрдЯрд╛ рдХреЛ рдбреАрдХреЛрдб рдХрд░реЗрдВ $ sig = base64_url_decode ($ рдПрдиреНрдХреЛрдбреЗрдб_sig); $ рдбреЗрдЯрд╛ = json_decode (base64_url_decode ($ рдкреЗрд▓реЛрдб), рд╕рддреНрдп); рдЕрдЧрд░ (strtoupper ($ рдбреЗрдЯрд╛ ['рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо'])! == 'HMAC-SHA256') { error_log ('рдЕрдЬреНрдЮрд╛рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдоред рдЕрдкреЗрдХреНрд╖рд┐рдд HMAC-SHA256'); рд╡рд╛рдкрд╕реА; } // рдЪреЗрдХ рд╕рд┐рдЧ $ рдЕрдкреЗрдХреНрд╖рд┐рдд_рд╕рд┐рдЧ = рд╣реИрд╢_рд╣рдо ('sha256', $ рдкреЗрд▓реЛрдб, $ рдЧреБрдкреНрдд, $ рдХрдЪреНрдЪрд╛ = рд╕рддреНрдп); рдЕрдЧрд░ ($ sig! == $ рдЕрдкреЗрдХреНрд╖рд┐рдд_рд╕рд┐рдЧрд░) { error_log ('рдЦрд░рд╛рдм рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд JSON рд╣рд╕реНрддрд╛рдХреНрд╖рд░!'); рд╡рд╛рдкрд╕реА; } $ рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рдПрдВ; } рдлрд╝рдВрдХреНрд╢рди base64_url_decode ($ рдЗрдирдкреБрдЯ) { // $ рдЗрдирдкреБрдЯ - base64url рд╡рд╛рдкрд╕реА base64_decode (рд╕реНрдЯреНрд░реЗрдЯ ($ рдЗрдирдкреБрдЯ, '-_', '+ /')); }
Parse_signed_request рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреА рд▓реМрдЯрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ рдХреБрдВрдЬреА oauth_reoken рд╣реЛрдЧреА ред рдЕрдЧрд▓рд╛, рдЖрдк рдЧреНрд░рд╛рдлрд╝ рдПрдкреАрдЖрдИ, рдУрд▓реНрдб рд░реЗрд╕реНрдЯ рдПрдкреАрдЖрдИ рдпрд╛ рдПрдлрдХреНрдпреВрдПрд▓ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
рдорд┐рддреНрд░: https: //graph.facebook.com/ID/friends? Access_token = ... рд╕рдорд╛рдЪрд╛рд░ рдлрд╝реАрдб: https: //graph.facebook.com/ID/home? Access_token = ... рджреАрд╡рд╛рд░: https: //graph.facebook.com/ID/feed? Access_token = ...
рдЯреИрдм рдкрд░ FBML рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрддреА рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рдмрд╛рдж, рдЖрдк рдХреЗрд╡рд▓ ajax рдЕрдиреБрд░реЛрдз рд╕реЗ user_id рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, user_id profile_id рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ (рджреЛрдиреЛрдВ рд╡рд░реНрддрдорд╛рди рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ (рдкреГрд╖реНрда) рдХреА рдЖрдИрдбреА рд╣реИрдВ), рдФрд░ oauth_token рдкреГрд╖реНрда рдкрд░ "рд╕рдВрд▓рдЧреНрди" рд╣реЛрдЧрд╛, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред
рд╕реМрднрд╛рдЧреНрдп рд╣реИ