{"id":9986,"date":"2011-12-20T12:08:13","date_gmt":"2011-12-20T04:08:13","guid":{"rendered":"http:\/\/living.donghong.info\/blog\/?page_id=9986"},"modified":"2023-10-24T09:59:46","modified_gmt":"2023-10-24T01:59:46","slug":"111219-facebook-connect-%e6%94%b9%e4%bd%bf%e7%94%a8-php-sdk-3-01","status":"publish","type":"page","link":"https:\/\/donghong.info\/blog\/?page_id=9986","title":{"rendered":"Facebook Graph API \u53d6\u5f97 \u9577\u6548\u671f accessToken (230601 \u66f4\u65b0\uff0csince 111219)"},"content":{"rendered":"<p>\u76ee\u7684\uff1a\u6539\u9032\u73fe\u6709\u300c\u5c07\u4e00\u822c\u7db2\u7ad9\u7684\u6210\u54e1\u6d3b\u52d5\u8a0a\u606f\uff0c\u81ea\u52d5\u767c\u5e03\u5230\u540c\u540d\u7684Facebook\u7c89\u7d72\u5c08\u9801\u5857\u9d09\u7246\u300d\u7684\u65b9\u5f0f\u3002\u4e3b\u8981\u662f\u914d\u5408OAUTH2.0\u8207\u4f7f\u7528Graph API\u3002<\/p>\n<p>\u6458\u8981\uff1a<\/p>\n<ol>\n<li><strong>2018.5.23<\/strong> \u5728\u6b65\u9a5f2\uff0credirect_uri\u82e5\u662f\u9996\u9801\uff0c\u5fc5\u9808\u52a0\u4e0a &#8220;\/&#8221;\uff0c\u5426\u5247\u6703\u51fa\u73fe\u00a0<em>Error validating verification code<\/em> \u7684\u932f\u8aa4\u3002<\/li>\n<li><strong>2018.3.21<\/strong> \u5728\u6b65\u9a5f2\uff0credirect_uri\u5fc5\u9808\u5305\u542b\u5728\u61c9\u7528\u7a0b\u5f0f\u7db2\u57df\u4e2d\uff0c\u5426\u5247\u6703\u51fa\u73fe\u7121\u6cd5\u8f09\u5165\u7db2\u5740\u7684\u932f\u8aa4\u8a0a\u606f\uff0c\u53c3\u8003<a href=\"#ref6\">\u8cc7\u6599\u516d<\/a>\u3002<\/li>\n<li><strong>2013.5.18<\/strong> \u672c\u4f86\u53ea\u8981publish_actions\u5c31\u53ef\u4ee5\u6db5\u62ecpublish_stream\uff0c\u4f46\u6628\u5929\u958b\u59cb(2013.5.17)\u4e4b\u5f8c\u7a81\u7136\u51fa\u73fe\u6b0a\u9650\u4e0d\u5920\u7684\u554f\u984c\u3002\u89e3\u6c7a\u7684\u65b9\u5f0f\u662f\u4ecd\u8981\u52a0\u4e0apublish_stream\u3002\u800cpublish_stream\u540c\u6642\u6703\u8ce6\u4e88upload_video\u7b49\u6b0a\u9650\uff0c\u800cpublish_actions\u5247\u4e0d\u6703\u3002<\/li>\n<li><strong>2013.4.30<\/strong> \u89e3\u6c7a\u4e86\u7ba1\u7406\u7c89\u7d72\u9801accessToken\u6703\u904e\u671f\u7684\u554f\u984c\u3002\u4f46\u5982\u679c\u53ea\u662f\u53d6\u5f97\u4e00\u6b21\u6027token\u4ee5\u767c\u4f48\u5230user wall\uff0c\u61c9\u53c3\u8003<a href=\"https:\/\/developers.facebook.com\/docs\/howtos\/login\/server-side-login\">\u9019\u7bc7\u4f5c\u6cd5<\/a>\u3002<\/li>\n<li><strong>2013.3.6<\/strong> accessTokenu\u5ef6\u9577\u5169\u500b\u6708\u5f8c\u4e5f\u9084\u662f\u904e\u671f\uff0c\u7121\u6cd5\u4ee5\u7a0b\u5f0f\u81ea\u52d5\u5ef6\u9577\uff0c\u53ea\u80fd\u624b\u52d5\u91cd\u65b0\u7533\u8acb\u4e00\u500b\u3002<a href=\"#tokenExpired\">\u53c3\u8003\u9019\u88e1<\/a><\/li>\n<li><strong>2013.1.3<\/strong> \u4ee5offline_access\u53d6\u5f97\u7684accessToken\u4e5f\u6703\u904e\u671f\uff0c\u539f\u56e0\u662foffline_access\u5df2\u7d93\u88ab\u5ee2\u68c4\u3002\u89e3\u6c7a\u7684\u65b9\u5f0f\u662f\u5ef6\u9577accessToken\u7684\u671f\u9650\uff0c<a href=\"#ref5\">\u53c3\u8003\u8cc7\u6599\u4e94<\/a>\u3002\u53e6\u5916\u6b0a\u9650\u53d6\u5f97\u6539\u70bapublish_actions, publish_stream, manage_pages<\/li>\n<li><strong>2011.12.19<\/strong> \u7db2\u7ad9\u8207\u7c89\u7d72\u5c08\u9801\u7684\u5857\u9d09\u7246\u7684\u8a0a\u606f\u767c\u5e03\uff0c\u539f\u672c\u4f7f\u7528php sdk 1.5\u7248\u7684 REST api\uff0c\u8abf\u6574\u6210\u4f7f\u75283.01\u7248\u3002\u53d6\u5f97user\u8a8d\u8b49\u3001app\u6388\u6b0a\u3001app\u8a8d\u8b49\u7684\u65b9\u5f0f\u4ea6\u4e00\u4f75\u8abf\u6574\u3002\n<ul>\n<li>\u5927\u62b5\u800c\u8a00\u7c21\u5316\u4e86\u8a8d\u8b49\u6388\u6b0a\u7684\u7a0b\u5e8f\u3002<\/li>\n<li>\u4e0d\u904e\u5982\u679c\u8981\u4ee5\u7c89\u7d72\u5c08\u9801\u7684\u8eab\u5206\u5c07\u7db2\u7ad9\u8a0a\u606f\u767c\u5e03\u5230\u7c89\u7d72\u5c08\u9801\u7684\u5857\u9d09\u7246\uff0c\u4f3c\u4e4e\u4ecd\u9700\u8981\u5c07sesseion\u7684\u8cc7\u8a0a\u4fdd\u5b58\u4e0b\u4f86\uff0c\u800c\u4e14\u8981\u53d6\u5f97offline access\u7684\u6b0a\u9650\u3002\u56e0\u6b64\u5982\u679c\u8981\u5c07\u8a0a\u606f\u767c\u5e03\u5230\u7c89\u7d72\u5c08\u9801\uff0c\u81f3\u5c11\u8981\u6709publish_actions, publish_stream, manage_pages, offline_access\u3002<\/li>\n<li>accessToken\u53d6\u4ee3\u4e86session<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\u6b65\u9a5f\uff1a<\/p>\n<ol>\n<li>\u4e0b\u8f09php-sdk\u8207\u5b89\u88dd\u5230\u7db2\u7ad9\u53bb\u3002\u53c3\u8003\u8cc7\u65991<\/li>\n<li><del datetime=\"2023-6-1\">\u53d6\u5f97user\u8a8d\u8b49\u3001app\u6388\u6b0a\uff0c\u53c3\u8003\u8cc7\u65992\u3002<\/del>=&gt;\u6539\u5f9e <a href=\"https:\/\/developers.facebook.com\/tools\/explorer\/\" target=\"_blank\" rel=\"noopener\">Graph API Explorer<\/a>\u00a0\u53d6\u5f97 app \u6709 manage_pages \u6b0a\u9650\u7684<strong>ACCESSTOKEN<\/strong>(<strong>2023.6.1<\/strong> updated)\u3002<br \/>\n<del datetime=\"2023-6-1\"><code>https:\/\/www.facebook.com\/dialog\/oauth?client_id=<strong>YOUR_APP_ID<\/strong>&amp;redirect_uri=YOUR_URL<br \/>\n&amp;scope=publish_actions, <del datetime=\"2018-05-24T02:19:50+00:00\">publish_stream,<\/del>manage_pages&amp;response_type=<strong>token<\/strong><\/code><\/del><\/li>\n<li><del datetime=\"2023-6-1\">\u5728\u56de\u8fd4\u7684\u7db2\u9801(redirect_uri)\u7684\u7db2\u5740\u5217\uff0c\u6703\u770b\u5230accessToken\u3002\u628a\u9019\u500b\u503c<strong>\u8a18\u4e0b\u4f86<\/strong>\u3002<code>http:\/\/YOUR_URL#access_token=<strong>ACCESSTOKEN<\/strong>&amp;expires_in=5XXX<\/code>(expires_in\u7684\u503c\u4e0d\u518d\u662f0\uff0c2013.1.3 remarked)<\/del><\/li>\n<li><strong>2013.1.3\u00a0<\/strong>\u5ef6\u9577\u9019\u500b <strong>ACCESSTOKEN<\/strong> \u7684\u671f\u9650\u81f3\u5169\u500b\u6708\uff1a<code>https:\/\/graph.facebook.com\/oauth\/access_token?<br \/>\nclient_id=APP_ID&amp;<br \/>\nclient_secret=APP_SECRET&amp;<br \/>\ngrant_type=fb_exchange_token&amp;<br \/>\nfb_exchange_token=EXISTING_ACCESS_TOKEN<\/code><\/li>\n<li>\u958b\u59cb\u5bebphp\u7a0b\u5f0f\uff0c\u521d\u59cb\u5316facebook\u7269\u4ef6<code>require 'facebook.php';<br \/>\n$facebook = new Facebook(array('appId' =&gt; APPID,'secret' =&gt; APPSECRET,));<br \/>\n$facebook-&gt;setAccessToken(ACCESSTOKEN); \/\/\u525b\u525b\u8a18\u4e0b\u4f86\u7684\u90a3\u500b\u503c<\/code><\/li>\n<li>\u6e96\u5099\u8981\u767c\u5e03\u5230\u5857\u9d09\u7246\u7684\u8cc7\u6599\uff0c\u53ef\u53c3\u8003\u8cc7\u65994\u3002\u6ce8\u610fpicture\u7684\u4f4d\u5740\u8cc7\u6599\u578b\u614b\u4e00\u5b9a\u8981\u662f\u5b57\u4e32\uff0c\u4e0d\u80fd\u76f4\u63a5\u628a\u8cc7\u6599\u5eab\u6293\u51fa\u4f86\u7684\u503c\u585e\u7d66\u4ed6\u3002\u53e6\u5916actions\uff0c\u4e0d\u80fd\u585enull\u6216\u662f\u7a7a\u5b57\u4e32\uff0c\u5426\u5247\u90fd\u7121\u6cd5\u6b63\u78ba\u767c\u4f48\u3002\u6ce8\u610f\uff0c\u82e5\u5c07picture\u7684\u4f4d\u7f6e\u7f6e\u65bcname\u8207link\u4e4b\u524d\uff0c\u6709\u53ef\u80fd\u5c0e\u81f4\u767c\u4f48\u5230\u5857\u9d09\u7246\u4e0a\u7684\u5716\u7247\u4e0d\u80fd\u986f\u793a\u51fa\u4f86\u3002<br \/>\n<code>$message = \"\u767c\u4f48\u7684\u8a0a\u606f\u6a19\u984c\";<br \/>\n$action_links = array(<br \/>\narray(<br \/>\n'name' =&gt; \"\u52d5\u4f5c\",<br \/>\n'link' =&gt; \"\u52d5\u4f5c\u7684\u9023\u7d50\"<br \/>\n)<br \/>\n);<br \/>\n$postdata = array(<br \/>\n\/\/'access_token'=&gt;ACCESSTOKEN,<br \/>\n'message'=&gt; $message,<br \/>\n'name' =&gt; \"\u9023\u7d50\u7684\u6a19\u984c\uff0c\u51fa\u73fe\u5728\u8a0a\u606f\u6a19\u984c\u4e0b\u65b9\",<br \/>\n'link' =&gt; \"\u9023\u7d50\u7684\u4f4d\u5740\",<br \/>\n'picture'=&gt;\"\"\u9023\u7d50\u7684\u5f71\u50cf,<br \/>\n'description' =&gt; \"\u9023\u7d50\u7684\u63cf\u8ff0\",<br \/>\n'actions'=&gt; json_encode($action_links)<br \/>\n);<\/code><\/li>\n<li>\u547c\u53ebapi\u767c\u4f48\u5230\u5857\u9d09\u7246<br \/>\n<code>$facebook-&gt;api('\/\u7c89\u7d72\u5c08\u9801id\/feed', 'POST' ,$postdata); <\/code><br \/>\n\u4e5f\u53ef\u4ee5\u4f7f\u7528curl\u4f86\u547c\u53ebGraph API\uff0c\u4f46\u5fc5\u9808\u4f3a\u670d\u5668\u7aef\u6709\u5b89\u88ddcurl\u7a0b\u5f0f\u5eab\u624d\u884c\uff0c\u800c\u4e14\u8a18\u5f97\u8981\u628aaccessToken\u653e\u5230 $postdata\u4e2d<br \/>\n<code>$ch = curl_init();<br \/>\ncurl_setopt($ch, CURLOPT_URL, 'https:\/\/graph.facebook.com\/\u7c89\u7d72\u5c08\u9801id\/feed');<br \/>\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);<br \/>\ncurl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);<br \/>\n$response = curl_exec($ch);<\/code><\/li>\n<li><del datetime=\"2013-01-04T07:25:37+00:00\">\u4f46\u9019\u6a23\u505a\u4e4b\u5f8c\u96d6\u53ef\u767c\u4f48\u8a0a\u606f\uff0c\u4f46\u767c\u4f48\u7684\u4eba\u537b\u8b8a\u6210\u7c89\u7d72\u5c08\u9801\u7684<strong>\u7ba1\u7406\u8005<\/strong>\u5e33\u865f\uff0c\u800c\u975e\u4ee5\u7c89\u7d72\u5c08\u9801\u7684\u8eab\u5206\u767c\u8868\u3002\u53c3\u8003\u8cc7\u65994\u3002\u89e3\u6c7a\u7684\u65b9\u5f0f\u662f\u53d6\u5f97\u7528\u6b65\u9a5f3\u7684accessToken\u518d\u53bb\u53d6\u5f97\u7c89\u7d72\u5c08\u9801\u7684accessToken\u3002\u53c3\u8003\u8cc7\u65992\u7684Page Login\u3002\u4ee5\u4e0b\u6b65\u9a5f\u5c07\u6703\u50b3\u56de\u9019\u500buser\u5e33\u865f\u6240\u7ba1\u7406\u7684\u7c89\u7d72\u5c08\u9801\u4e00\u89bd\u3002\u628a\u5176\u4e2d\u7684accessToken \u53d6\u51fa\uff0c\u53d6\u4ee3\u6b65\u9a5f4\u4e4b\u5f8c\u7684accessToken\u7684\u503c\u5373\u53ef\u3002<code>https:\/\/graph.facebook.com\/me\/accounts?access_token=TOKEN_FROM_ABOVE<\/code><\/del>\uff0c\u4ee5\u4e0a\u5df2\u7d93\u5ee2\u68c4(2013.1.4)\uff1b\u5c07\u6240\u53d6\u5f97\u7c89\u7d72\u5c08\u9801\u7684acessToken\u62ff\u4f86\u7528\u6642\uff0c\u6703\u51fa\u73fe\u932f\u8aa4\u8a0a\u606f\uff1aactor\u4e0d\u80fd\u505a\u70ba&#8230;.\u4e4b\u985e\u7684\u932f\u8aa4\u8a0a\u606f\u3002\u6240\u4ee5\u6709\u53ef\u80fd\u6703\u51fa\u73fe\u4ee5\u5c08\u9801\u7684\u7ba1\u7406\u8005\u8eab\u5206\u4f86po\u6587\u3002\u4f46\u662f\u82e5\u662f\u5728\u767c\u5e03\u7684\u8a0a\u606f\u8cc7\u6599\u4e2d\uff0c\u6307\u5b9aactions\u4ecd\u53ef\u8b8a\u6210\u4ee5\u7c89\u7d72\u5c08\u9801\u8eab\u5206\u4f86\u767c\u6587\u3002\u5982\uff1a\n<pre>$postdata = array(\n  \t'message'=&gt; $message,\n\t'name' =&gt; $name,\n\t'link' =&gt; $link,\t  \t\t\t\t\n        'picture' =&gt; $imgstr,                    \n        'description' =&gt; $description,\n\t<strong>'actions'=&gt; json_encode($action_links)<\/strong>\n);<\/pre>\n<\/li>\n<li><del>\u95dc\u65bcaccessToken\u5169\u500b\u6708\u6703\u904e\u671f\u7684\u554f\u984c\uff0c\u53ef\u5728refresh wall\u7684\u7a0b\u5f0f\u78bc\u4e2d\uff0c\u52a0\u4e0a<code>$facebook-&gt;setExtendedAccessToken();<\/code>\uff0c\u4f46\u5fc5\u9808\u5148\u5c07<a href=\"https:\/\/github.com\/facebook\/facebook-php-sdk\/\">php sdk<\/a>\u66f4\u65b0\u52302012.8.14\u4ee5\u5f8c\u7684\u7248\u672c\u3002<\/del><a name=\"tokenExpired\"><\/a><strong>2013.3.6<\/strong> \u4ee5\u4e0a\u662f\u7121\u6548\u7684\uff0c60\u5929\u5230\u4e86\u4e4b\u5f8caccessToken\u4ecd\u6703\u904e\u671f\uff0c\u800c\u4e14\u4f3c\u4e4e\u7121\u6cd5\u5728\u7a0b\u5f0f\u4e2d\u81ea\u52d5\u5ef6\u9577\u3002\u5982\u6b64\u572860\u5929\u4e4b\u5167\uff0c\u5fc5\u9808\u518d\u91cd\u8907\u505a\u4e00\u6b21\u7533\u8acbToken\uff0c\u5ef6\u9577Token\u7684\u52d5\u4f5c\uff0c\u53c3\u8003<a href=\"http:\/\/stackoverflow.com\/questions\/9163432\/access-token-expiration-not-getting-extended\">\u9019\u7bc7\u6587\u7ae0<\/a>\u3002<\/li>\n<li><strong>2013.4.30<\/strong> \u627e\u5230\u7ba1\u7406\u7c89\u7d72\u5c08\u9801accessToken\u6703\u904e\u671f\u7684\u89e3\u6cd5\u4e86\uff0c\u53c3\u8003<a href=\"https:\/\/developers.facebook.com\/roadmap\/offline-access-removal\/\">\u9019\u4e00\u7bc7\u7684scenario 5<\/a>\uff0c\u53d6\u5f97\u9577\u5929\u671f\u7684accessToken\u5f8c\uff0c\u5fc5\u9808\u518d\u4ee5graph api\u53bbquery [User ID]\/accounts\uff0c\u4ee5\u53d6\u5f97\u6240\u7ba1\u7406\u7684\u5c08\u9801\u7684accessToken\uff0c\u800c\u9019\u500baccessToken\u5c31\u771f\u7684\u6c38\u9060\u4e0d\u6703\u904e\u671f\u4e86\u3002\u7c21\u55ae\u4f5c\u6cd5\u662f\u5728<a href=\"https:\/\/developers.facebook.com\/tools\/explorer\/\">Graph API explorer<\/a>\u4e2d\uff0c\u8f38\u5165\u539f\u53d6\u5f97\u7684\u9577\u5929\u671faccessToken\uff0c\u518d\u57f7\u884c \/[User ID]\/accounts\uff0c\u5c31\u6703\u770b\u5230\u6240\u7ba1\u7406\u7684\u7c89\u7d72\u9801\u7684\u6c38\u4e0d\u904e\u671f\u7684accessToken<\/li>\n<\/ol>\n<p>\u53c3\u8003\u8cc7\u6599\uff1a<\/p>\n<ol>\n<li>php-sdk : <a href=\"http:\/\/developers.facebook.com\/docs\/reference\/php\/\">http:\/\/developers.facebook.com\/docs\/reference\/php\/<\/a><\/li>\n<li>app\u8a8d\u8b49\u6388\u6b0a :\u00a0<a href=\"http:\/\/developers.facebook.com\/docs\/authentication\/\">http:\/\/developers.facebook.com\/docs\/authentication\/<\/a><\/li>\n<li>Graph api about post :\u00a0<a href=\"http:\/\/developers.facebook.com\/docs\/reference\/api\/post\/\">http:\/\/developers.facebook.com\/docs\/reference\/api\/post\/<\/a><\/li>\n<li>How To: Post On Facebook Page As Page Not As Admin User Using PHP-SDK :\u00a0<a href=\"http:\/\/www.masteringapi.com\/tutorials\/how-to-post-on-facebook-page-as-page-not-as-admin-user-using-php-sdk\/31\/\">http:\/\/www.masteringapi.com\/tutorials\/how-to-post-on-facebook-page-as-page-not-as-admin-user-using-php-sdk\/31\/<\/a><\/li>\n<li><a name=\"ref5\"><\/a>\u5ef6\u9577accessToken\u7684\u671f\u9650\u5169\u500b\u6708\uff1a<a href=\"http:\/\/stackoverflow.com\/questions\/8982025\/how-to-extend-access-token-validity-since-offline-access-deprecation\">http:\/\/stackoverflow.com\/questions\/8982025\/how-to-extend-access-token-validity-since-offline-access-deprecation<\/a><\/li>\n<li><a name=\"ref6\"><\/a><a href=\"https:\/\/blog.longwin.com.tw\/2017\/09\/facebook-graph-api-error-redirect-uri-2017\/\">FB Graph \u767b\u5165 API Error \u9700\u8981\u78ba\u8a8d redirect_uri \u7684\u554f\u984c\u4fee\u5fa9 (v2.10)<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>\u76ee\u7684\uff1a\u6539\u9032\u73fe\u6709\u300c\u5c07\u4e00\u822c\u7db2\u7ad9\u7684\u6210\u54e1\u6d3b\u52d5\u8a0a\u606f\uff0c\u81ea\u52d5\u767c\u5e03\u5230\u540c\u540d\u7684Facebook\u7c89\u7d72\u5c08\u9801\u5857\u9d09\u7246\u300d\u7684\u65b9\u5f0f\u3002\u4e3b\u8981\u662f\u914d\u5408O [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":24,"menu_order":0,"comment_status":"open","ping_status":"open","template":"","meta":{"jetpack_post_was_ever_published":false,"footnotes":""},"class_list":["post-9986","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/donghong.info\/blog\/index.php?rest_route=\/wp\/v2\/pages\/9986","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/donghong.info\/blog\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/donghong.info\/blog\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/donghong.info\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/donghong.info\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9986"}],"version-history":[{"count":3,"href":"https:\/\/donghong.info\/blog\/index.php?rest_route=\/wp\/v2\/pages\/9986\/revisions"}],"predecessor-version":[{"id":28350,"href":"https:\/\/donghong.info\/blog\/index.php?rest_route=\/wp\/v2\/pages\/9986\/revisions\/28350"}],"up":[{"embeddable":true,"href":"https:\/\/donghong.info\/blog\/index.php?rest_route=\/wp\/v2\/pages\/24"}],"wp:attachment":[{"href":"https:\/\/donghong.info\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9986"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}