แสดงบทความที่มีป้ายกำกับ PHP แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ PHP แสดงบทความทั้งหมด

วันพฤหัสบดีที่ 4 ตุลาคม พ.ศ. 2561

ทำระบบ Login เข้าใช้งานเว็บไซต์ด้วย Google+ Login


          ถ้าพูดถึงเว็บ Social Media แล้ว เพื่อน ๆ ก็คงจะนึกถึง Facebook กันใช่ม่ะ แต่ในความเป็นจริง นอกจาก Facebook แล้วก็ยังมีเว็บ Social Media อีก Platform นึงอยู่นะ..... Google+ (Google Plus) ชื่อนี้คนทั่วไปอาจจะไม่ค่อยรู้จักกันสักเท่าไหร่ แต่ก็ถือเป็นเว็บ Social Media อีกเว็บที่ Google เป็นเจ้าของ ซึ่งแน่นอนว่าเราสามารถเข้าใช้งาน Google+ ด้วย account ของ Google ได้

          แม้ว่า Google+ จะไม่ค่อยประสบความสำเร็จและเป็นที่นิยมเท่ากับ Facebook สักเท่าไหร่ แต่ทาง Google ก็ได้เปิด API ให้นักพัฒนาสามารถนำ Google+ Login ไปใช้ในการยืนยันตัวตนเพื่อเข้าใช้งานเว็บไซต์ภายนอกได้เหมือนกับ Facebook ซึ่งในบทความที่แล้วนู้นนนน เราได้ผนวก Facebook Login เข้ากับเว็บไซต์ของเราไปแล้ว ในบทความนี้เรามาลองผนวก Google+ Login เข้ากับเว็บไซต์ของเรากันบ้างดีกว่า เย่!

          การจะใช้งาน Google+ Login นั้น อันดับแรกจะต้องเปิดการใช้งาน Google+ API แล้วสร้าง Client ID ที่จะใช้ในการเรียก Library ของ Google ก่อน ถัดไปก็โหลด Library เข้าไปที่เว็บ แล้วสร้างปุ่มไว้เรียกใช้งาน Login API  แค่นี้ก็เป็นอันเสร็จ ว่าแล้วก็อย่ารอช้า ลุยที่ขั้นตอนแรกกันเลยดีกว่า

เปิดการใช้งาน Google+ API


          เริ่มต้นด้วยการเข้าไปที่ Google API Console


          คลิกปุ่ม Create หรือ สร้าง เพื่อทำการสร้างโปรเจ็กต์ใหม่


          จัดตั้งชื่อให้เรียบร้อยแล้วคลิกปุ่ม สร้าง (Create)


          คลิกที่ เปิดใช้ API และบริการ (Enable APIs & Services)


          ให้ค้นหาแล้วก็คลิกไปที่ Google+ API


          คลิกเบา ๆ ที่ปุ่ม เปิดใช้ (Enable) โล้ดดดดด


          หลังจากเปิดการใช้งาน Google+ API แล้ว ขั้นตอนถัดไปให้คลิกที่ API และบริการ (APIs & Services) ตรงมุมซ้ายบน แล้วจึงคลิกที่ ข้อมูลรับรอง (Credentials) ตรงแถบเมนูด้านซ้าย


          คลิกที่แท็บ "หน้าจอคำยินยอม OAuth" จากนั้นให้กรอกชื่อแอปพลิเคชัน และ email โดยชื่อแอปพลิเคชันจะเป็นชื่อที่แสดงให้ผู้ใช้งานเห็นก่อนจะทำการ Login ถัดไปให้เลื่อนลงมาข้างล่าง แล้วคลิกที่ปุ่ม บันทึก (Save)


          ในแท็บ "ข้อมูลรับรอง" ให้คลิกที่ สร้างข้อมูลรับรอง (New credentials) จะมีตัวเลือกปรากฏออกมา ให้เลือกที่ รหัสไคลเอ็นต์ OAuth (OAuth client ID)


          ตรงประเภทของแอปพลิเคชันให้เลือกเป็น "เว็บแอปพลิเคชัน" (Web application) แล้วเลื่อนลงมาข้างล่าง ในส่วนของ JavaScript เริ่มต้นที่ได้รับอนุญาต ให้กรอก URL ของเว็บไซต์ที่จะเรียกใช้งาน JavaScript Library กด Enter จากนั้นจึงคลิกปุ่ม สร้าง (Create)


          พอสร้างเสร็จแล้วจะมี OAuth client dialog box แสดงขึ้นมา ให้ก็อปปี้ "รหัสไคลเอ็นต์" (Client ID) และ "รหัสลับไคลเอ็นต์" (Client secret) เอาไว้ โดยใน dialog box จะมีแจ้งว่า OAuth มีขีดจำกัดการใช้งาน เนื่องจาก OAuth นี้ยังไม่ได้รับการเผยแพร่จากทาง Google ถ้าอยากเผยแพร่แอปพลิเคชัน จะต้องรอให้ Google ตรวจสอบความน่าเชื่อถือแอปพลิเคชันของเราก่อน

          การจะส่งแอปพลิเคชันให้ Google ตรวจสอบ จำเป็นต้องเข้าไปที่เมนู "ข้อมูลรับรอง" (Credentials) คลิกที่แท็บ หน้าจอคำยินยอม OAuth (OAuth consent screen) จากนั้นให้เพิ่ม URL หน้าแรกของเว็บไซต์ และ URL นโยบายความเป็นส่วนตัว (Privacy Policy URL) เมื่อกรอกข้อมูลเรียบร้อยค่อยคลิกปุ่ม ส่งเพื่อการยืนยัน แล้วก็รอการตรวจสอบจาก Google โดยจะมี email แจ้งความคืบหน้าส่งมาให้

          หลังจากที่เราได้ Client ID มาแล้ว อันดับต่อไปก็จะเป็นการเขียนโค้ดสร้างปุ่ม Login ซึ่งในบทความนี้จะแบ่งวิธีใช้งานปุ่ม Login ออกเป็นสองแบบ นั่นคือ ใช้งานปุ่ม Login ของ Google หรือใช้งานปุ่ม Login ของเราเอง ซึ่งทั้งสองวิธีจะมีการเขียนโค้ดที่แตกต่างกันเล็กน้อย เอาล่ะ มาลงมือเขียนโค้ดกันเลยดีกว่า

