此方法屬於 Messenger 擴充功能 SDK 的一部分。若要瞭解在網站中加入 SDK 的相關資訊,請參閱新增 Messenger 擴充功能 SDK。
可用性
這個 API 僅適用 Messenger 113 版 (Android0) 和 114 版 (iOS) 中使用。
若要確認這個 API 在特定用戶端上的可用性,請調用 getSupportedFeatures()
並在回應中找出 context
屬性。
getContext()
方法會針對開啟了 Webview 的用戶和對話串擷取額外相關資訊。這個方法很適合用來建立互動式群組體驗和遊戲,以及限制任何只供分享至特定對話串的內容。
請放棄 getUserID()
改用 getContext()
,前者已經停用。
調用這個函數,取得用戶 PSID、對話串編號和對話串類型。如需方法參數的完整清單,請參閱 getContext() Reference。
MessengerExtensions.getContext('YOUR_APP_ID',
function success(thread_context){
// success
},
function error(err){
// error
}
);
已傳遞到成功回調的回應將為 JavaScript 物件,格式如下:
{
"thread_type": "GROUP",
"tid": "1411911565550430",
"psid": "1293479104029354",
"signed_request": "5f8i9XXH2hEaykXHKFvu-E5Nr6QRqN002JO7yl-w_9o.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTUwNDA0NjM4MCwicGFnZV9pZCI6NjgyNDk4MTcxOTQzMTY1LCJwc2lkIjoiMTI1NDQ1OTE1NDY4MjkxOSIsInRocmVhZF90eXBlIjoiVVNFUl9UT19QQUdFIiwidGlkIjoiMTI1NDQ1OTE1NDY4MjkxOSJ9"
}
signed_request
在某些情況下,您可能會希望將取自 getContext()
的資訊傳送到後端,並在進行登入或購買等動作前先驗證這項資訊。這樣,您就能確定這項資訊確實來自 Messenger,避免受到詐騙。
signed_request
是根據 OAuth 2.0 規格以 base64url 編碼,並且簽署了 HMAC 版本的應用程式密鑰。
您可以透過下列 4 個步驟進行驗證:
'.'
字元(例如:238fsdfsd.oijdoifjsidf899
)將簽署要求隔成 2 個部分issued_at
,以便確認要求的新舊程度。這項操作可透過任何現代程式語言來完成。下列為 PHP 的範例:
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, '-_', '+/')); }
解碼承載將會產生物件,當中的資訊與原先由 getContext()
所傳回的資訊相同,但多了 algorithm
、issued_at
和 page_id
欄位:
{ "psid": "1293479104029354", "algorithm": "HMAC-SHA256", "thread_type": "GROUP", "tid": "1411911565550430", "issued_at": 1491351619, "page_id": 167938560376726 }
請注意,為了避免意外洩露您的應用程式密鑰,這項驗證最好只在您的伺服器上進行,千萬不要在用戶端程式碼中進行。
對於與一個應用程式編號或 Bot 連結的多個專頁,部分商家使用全球專頁結構。 在這種情況下,聊天擴充功能中的 getContext()
所傳回的對話串編號將因用戶的國家/地區而異。
使用下列 API,將國家/地區專頁專屬對話串編號解析為全球對話串編號,並使用該全球對話串編號,在從個別地區專頁存取聊天擴充功能的用戶之間保持靜態。
擷取全球對話串編號:
curl -X GET "https://graph.facebook.com/v2.6/{thread-id}?access_token=<PAGE_ACCESS_TOKEN>"
回應範例:
{"tid":1577059318985661,"global_tid":1577059318985661}
如果沒有全球專頁,則不會顯示 global_tid
。