วิธีการนี้เป็นส่วนหนึ่งของ SDK ส่วนขยายของ Messenger สำหรับข้อมูลเกี่ยวกับการรวม SDK ไว้ในไซต์ของเรา โปรดดู “เพิ่ม SDK ส่วนขยายของ Messenger”
ความพร้อมใช้งาน
API ใช้งานได้เฉพาะใน Messenger เวอร์ชัน 113 ขึ้นไปบน Android และเวอร์ชัน 114 ขึ้นไปบน iOS
หากต้องการตรวจสอบความพร้อมใช้งานในแต่ละไคลเอ็นต์ ลองเรียก getSupportedFeatures()
แล้วตรวจหาทรัพย์สิน “context
” ในข้อความตอบกลับ
วิธี getContext()
จะเรียกข้อมูลเพิ่มเติมเกี่ยวกับบุคคลและเธรดที่เปิดมุมมองเว็บ ข้อมูลเหล่านี้มีประโยชนต่อการสร้างประสบการณ์กลุ่มและเกมแบบอินเทอร์แอคทีฟ รวมถึงการจำกัดเนื้อหาที่มีจุดประสงค์สำหรับแชร์เฉพาะในบางเธรด
ควรใช้ “getContext()
” แทน “getUserID()
” ซึ่งในปัจจุบันไม่มีการสนับสนุนแล้ว
เรียกฟังก์ชันนี้เพื่อรับ PSID ของบุคคล, ID ของเธรด และประเภทของเธรด สำหรับรายการแบบสมบูรณ์ของพารามิเตอร์วิธีการ โปรดดูที่เอกสารอ้างอิง getContext()
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
คือ base64url ที่เข้ารหัสและลงชื่อด้วยเวอร์ชัน HMAC ของ ข้อมูลลับของแอพ ที่ยึดตามข้อมูลจำเพาะ OAuth 2.0
คุณสามารถตรวจสอบความถูกต้องได้ด้วย 4 ขั้นตอนต่อไปนี้
'.'
(เช่น 238fsdfsd.oijdoifjsidf899
)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 }
โปรดทราบว่า การตรวจสอบข้อมูลนี้ควรเกิดขึ้นที่เซิร์ฟเวอร์และต้องไม่เป็นรหัสฝั่งไคลเอ็นต์ เพื่อป้องกันการเปิดเผยข้อมูลลับของแอพโดยไม่ตั้งใจ
บางธุรกิจใช้โครงสร้างเพจทั่วโลก ซึ่ง ID ของแอพหรือบอทหนึ่งรายการจะเชื่อมโยงเข้ากับหลายเพจ ในกรณีนี้ ID ของเธรดที่ getContext()
ส่งคืนในส่วนขยายแชทจะแตกต่างกันไปสำหรับผู้คนในแต่ละประเทศ
ใช้ API ต่อไปนี้เพื่อแปลง ID ของเธรดแบบเจาะจงเพจของประเทศเป็น ID ของเธรดแบบทั่วโลก และใช้ ID ของเธรดทั่วโลกนั้นในการรักษาสถานะของผู้ใช้ต่างๆ ที่เข้าถึงส่วนขยายแชทจากเพจประจำภูมิภาค
รับ ID ของเธรดทั่วโลก:
curl -X GET "https://graph.facebook.com/v2.6/{thread-id}?access_token=<PAGE_ACCESS_TOKEN>"
ตัวอย่างการตอบกลับ
{"tid":1577059318985661,"global_tid":1577059318985661}
หากไม่มีเพจทั่วโลก global_tid
จะไม่ปรากฏ