เพิ่ม Google Sign-In ลงในเว็บไซต์


1. Sign-In ด้วยปุ่ม Login ของ Google

          ทำการเพิ่ม JavaScript Library ที่จำเป็นเข้าไปในเว็บไซต์ด้วยการเพิ่มโค้ดดังต่อไปนี้ลงไปภายใน <head>

<meta name="google-signin-scope" content="profile email">
<meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
<script src="https://apis.google.com/js/platform.js" async defer></script>
โดยแก้ไข YOUR_CLIENT_ID ให้เป็นค่า Client ID ที่ได้จากการสร้างเมื่อสักครู่ เท่านี้ก็เสร็จสิ้นการเพิ่ม JavaScript Library ลงไปในเว็บไซต์ของเราแล้ว

          ขั้นตอนต่อไปจะเป็นการเขียนโค้ดแสดงปุ่ม Login ของ Google และ textarea สำหรับแสดงผลการ Login ให้เพิ่มโค้ดดังต่อไปนี้ลงไปภายใน <body>

<div class="g-signin2" data-onsuccess="onSignIn" data-theme="dark"></div>
<br>
Result: <textarea id="result"></textarea>
เพิ่มปุ่ม Login เสร็จแล้ว ต่อไปให้เขียนโค้ดสำหรับแสดงผลการ Login ให้เพิ่มโค้ดดังต่อไปนี้ลงไปภายใน <body>

<script>
  function onSignIn(userInfo) {
    var result = '';
    
    // Useful data for your client-side scripts:
    var profile = userInfo.getBasicProfile();
    
    result+= "ID: "+profile.getId()+"\n";
    result+= "Full Name:  "+profile.getName()+"\n";
    result+= "Given Name: "+profile.getGivenName()+"\n";
    result+= "Family Name: "+profile.getFamilyName()+"\n";
    result+= "Email: "+profile.getEmail()+"\n";
    result+= "ID Token: "+userInfo.getAuthResponse().id_token+"\n";
    
    document.getElementById("result").value = result;
  };
</script>
จากโค้ดด้านบน ฟังก์ชัน onSignIn() จะทำการรับข้อมูลผู้ใช้งานมา จากนั้นก็แสดงผลใน textarea ซึ่งเมื่อคลิกปุ่ม Login ของ Google แล้ว จะเป็นการเรียกใช้งานฟังก์ชันจาก JavaScript Library ถ้า Login Account ได้สำเร็จ ก็จะไปเรียกใช้งานฟังก์ชัน onSignIn() เพื่อแสดงผลข้อมูลของผู้ใช้

          แค่นี้ก็เสร็จแล้ว วิธีนี้ถือเป็นวิธีที่ง่ายมาก เนื่องจากเราไม่ต้องทำอะไรเลย แค่เพิ่ม JavaScript Library และสร้างปุ่มของ Google ขึ้นมาบนหน้าเว็บก็จบแล้ว ต่อไปเรามาดูวิธีที่สองกันว่าจะยากง่ายยังไง

....................

2. Sign-In ด้วยปุ่ม Login ของเราเอง

          วิธีที่สองนี้ เริ่มต้นด้วยการเพิ่ม JavaScript Library ลงในเว็บไซต์เหมือนกับวิธีแรก โดยเพิ่มโค้ดดังต่อไปนี้ลงไปภายใน <head>

<script src="https://apis.google.com/js/platform.js?onload=bindGpLoginBtn" async defer></script>
จะเห็นได้ว่าโค้ดเปลี่ยนไปจากวิธีแรกนิดหน่อยโดยมี ?onload=bindGpLoginBtn พ่วงท้ายเข้ามา ซึ่งเจ้าข้อความที่เพิ่มเข้ามาหมายถึง เมื่อโหลด Library เสร็จแล้วให้เรียกใช้งานฟังก์ชัน bindGpLoginBtn ต่อทันที

           ขั้นตอนต่อไปจะเป็นการเขียนโค้ดแสดงปุ่ม Login ของ Google และ textarea สำหรับแสดงผลการ Login ให้เพิ่มโค้ดดังต่อไปนี้ลงไปภายใน <body>

<button id="gp-login-btn">Sign in with Google</button>
<br>
Result: <textarea id="result"></textarea>
ปุ่มที่เราได้เพิ่มเข้ามาในวิธีที่สองนี้เป็นเพียงปุ่มธรรมดา ๆ แตกต่างจากปุ่มในวิธีแรก เพราะงั้นเราจะต้องผูก event เข้ากับปุ่ม เมื่อมีการคลิกปุ่มก็ให้ไปเรียกฟังก์ชัน Login ของ Google

อันดับต่อไปให้เขียนโค้ดผูก event เข้ากับปุ่ม เพื่อจัดการการ Login โดยเพิ่มโค้ดดังต่อไปนี้ลงไปภายใน <body>

