[PHP]Account Kit 使用教學

前言

Account Kit 是由 Facebook 所提供的服務

原意是可以讓開發者不需要去處理帳號與密碼的問題

也可以把此服務當作驗證手機或是Email來使用

剩下詳細的部分可以到 AccountKit 總覽去理解

此篇文章主要部分是紀錄如何申請使用該服務

Step 1

使用此服務必須先使用 Facebook 的開發者帳號

開啟 Facebook Developers 網址

點選右上方的開始使用,選擇一些選項


接下來點下 建立首款應用程式

輸入 應用程式名稱 及 電子信箱

建立成功後就會到該應用程式的頁面

上方應用程式編號之後會用到

Setp 2

接下來在新增產品下面找到 Account Kit 並點下設定

操作完成後注意左方的應用程式中加入了 Account Kit,一樣點下設定

直接按下開始使用,會進入 Account Kit 的設定頁面

因為此篇文章示範的環境是 手機號碼 + Web,所以除了右上角的選項開啟之外,其他的關閉

Account Kit 應用程式密鑰之後會使用到

之後往下滑動找到網頁登入設定,在伺服器網域中填上會使用到的網域名稱

若想找個小空間來試驗的話,可以參考 [PHP]免費虛擬空間申請教學 這篇文章,會提供免費的https網域

輸入完畢後,儲存

Step 3

接下來按照範例來寫程式吧

index.php

<!DOCTYPE html>
<html>
	<head>
		<title>Account Kit Test</title>
		<script src="https://sdk.accountkit.com/zh_TW/sdk.js"></script>
	</head>
	<body>
		<input value="+886" id="country_code" />
		<input placeholder="phone number" id="phone_number" value=""/>
		<button onclick="smsLogin();">Login via SMS</button>

		<form id="login_success" method="post" action="/bk.php">
			<input id="csrf" type="hidden" name="csrf" />
			<input id="code" type="hidden" name="code" />
		</form>
		
		<script>
			// initialize Account Kit with CSRF protection
			AccountKit_OnInteractive = function(){
				AccountKit.init({
					appId: "{應用程式編號}",
					state: "{CSRF 值}", // 若使用的後端需要這個值可以傳入
					version:"v1.1", // 版本號,與 Account Kit 設定頁相符
					fbAppEventsEnabled: true, // 是否紀錄 Log
					// debug: true, 顯示詳細的錯誤資訊
					// redirect: "https://" 電子郵件才會用到的跳轉地址,需要與 Account Kit 設定頁的網域相符
				});
			};

			// login callback
			function loginCallback(response) {
				if (response.status === "PARTIALLY_AUTHENTICATED") {
					document.getElementById("code").value = response.code;
					document.getElementById("csrf").value = response.state;
					document.getElementById("login_success").submit();
				} else if (response.status === "NOT_AUTHENTICATED") {
					// handle authentication failure
				} else if (response.status === "BAD_PARAMS") {
					// handle bad parameters
				}
			}

			// phone form submission handler
			function smsLogin() {
				var countryCode = document.getElementById("country_code").value;
				var phoneNumber = document.getElementById("phone_number").value;
				AccountKit.login(
					'PHONE', 
					{
						countryCode: countryCode, 
						phoneNumber: phoneNumber
					}, // will use default values if not specified
					loginCallback
				);
			}
		</script>
	</body>
</html>

bk.php

<?php
	// Initialize variables
	$app_id = '909797776085994';
	$secret = '89c084689ded7f740920b8b12d4a2138';
	$version = 'v1.1';

	// Method to send Get request to url
	function doCurl($url) {
		$ch = curl_init();

		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

		$data = json_decode(curl_exec($ch), true);

		curl_close($ch);

		return $data;
	}

	$token_exchange_url = "https://graph.accountkit.com/$version/access_token?grant_type=authorization_code&code=$_POST[code]&access_token=AA|$app_id|$secret";

	$data = doCurl($token_exchange_url);

	$user_id = $data['id'];
	$user_access_token = $data['access_token'];
	$refresh_interval = $data['token_refresh_interval_sec'];

	// Get Account Kit information
	$me_endpoint_url = "https://graph.accountkit.com/$version/me?access_token=$user_access_token";

	$data = doCurl($me_endpoint_url);
	$phone = isset($data['phone']) ? $data['phone']['number'] : '';
	$email = isset($data['email']) ? $data['email']['address'] : '';
?>
<!DOCTYPE html>
<html>
	<head>
		<title>Account Kit PHP</title>
	</head>
	<body>
		<div>User ID: <?php echo $user_id; ?></div>
		<div>Phone Number: <?php echo $phone; ?></div>
		<div>Email: <?php echo $email; ?></div>
		<div>Access Token: <?php echo $user_access_token; ?></div>
		<div>Refresh Interval: <?php echo $refresh_interval; ?></div>
	</body>
</html>

Step 4

首先首頁的樣子會有一個 國碼 及 電話號碼的輸入框

若只想要讓台灣的電話使用的話,就直接寫死 +886

點下 Login via SMS 後會跳出小視窗,可以選擇使用 簡訊 還是 WhatsApp

選擇簡訊後,會收到一封這樣子的內容

簡訊內容的部分不開放修改,只能選擇一些範本

回到小視窗輸入簡訊收到的驗證碼

就可以取得用戶的 電話號碼 及 User ID

結尾

利用這樣子的服務,不僅可以簡單快速的提供註冊功能

另一方面,在原有的註冊功能上驗證用戶的手機號碼也是蠻常使用的方式

使用者不需要有 Facebook 帳號也可以使用這樣的服務

而且目前 Account Kit 在沒超過 10萬 封之前都是免費的

真的是很方便很實用

若這邊教學有幫助到你的話~請多多分享轉發出去給更多的人知道

謝謝大家的觀看