<script>
  function bindGpLoginBtn() {
    gapi.load('auth2', function(){
      auth2 = gapi.auth2.init({
        client_id: 'YOUR_CLIENT_ID',
        scope: 'profile email'
      });
      attachSignin(document.getElementById('gp-login-btn'));
    });
}
   
  function attachSignin(element) {
    auth2.attachClickHandler(element, {},
      function(googleUser) {
        // Success
 getCurrentGpUserInfo(googleUser);
      }, function(error) {
 // Error
 console.log(JSON.stringify(error, undefined, 2));
      }
    );
  }

  function getCurrentGpUserInfo(userInfo) {
    var result = '';
    
    // Useful data for your client-side scripts:
    var profile = userInfo.getBasicProfile();
    
    result+= "ID: "+profile.getId()+"\n";
    result+= "Full Name:  "+profile.getName()+"\n";
    result+= "Given Name: "+profile.getGivenName()+"\n";
    result+= "Family Name: "+profile.getFamilyName()+"\n";
    result+= "Email: "+profile.getEmail()+"\n";
    result+= "ID Token: "+userInfo.getAuthResponse().id_token+"\n";
    
    document.getElementById("result").value = result;
}
</script>
ในโค้ดด้านบนให้แก้ไข YOUR_CLIENT_ID ให้เป็นค่า Client ID ที่ได้จากการสร้างเมื่อสักครู่ โดยฟังก์ชัน bindGpLoginBtn จะถูกเรียกให้ทำงานเพื่อกำหนดค่าและผูก event เข้ากับปุ่ม โดยเมื่อมีการกดปุ่มก็จะไปเรียกใช้งานฟังก์ชัน Login จาก JavaScript Library ถ้า Login ได้สำเร็จก็จะเรียกใช้งานฟังก์ชัน getCurrentGpUserInfo() เพื่อแสดงข้อมูลของผู้ใช้งาน

....................

     

          หลังจากเขียนโค้ดเสร็จทั้งสองวิธีแล้ว อันดับถัดไปก็ถึงเวลาทดสอบโค้ดที่เขียนแล้ว โดยรูปฝั่งซ้ายเป็นปุ่มของ Google ส่วนรูปฝั่งขวาจะเป็นปุ่มที่เราสร้างขึ้นเอง


          เมื่อคลิกปุ่มแล้ว จะมีป๊อปอัพขึ้นมาถามว่าจะ Login ด้วย Account อะไร พร้อมทั้งมีข้อความแจ้งว่า "Google จะส่งข้อมูลชื่อและ email ให้กับแอปพลิเคชันนี้" ซึ่งถ้าเรา Login ก็หมายความว่าเรายินยอมที่จะเป็นการแบ่งข้อมูลให้กับเว็บไซต์ ซึ่งจุดนี้ก็จะเหมือนกับป๊อปอัพที่ขึ้นมาถามในบทความ Facebook Login ให้เพื่อน ๆ อ่านสักนิดก่อนที่จะ Login นะจ๊ะ


          หลังจาก Login แล้วก็ได้ข้อมูลของผู้ใช้งานมาแสดงตามรูป..... Done! สำหรับบทความนี้ก็ขอจบลงเพียงแค่นี้ เอาไว้พบกันใหม่บทความหน้า บ๊ายบาย


ไฟล์โค้ด: AiNoTsubasa's Github

ของแถม!!!

          ถ้าต้องการให้มีปุ่ม Logout ให้เพิ่มโค้ดดังต่อไปนี้ลงไปภายใน <body> จ้า

<button onclick="signOut();">Sign out</button>
<script>
  function signOut() {
    var auth2 = gapi.auth2.getAuthInstance();
    auth2.signOut().then(function () {
      console.log('User signed out.');
    });
  }
</script>



วันอังคารที่ 21 สิงหาคม พ.ศ. 2561

วิธีเพิ่ม Facebook Messenger ลงในเว็บไซต์


          ในยุคที่การติดต่อสื่อสารทำได้อย่างง่ายนี้ สิ่งหนึ่งที่เว็บไซต์ (...โดยเฉพาะเว็บไซต์ขายของ) ควรจะมีนั่นก็คือช่องทางติดต่อ เวลาที่ผู้ใช้งานเว็บไซต์เกิดข้อสงสัยและอยากติดต่อผู้ดูแลเว็บไซต์แต่กลับหาวิธีติดต่อไม่เจอ ก็จะทำให้ผู้ใช้ไม่อยากกลับเข้ามาใช้เว็บไซต์ของเราอีก ทางออกที่ง่ายที่สุดคือการใส่ข้อมูลช่องทางติดต่อลงไปในเว็บ แต่มันคงจะดีกว่ามั๊ย ถ้าผู้ใช้งานสามารถติดต่อกับเราผ่านทางเว็บไซต์ได้เลยโดยไม่ต้องออกจากเว็บ ซึ่งวิธีที่ว่านั่นก็คือการติด Live Chat เข้าไปในเว็บไซต์นั่นเอง

          ในปัจจุบันมี Live Chat มากมายให้เลือกใช้ ทั้งตัวที่ฟรีและตัวที่เสียเงิน ซึ่งทาง Facebook เองก็ไม่ยอมน้อยหน้า ส่งตัว Customer Chat Plugin ออกมาให้พวกเราเหล่านักพัฒนานำไปติดตั้งในเว็บไซต์ได้โดยไม่เสียค่าบริการ ถือเป็นอีกตัวเลือกหนึ่งที่น่าสนใจ เพราะเจ้า Plugin ตัวนี้จะทำให้ผู้ใช้งานสามารถติดต่อ Facebook Page ได้ผ่านหน้าเว็บไซต์ ซึ่งแน่นอนว่าเว็บไซต์ที่จะใช้ Plugin ตัวนี้จำเป็นต้องมี Facebook Page ก่อน

          เอาล่ะ! หลังจากที่เกริ่นกันมาสักพักแล้ว เรามาเริ่มติดตั้ง Facebook Messenger กันเลยดีกว่า


          อันดับแรกให้เข้าไปที่ Facebook Page จากนั้นคลิกเมนู About ที่แถบเมนูด้านซ้าย


          เลื่อนลงมาข้างล่างจนเจอ Page ID แล้วให้ copy Page ID เก็บเอาไว้ จากนั้นก็คลิกที่เมนู Setting ที่อยู่มุมบนขวา


          ในหน้า Setting ให้คลิกเมนู Messenger platform ที่อยู่ตรงแถบเมนูซ้ายมือ


          เลื่อนลงมาจนเจอส่วน White-listed domains จากนั้นก็ให้กรอก URL ของเว็บไซต์ที่จะติดตั้ง Live Chat ลงไป แล้วคลิกปุ่ม Save


          จากนั้นให้เลื่อนลงไปจนเจอ Customer chat plugin แล้วคลิกปุ่ม Set Up


          ระบบจะแสดงหน้าสำหรับตั้งค่าขึ้นมา ให้คลิกปุ่ม Next เพื่อเริ่มดำเนินการตั้งค่าได้เลย


          ในหน้าการตั้งค่านี้ เราสามารถแก้ไขข้อความต้อนรับ โดยในแถบด้านซ้ายจะมีตัวเลือกภาษากับข้อความต้อนรับ ให้เราเปลี่ยนได้ตามใจชอบ ซึ่งในแถบด้านขวาจะมีการแสดงผลการตั้งค่าแบบ real time อยู่ เมื่อเปลี่ยนแล้วเรียบร้อยแล้วก็ให้คลิกปุ่ม Next เพื่อไปขั้นตอนถัดไป


          ถัดไปเป็นการตั้งค่าสี Theme และระยะเวลาที่เราจะตอบกลับ (response time) ผู้ใช้งาน เพื่อเป็นการแจ้งผู้ใช้งานว่าเราจะตอบทันที หรืออาจจะต้องรอนิดหน่อย เมื่อตั้งค่าตามใจชอบแล้วก็คลิกปุ่ม Next เพื่อไปสู่การตั้งค่าหน้าสุดท้าย


          หน้านี้จะแสดงโค้ดให้เรา copy ไปติดตั้งในเว็บไซต์ โดยส่วนด้านซ้ายจะมีช่องให้เรากรอก URL ของเว็บที่จะติดตั้ง Plugin ตัวนี้เพิ่มเติม หลังจาก copy โค้ดเสร็จแล้วก็ให้คลิก Finish เพื่อปิดหน้าการตั้งค่า


          เย่! เสร็จเรียบร้อยแล้ว เพียงแค่คลิกนู่นคลิกนี่แล้วก็ copy โค้ดมาแปะก็ได้ Live Chat ในหน้าเว็บไซต์แล้ว ไม่ยากเลยใช่ม่ะ..... เพื่อน ๆ สามารถอ่านรายละเอียดเพิ่มเติมได้ที่ Customer Chat Plugin

ไฟล์โค้ด: AiNoTsubasa's Github


วันเสาร์ที่ 18 สิงหาคม พ.ศ. 2561

ทำระบบ Login เข้าใช้งานเว็บไซต์ด้วย Facebook Login


          ปัจจุบันนี้ เวลาจะ Login เข้าใช้งานเว็บไซต์ดัง ๆ ที่มีผู้ใช้งานเป็นจำนวนมากหรือแม้กระทั่งแอปพลิเคชั่นในโทรศัพท์มือถือ เพื่อน ๆ ก็มักจะเห็นปุ่ม Login with Facebook อยู่ในหน้าเข้าสู่ระบบกันใช่มั๊ยล่ะ ซึ่งก็ไม่น่าแปลกใจอะไร เพราะยิ่งเทคโนโลยีก้าวหน้าไปเท่าไร ทำให้เกิดสิ่งอำนวยความสะดวกให้ผู้คนมากขึ้นเท่านั้น และนั่นก็ส่งผลให้คนเรารักความสะดวกสบายและต้องการการตอบสนองที่รวดเร็วทันใจ

          สำหรับคนที่ชอบท่องไปในโลกอินเทอร์เน็ต การลืม username และ password ที่ใช้ในการเข้าสู่ระบบของแต่ละเว็บถือก็เป็นเรื่องปกติ (ยิ่งมีหลายรหัสผ่านก็ยิ่งชิxหาย ผมเองก็ยังลืมอยู่บ่อย ๆ ฮา) ประกอบกับ Facebook เป็นโซเชียลเว็บไซต์ขนาดใหญ่ที่มีผู้ใช้งานเป็นจำนวนมาก ดังนั้นการผนวกระบบ Login ของ Facebook เข้ามาใช้งานในเว็บไซต์จึงถือเป็นการอำนวยความสะดวกให้กับผู้ใช้งานเว็บไซต์นั้น ๆ ให้สามารถเข้าใช้งานได้ง่ายขึ้น ตอบสนองความขี้เกียจ เอ๊ย ความสะดวกสบายโดยลดเวลาในการกรอกข้อมูลตอนสมัครสมาชิก ทำให้ผู้ใช้งานไม่จำเป็นต้องมานั่งจำ username และ password

          หลังจากเกริ่นกันมาซะยาว เรามาเริ่มทำระบบ Login ของเว็บไซต์ด้วย Facebook Login กันเลยดีกว่า ซึ่งแน่นอนว่าเราต้องมี account ของ Facebook ก่อน จากนั้นก็ไปตั้งค่าการใช้งาน Facebook API ในหน้า Developer


          เข้าไปที่ URL https://developers.facebook.com/ จากนั้นให้คลิก Get Started ที่มุมขวาบนของเว็บ


          สำหรับผู้ที่ยังไม่มี Developers account ระบบก็จะแสดงหน้าขั้นตอนการสมัคร Facebook for Developers account ขึ้นมาก่อน อย่ารอช้า รีบทำการสมัครตามขั้นตอนไปเลย ส่วนผู้ที่สมัคร Developers account ไว้แล้วก็ให้ Login เข้าสู่ระบบ


          เมื่อ Login เข้ามาแล้วเมนูที่มุมขวาจะเปลี่ยนเป็นเมนู My Apps ให้คลิกเบา ๆ แล้วเลือกที่ Add a New App


          จะมีกล่องสำหรับสร้าง ID ของแอปพลิเคชันใหม่ปรากฏขึ้นมา ให้เราทำการกรอกชื่อเรียกสำหรับแอปพลิเคชันที่ต้องการสร้าง และกรอก E-mail ที่ใช้ในการติดต่อ หลังจากนั้นให้คลิกปุ่ม Create App ID


          หลังจากที่แอปพลิเคชันใหม่ถูกสร้างแล้ว อันดับแรกให้ไปตั้งค่าแอปพลิเคชันกันก่อน คลิกที่เมนู Setting > Basic


          ในหน้านี้มีข้อมูลสำคัญอยู่ 1 ค่าที่จะต้องนำไปใช้ในส่วนต่อไปของบทความนี้ ได้แก่ App ID ให้กรอกข้อมูลเพิ่มลงไปในช่องดังต่อไปนี้
  • App Domains: URL ของเว็บไซต์ (กรณีที่เทสบน localhost ให้เว้นช่องนี้ไว้)
  • Privacy Policy URL: URL นโยบายความเป็นส่วนตัว (สามารถสร้างนโยบายความเป็นส่วนตัวได้ที่เว็บ https://app-privacy-policy-generator.firebaseapp.com/)
  • Category: หมวดหมู่ของแอปพลิเคชัน

          จากนั้นให้เลื่อนลงมาข้างล่างแล้วคลิกปุ่ม + Add Platform


          จะมีหน้าต่างให้เลือกแพลตฟอร์มปรากฏขึ้นมา ให้เราเลือก Website


          จากนั้นให้กรอก URL ของเว็บไซต์ในช่อง Site URL (กรณีที่เทสบน localhost ให้ใส่เป็น https://localhost/) แล้วคลิกปุ่ม Save Changes จากนั้นให้คลิกเมนู Dashboard ที่อยู่ในแถบเมนูด้านซ้าย


          เมื่อเข้าสู่หน้า Dashboard แล้ว ให้เลื่อนลงมาล่าง ๆ จะเจอในส่วนของ Add a Product จากนั้นก็คลิกปุ่ม Set Up ของ Facebook Login


          ให้คลิกเลือกแพลตฟอร์มเป็น Web


          พิมพ์ URL ของเว็บไซต์ในช่อง Site URL จากก็คลิกปุ่ม Save และปุ่ม Continue ตามลำดับ


          ขั้นตอนถัดไปให้สร้างไฟล์ Html แล้ว Copy Code มาใส่ไว้ใต้ <body> โดยแก้ไข {your-app-id} เป็นค่า App ID และแก้ไข {api-version} เป็นเลขเวอร์ชันปัจจุบันของ Facebook SDK (ซึ่ง ณ วันที่เขียนนี้ Facebook SDK เป็นเวอร์ชัน 3.1) จะได้โค้ดประมาณนี้

<!DOCTYPE html>
<html>
 <head>
  <title>Facebook Login</title>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="description" content="Facebook Login">
     <meta name="author" content="AiNoTsubasa">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <style type="text/css"></style>
 </head>
 <body>

  <script>
    window.fbAsyncInit = function() {
      FB.init({
        appId      : '{your-app-id}',
        cookie     : true,
        xfbml      : true,
        version    : 'v3.1'
      });
        
      FB.AppEvents.logPageView();   
        
    };

    (function(d, s, id){
       var js, fjs = d.getElementsByTagName(s)[0];
       if (d.getElementById(id)) {return;}
       js = d.createElement(s); js.id = id;
       js.src = "https://connect.facebook.net/en_US/sdk.js";
       fjs.parentNode.insertBefore(js, fjs);
     }(document, 'script', 'facebook-jssdk'));
  </script>


 </body>
</html>
          โค้ดในส่วนนี้จะเป็นการเพิ่ม Facebook SDK เข้ามาในหน้าเว็บไซต์ ถัดไปจะเป็นการใส่ปุ่มเพื่อ Login ให้เพิ่มโค้ดดังต่อไปนี้ไว้ข้างล่าง </script>

<button onclick="checkFbLoginState();">Login with Facebook</button>
          พอเพิ่มปุ่มลงไปแล้วก็ให้ทำการสร้างฟังก์ชัน checkFbLoginState() ขึ้นมา โดยใส่โค้ดดังต่อไปนี้ไว้ก่อน </script>

var fbLoginStatus = false;
function checkFbLoginState() {
  FB.getLoginStatus(function(response) {
    statusChangeCallback(response);
  });
}

function statusChangeCallback(response) {
  if(fbLoginStatus == false) {  
    if (response.status == 'connected') {
      fbLoginStatus = true;
      getCurrentUserInfo(response);
    } else {
      FB.login(function(response) {
        if (response.authResponse){
          fbLoginStatus = true;
          getCurrentUserInfo(response);
        } else {
          console.log('Auth failed.');
        }
      }, {scope: 'public_profile,email'});
    }
  } else if(fbLoginStatus == true) {
    getCurrentUserInfo(response);
  }   
}

function getCurrentUserInfo() {   
  FB.api('/me?fields=name,email,first_name,last_name,id', function(userInfo) {
    var result = '';
    result+= "ID: "+userInfo.id+"\r";
    result+= "First Name: "+userInfo.first_name+"\r";
    result+= "Last Name: "+userInfo.last_name+"\r";
    result+= "E-mail: "+userInfo.email+"\r";
    document.getElementById("result").text = result;
  });   
}
          ฟังก์ชัน checkFbLoginState() จะทำการเรียกใช้งานฟังก์ชัน FB.getLoginStatus() ซึ่งเป็นฟังก์ชันที่มาจาก Facebook SDK โดยจะทำการเช็คว่าผู้ใช้งานได้ Login แล้วหรือยัง ถ้ายังก็จะเรียกใช้งานฟังก์ชัน FB.login() แล้วจึงเรียกใช้งานฟังก์ชัน getCurrentUserInfo() ต่อไปเพื่อดึงข้อมูลของผู้ใช้งานออกมาแสดง ถัดไปก็ให้เราใส่โค้ดสำหรับแสดงผลการ Login ไว้ข้างล่างปุ่มกด

<br>
Result: <textarea id="result"></textarea>
          พอทำถึงขั้นตอนนี้ หน้าเว็บจำลองของเราก็พร้อมจะทำงานแล้ว ถัดไปให้ไป public แอปพลิเคชันที่เราได้สร้างเมื่อสักครู่ โดยกลับไปยังหน้า Developers Console แล้วคลิกที่เมนู App Review ที่อยู่ตรงแถบเมนูด้านซ้าย


          คลิกในส่วน Make Tester App public? เพื่อเปิดการใช้งานแอปพลิเคชัน แล้วคลิก Confirm ..... เอาล่ะ เรามาทดสอบโค้ดที่เขียนกันเลยดีกว่า


          เรียกใช้งานไฟล์เว็บที่เพิ่งสร้างเมื่อสักครู่ จะได้หน้าตาว่าง ๆ ประมาณนี้ จากนั้นก็คลิกปุ่ม Login with Facebook โล้ด


          เมื่อคลิกปุ่ม Login with Facebook เรียบร้อยแล้วก็จะมีหน้าต่างปรากฏขึ้นมาขอสิทธิ์การเข้าถึงข้อมูล ก่อนจะคลิกปุ่มก็ขอแนะนำว่าให้อ่านดูสักนิดว่าแอปพลิเคชันขอสิทธิ์การเข้าถึงอะไรของเราบ้าง (ตรงที่ขีดเส้นใต้ไว้) ไม่งั้นอาจจะซวยทีหลังได้นาจา ให้เราคลิกปุ่ม Continue as ...


          เรียบร้อย! ข้อมูลเราถูกแอปพลิเคชันเอาไปแล้วจ้า รออะไรอยู่ล่ะ ตบมือ 👏 ฮะฮะ

          บทความนี้เป็นตัวอย่างการนำ Facebook Login มาใช้งานในเว็บไซต์ของเรา ซึ่งจะช่วยเพิ่มความสะดวกสบายให้กับผู้ใช้งานเว็บไซต์ นอกจากนี้เรายังสามารถเข้าถึงข้อมูลของผู้ใช้งาน Facebook และนำไปเก็บไว้ในฐานข้อมูลได้อีกด้วย

ไฟล์โค้ด: AiNoTsubasa's Github


วันอังคารที่ 27 มีนาคม พ.ศ. 2561

[PHP] รับ-ส่งข้อมูลผ่านโพรโทคอล MQTT


          กลับมาพบกับบทความเขียนโปรแกรมด้วยภาษา PHP กันอีกครั้ง ในบทความนี้เราจะมาเขียนโปรแกรมเพื่อใช้งานโพรโทคอล MQTT ในการสื่อสารกัน แล้วโพรโทคอล MQTT คืออะไร? .....ปกติแล้วเราจะใช้โพรโทคอล HTTP (HyperText Transfer Protocol) ในการแลกเปลี่ยนข้อมูลกันระหว่างคอมพิวเตอร์ โดยโพรโทคอลตัวนี้ถูกออกแบบมาให้มีความกระทัดรัด ทำงานได้รวดเร็วและไม่ซับซ้อน สามารถรองรับข้อมูลได้ทุกแบบ มีการแบ่งการทำงานออกเป็น 2 ฝั่ง ได้แก่ ฝั่ง Server และฝั่ง Client โดยฝั่ง Client จะทำการส่ง request ไปที่ Server เพื่อทำการประมวลและส่งข้อมูลตอบกลับ Client แต่โพรโทคอล MQTT จะมีรูปแบบการทำงานที่แตกต่างออกไป

          โพรโทคอล Message Queuing Telemetry Transport หรือ MQTT เป็นโพรโทคอลที่ถูกออกแบบมาเพื่อการเชื่อมต่อแบบ M2M (machine-to-machine) หรือพูดง่าย ๆ ก็คือเป็นโพรโทคอลที่ใช้ในการสื่อสารระหว่างอุปกรณ์กับอุปกรณ์ มีน้ำหนักเบา ใช้รับส่งข้อมูลในเครือข่ายที่มีขนาดเล็ก แบ่งการทำงานออกเป็น 2 ฝั่ง ได้แก่ ฝั่ง Server และฝั่ง Client โดย
  • ฝั่ง Server: คือเครื่องที่ทำหน้าที่เป็นตัวกลางคอยจัดการการรับส่งข้อมูลระหว่าง Client ต่าง ๆ ซึ่งในที่นี้จะเรียกว่า Broker
  • ฝั่ง Client: คือเครื่องหรืออุปกรณ์ที่เชื่อมต่อและต้องการรับ-ส่งข้อมูลกับ Broker โดยจะแบ่งออกเป็นเครื่องที่ทำหน้าที่เป็น Publisher และเครื่องที่ทำหน้าที่เป็น Subscriber
    • Publisher: เป็นเครื่องหรืออุปกรณ์ที่ทำหน้าที่คอยส่งข้อมูลไปให้ Broker
    • Subscriber: เป็นเครื่องหรืออุปกรณ์ที่ทำหน้าที่คอยรับข้อมูลจาก Broker
          หลักการทำงานคือ อุปกรณ์ Client จะทำการเชื่อมต่อกับ Broker จากนั้นก็ทำการ subscribe หัวเรื่อง (Topic) หนึ่ง อุปกรณ์นั้นก็กลายเป็น Subscriber คอยรับข้อความจาก Broker เมื่ออุปกรณ์ตัวหนึ่งต้องการส่งข้อความไปหา Broker อุปกรณ์ตัวนั้นก็จะทำตัวเป็น Publisher ส่งข้อความไปให้ Broker โดยระบุหัวเรื่องติดไปด้วย เมื่อ Broker ได้รับข้อความก็จะทำการส่งข้อความเหล่านั้นไปให้ Client ที่ทำการสมัครหัวเรื่องนั้น ๆ ไว้อยู่

          เพื่อความเข้าใจที่มากยิ่งขึ้น เรามาดูอย่างกันดีกว่า สมมุติว่ามีเครื่อง MQTT Broker และอุปกรณ์ Client ที่เชื่อมต่อกับ Broker อยู่ 3 ตัว (ได้แก่ A1, A2 และ A3) อันดับแรก A1, A2 ทำการสมัครเป็นสมาชิกของหัวเรื่อง S1 และเมื่อ A1 ทำการส่งข้อความในหัวเรื่อง S1 ไปให้ Broker แล้ว Broker ก็จะทำการส่งข้อความนั้นไปให้กับอุปกรณ์ที่เป็นสมาชิกของหัวเรื่อง S1 นั่นคือ A2 (สาเหตุที่ A3 ไม่ได้รับข้อความด้วยเป็นเพราะ A3 ยังไม่ได้สมัครเป็นสมาชิกของหัวเรื่อง S1)

          หลังจากนั้น A3 ก็ทำการสมัครเป็นสมาชิกของหัวเรื่อง S1 เมื่อ A1 ทำการส่งข้อความในหัวเรื่อง S1 ไปให้ Broker เจ้า Broker ก็จะทำการส่งข้อความต่อให้กับ A2 และ A3 ที่เป็นสมาชิกในหัวเรื่อง S1

          ถึงตรงนี้เพื่อน ๆ ก็คงจะพอเข้าใจหลักการทำงานของโพรโทคอล MQTT กันอย่างคร่าว ๆ แล้ว และด้วยคุณสมบัติของเจ้าโพรโทคอลนี้ มันจึงเหมาะที่จะนำไปใช้ในเทคโนโลยี IoT (Internet of Things หรือ "อินเทอร์เน็ตของสรรพสิ่ง") ซึ่งเป็นเทคโนโลยีที่ใช้ในการติดต่อสื่อสารกันระหว่างอุปกรณ์ เช่น โทรศัพท์มือถือ รถยนต์ หลอดไฟ เป็นต้น ผ่านเครือข่ายอินเทอร์เน็ต โดยจะส่งผลให้มนุษย์เราสามารถเข้าถึงอุปกรณ์เหล่านั้นจากที่ไหนก็ได้ เพื่อเช็คสถานะหรือควบคุมสั่งการต่าง ๆ เช่น การสั่งเปิด-ปิดไฟภายในบ้านจากห้างสรรพสินค้า เป็นต้น

ติดตั้งโปรแกรม Mosquitto เพื่อใช้งานโพรโทคอล MQTT


          ณ จุดนี้เพื่อน ๆ ก็คงพอจะเห็นภาพของโพรโทคอล MQTT กันไปบ้างแล้ว ถัดไปเราจะมาลองใช้งานโพรโทคอลตัวนี้กัน เพราะงั้นเราก็มาติดตั้ง MQTT Broker กันก่อน ซึ่งก็มีผู้พัฒนา MQTT Broker อยู่หลายค่าย ไม่ว่าจะเป็น HiveMQ, Mosquitto, Eclipse IoT เป็นต้น และในบทความนี้ เราจะทำการติดตั้ง Mosquitto ลงใน Server จำลอง (Virtual Machine) แต่ถ้าเพื่อน ๆ คนไหนมี Server จริงอยู่แล้วก็สามารถติดตั้งลง Server จริงได้เลย (ส่วนเพื่อน ๆ ที่ยังไม่ได้สร้าง Server จำลอง ให้ลองย้อนกลับไปอ่านบทความ วิธีสร้างคอมพิวเตอร์เสมือนด้วย VirtualBox และบทความ วิธีตั้งค่า Ubuntu Server ให้ใช้งานเป็น Web Server ก่อน)

หลังจากเปิดใช้งาน VirtualBox แล้วก็ log-in ตาม user, password ที่ได้ตั้งค่าไว้ จากนั้นพิมพ์คำสั่งตามนี้
***** หมายเหตุ: แนะนำให้ log-in ด้วย root *****

apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
apt-get update
apt-get upgrade
เพื่ออัพเดทฐานข้อมูลของแพ็กเก็จทั้งหมด จากนั้นก็พิมพ์คำสั่ง

apt-get install mosquito
apt-get install mosquitto-clients
เพื่อติดตั้งโปรแกรม Mosquitto .....หลังจากติดตั้งเสร็จแล้วให้ทำการสร้าง user เพื่อเข้าใช้งาน โดยการพิมพ์คำสั่ง

mosquitto_passwd -b /etc/mosquitto/pwfile ชื่อผู้ใช้งาน รหัสผ่าน 
service mosquitto restart
เท่านี้เราก็ติดตั้งโปรแกรม Mosquitto สำหรับเรียกใช้งานโพรโทคอล MQTT เสร็จเรียบร้อยแล้ว

เขียนโปรแกรม PHP เพื่อใช้งานโพรโทคอล MQTT


          ถึงจุดนี้ เราก็พร้อมที่จะเขียนโปรแกรมด้วยภาษา PHP เพื่อใช้งานโพรโทคอล MQTT แล้ว โดยไฟล์ที่เราจะเขียนแบ่งออกเป็น 2 ไฟล์ ได้แก่ publish.php (ไฟล์ที่ทำหน้าที่เป็น publish ไว้คอยส่งข้อมูล) และ subscribe.php (ไฟล์ที่ทำหน้าที่เป็น subscribe ไว้คอยรับข้อมูล) แต่ก่อนจะเริ่มเขียนโค้ด เรามาเช็ค ip address ของเครื่องจำลองกันก่อน ด้วยคำสั่ง

ip addr show

จากตัวอย่างเป็น ip 192.168.3.238 ให้จดเอาไว้ก่อน จากนั้นให้เราเข้าไปดาวน์โหลดไฟล์ phpMQTT.php มาจาก https://github.com/bluerhinos/phpMQTT/blob/master/phpMQTT.php และเมื่อดาวน์โหลดเสร็จแล้วให้เปิดไฟล์ขึ้นมา


แล้วลบบรรทัด  namespace Bluerhinos;  ออกไป ถัดไปให้สร้างไฟล์ subscribe.php โดยการพิมพ์โค้ดดังนี้

<?php

require("phpMQTT.php");

$server  = "192.168.3.238"; Server ip address
$port  = 1883;
$username = "yyy";  username ที่ได้สร้างไว้ตอนตั้งค่า MQTT Broker
$password = "zzz";  password ที่ได้สร้างไว้ตอนตั้งค่า MQTT Broker
$client_id = "Client-".rand();

$mqtt = new phpMQTT($server, $port, $client_id);
if( !$mqtt->connect(true, NULL, $username, $password) ) {
 exit(1);
}

$topics['test/topic'] = array("qos" => 0, "function" => "procmsg");
$mqtt->subscribe($topics, 0);

while($mqtt->proc()){
 
}

$mqtt->close();

function procmsg($topic, $msg){
  echo "Recieved at: " . date("Y-m-d H:i:s", time()) . "\n";
  echo "Topic: {$topic}\n";
  echo "Message: $msg\n\n";
}

?>
โดยเราจะต้องรันไฟล์นี้ไว้เพื่อรอรับข้อมูลจากไฟล์ publisher และเพื่อไม่ให้เป็นการเสียเวลา เราก็มาคัดลอกโค้ดข้างล่างไปใช้สร้างไฟล์ publish.php เพื่อส่งข้อมูลกันเลย

<?php

require("phpMQTT.php");

$server  = "192.168.3.238"; Server ip address
$port  = 1883;
$username = "yyy";  username ที่ได้สร้างไว้ตอนตั้งค่า MQTT Broker
$password = "zzz";  password ที่ได้สร้างไว้ตอนตั้งค่า MQTT Broker
$client_id = "Client-".rand();

$mqtt = new phpMQTT($server, $port, $client_id);

if ($mqtt->connect(true, NULL, $username, $password)) {
 $mqtt->publish("test/topic", "Hello World! This is message from publisher.", 0);
 $mqtt->close();
} else {
    echo "Time out!\n";
}

?>
อย่าลืมแก้ไขค่า username และ password ให้ตรงตามที่ได้ตั้งค่าไว้ตอนติดตั้ง MQTT Broker นอกจากนี้ไฟล์ phpMQTT.php, subscribe.php และ publish.php จะต้องอยู่ในพาทเดียวกัน

          หลังจากที่ได้ไฟล์ครบทั้ง 3 ไฟล์เรียบร้อยแล้ว ขั้นตอนถัดไปเราก็ต้องอัพโหลดไฟล์ทั้งหมดไปยัง Server จำลอง ด้วยโปรแกรม FileZilla (เพื่อน ๆ คนไหนยังไม่ได้ติดตั้ง FileZilla ขอให้ย้อนกลับไปอ่านในบทความ วิธีติดตั้งและกำหนดค่า FTP เพื่อใช้สำหรับโอนไฟล์ ก่อนจ้าาาาา) เมื่อเชื่อมต่อกับ Server จำลองเรียบร้อยแล้วให้ย้ายไปยังพาท /var/www/html และสร้างโฟลเดอร์ที่ชื่อ test_mqtt ขึ้นมา จากนั้นก็อัพโหลดไฟล์ทั้งหมดไปยังพาทที่เพิ่งสร้างขึ้น

          เมื่อเราลงโปรแกรม Mosquitto และอัพโหลดไฟล์ทั้งหมดเรียบร้อย เท่านี้ก็...ไฟล์พร้อม! Server พร้อม! ทุกอย่างพร้อม! เรามาเริ่มรันโปรแกรมเพื่อใช้งานโพรโทคอลกันเล้ยยยยย! เริ่มจากล็อกอินเข้า Server จำลองใน VirtualBox และย้ายไปยังพาทที่เก็บไฟล์ด้วยคำสั่ง

cd /var/www/html/text_mqtt
แล้วต่อด้วยคำสั่งสำหรับรันไฟล์ subscribe.php เพื่อให้โค้ดทำงาน

php subscribe.php

จะเห็นได้ว่าเมื่อไฟล์ subscribe.php ทำงาน ก็จะอยู่ในสภาพรอรับข้อมูลจาก publisher ก็ให้เราใช้โปรแกรม PuTTy เพื่อเชื่อมต่อเข้าไปยัง Server จำลองเพื่อสั่งทำงานไฟล์ publish.php (เพื่อน ๆ คนไหนยังไม่ได้ติดตั้ง PuTTy ก็สามารถย้อนกลับไปอ่านวิธีติดตั้งได้ที่บทความ ติดตั้งโพรโทคอล Secure Shell สำหรับเชื่อมต่อกับ Server ก่อน) เปิดโปรแกรม PuTTy ขึ้นมา กรอกค่า IP address และ Port แล้วกดเชื่อมต่อ Server

          พิมพ์ username กับ password เพื่อเข้าใช้งาน Server ย้ายไปยังพาทที่เก็บไฟล์ด้วยคำสั่ง

cd /var/www/html/text_mqtt
แล้วต่อด้วยคำสั่งสำหรับรันไฟล์ publish.php เพื่อให้โค้ดทำงาน

php publish.php

          เมื่อเราสั่งรันไฟล์ publish.php เรียบร้อยแล้ว ในหน้าจอที่รันไฟล์ subscribe.php ก็จะแสดงข้อความจากไฟล์ publish.php ขึ้นมา โดยการส่งข้อความผ่านโพรโทคอล MQTT

          พอถึงตรงนี้เพื่อน ๆ น่าจะพอเข้าใจโพรโทคอล MQTT ขึ้นมาบ้างแล้ว ซึ่งในบทความนี้ได้แสดงการเขียนโปรแกรมสื่อสารกันภายในเครื่อง Server จำลองเดียวกัน (เพราะไฟล์ที่ส่งข้อมูลกับไฟล์ที่รับข้อมูลอยู่บนเครื่องเดียวกัน) ซึ่งผมคาดหวังว่าบทความนี้จะเป็นประโยชน์ ช่วยทำให้เพื่อน ๆ เข้าใจพื้นฐานการทำงานของโพรโทคอล MQTT และสามารถนำไปประยุกต์ต่อยอดเขียนโปรแกรมบนบอร์ดไมโครคอนโทรลเลอร์ให้สื่อสารกับเครื่อง Server ได้ (ฮา) สำหรับบทความนี้ก็ขอจบลงเพียงเท่านี้ ไว้พบกันใหม่บทความหน้า บ๊ายบายครับผม 😄