申請
-
微博申請非常的麻煩, 需要負責人的身份證件等等, 過關後才可以申請網站服務
-
在申請前最好先了解 “我的應用” 及 “我的網站” 的差異, 再申請適合你網站的服務
- 如果你的網站純粹只是要串接微博登入, 就選擇我的網站
- 我的應用是給如手機登入或是如 facebook app 那樣的去申請
申請我的網站
[1] 申請
- 在開發平台頁面 點擊 管理中心 -> 我的網站 -> 添加網站 (接下來審核的步驟可以先略過)
- 網站名稱可以先隨便寫,而網站域名必須為已經註冊的域名 (EX : www.example.com 以下均用此 domain 當例子)
- 添加網站成功後,會得到 App Key 和 App Secret ,這兩個程式裡所需要的參數
[2] 網站信息 -> 高級信息, 在安全設置裡面,填寫網站的域名: www.example.com 及 IP: 127.0.0.1
[3] 網站信息 -> 測試賬號, 設置一個管理賬號
[4] 將域名綁定到 127.0.0.1
-
因為在做 Oauth 回來後會導向你自己設定的 callback_url, 而這個 callback_url 的域名也是你在步驟 [1] 所申請的, 如果你沒有將這個域名在本機導向 127.0.0.1 的話, 就沒辦法完成剩下的步驟
-
在本機的 C:\Windows\System32\Drivers\etc\host
檔案加上 127.0.0.1 www.example.com
[5] 審核
- 如果網站還在開發階段, 可以先不用認證, 在本機開發不會有問題
- 如果你的網站準備要開始上線了, 就可以送出認證了, 大概要3天左右
申請我的應用
在開發階段要記得在 管理中心 -> 應用信息 -> 測試帳號 新增帳號, 否則在 Oauth 時會得到 applications over the unaudited use restrictions
這樣的錯誤
注意:修改後約半小時左右時間生效
管理中心->應用信息->高級信息設置好授權回調頁(連結要與 callback_url 一樣)
否則會得到 error:redirect_uri_mismatch
這樣的錯誤訊息
補充申請手機 app
- 資料可先隨便填
- 記得加回調頁 (高級信息) : https://api.weibo.com/oauth2/default.html
- 測試帳號也要加上自已的微博帳號
- 手機只需用 APP Key 就可以從 weibo login 取得 token, 然後可以傳給 server, 而 server 可以直接使用網站的 App Key 及 Secret 做登入判別, 也就是說從 weibo 建立 app 不管是網站還是手機, 取得的 token 是可以相通的
在做之前先了解登入 Oauth 流程
[1] 在頁面上放置一個登入按鈕, 而按鈕的 link 導向你自己的某一隻程式
[2] 判斷是否己登入過 (檢查 token), 如果未登入就導向微博 Oauth 頁面, 成功後即可取得 token
[3] 就可以利用 token 拿你想拿的使用者資料
開始動手做 (程式碼部份)
首先下載微博 php sdk github
設定好 config 方便開發 :
$config['app_id'] = (填上 app_id)
$config['secret'] = (填上 secret)
$config['callback_url'] = (填上 callback_url)
此頁檢查 token 是否存在, 如果沒有代表未登入
引入微博 PHP SDK, 並建立物件:
require 'saetv2.ex.class.php';
$weiboOauth = new SaeTOAuthV2($config["app_id"], $config["secret"]);
取得登入及授權 url, 並且導向過去:
$weiboOauth->getAuthorizeURL($config["callback_url"])
User 會被要求登入及授權, 如果通過的話, 會導向 callback_url, 並且網址後面會帶 GET : code=一串亂數
callback_url 網址的那一隻程式
取得 token :
require 'saetv2.ex.class.php';
$weiboOauth = new SaeTOAuthV2($config["app_id"], $config["secret"]);
$code = $_GET['code'];
if ($code)
{
$keys = array();
$keys['code'] = $code;
$keys['redirect_uri'] = $config["callback_url"];
try
{
$token = $weiboOauth->getAccessToken('code', $keys);
}
catch (OAuthException $e)
{
log_message('info', $e->getMessage());
}
}
建議將 token 存到 SESSION, 方便下次判斷是否已登入及授權
取得 user 資料 (將 token 帶入):
if (is_array($token))
{
$weiboClient = new saeTClientV2($config["app_id"], $config["secret"], $token['access_token']);
$user_data = $weiboClient->show_user_by_id($token['uid']);
if ( ! empty($user_data['error']))
{
log_message('info', "Weibo Error: {$user_data['error']}");
}
}
User data 的值如下 :
array (
'id' => 3865801255, #用戶UID
'idstr' => '3865801255',
'class' => 1,
'screen_name' => 'test_user', #微博暱稱
'name' => 'test_user', #友好顯示名稱,同微博暱稱
'province' => '400', #省份編碼(參考省份編碼表)
'city' => '4', #城市編碼(參考城市編碼表)
'location' => '海外 俄罗斯', #所在地
'description' => '', #個人描述
'url' => '', #用戶博客地址
'profile_image_url' => 'http://tp4.sinaimg.cn/3865801255/50/0/1', #自定義圖像
'profile_url' => 'u/3865801255',
'domain' => '', #用戶個性化URL
'weihao' => '',
'gender' => 'm', #性別,m--男,f--女,n--未知
'followers_count' => 15, #粉絲數
'friends_count' => 23, #關注數
'statuses_count' => 0, #微博數
'favourites_count' => 0, #收藏數
'created_at' => 'Mon Oct 21 11:48:34 +0800 2013', #創建時間
'following' => false, #是否已關注(此特性暫不支持)
'allow_all_act_msg' => false,
'geo_enabled' => true,
'verified' => false, #加V標示,是否微博認證用戶
'verified_type' => -1,
'remark' => '',
'ptype' => 0,
'allow_all_comment' => true,
'avatar_large' => 'http://tp4.sinaimg.cn/3865801255/180/0/1',
'avatar_hd' => 'http://tp4.sinaimg.cn/3865801255/180/0/1',
'verified_reason' => '',
'follow_me' => false,
'online_status' => 1,
'bi_followers_count' => 1,
'lang' => 'zh-cn',
'star' => 0,
'mbtype' => 0,
'mbrank' => 0,
'block_word' => 0,
)
- Fb 帳號若沒有 active, 會直接在 fb 頁面顯示錯誤訊息, 微博則無法判斷
- 如果你的基本資料所在地填國外(Ex: 俄羅斯), 但返回的 lang 並不是 ru-ru, 因為 lang 並不是指你的所在地, 而是你微博頁面顯示的語言, 例如調成繁體中文, 帶回來的 ’lang’ => ‘zh-tw’
- 注意!! 選擇英文, ’lang’ => ’en’, 並不是我們熟悉的
en-us
- FB 在這方面也一樣, 會依照網頁上顯示的語言帶不同的語言碼回來, ex : 語言選日語 ’locale’ => ‘ja_JP’
登出微博 :
以下連結加上 token ($token[‘access_token’])
https://api.weibo.com/2/account/end_session.json?access_token=2.00JVVcNE0O_NXn3b7d524c0cl3ekeD
會返回同 get_user_data 的基本資料
使用不同帳號登入
如果使用者已登入過微博並且也已經 Oauth 過了, 程式將使用者導到登入 Oauth 的頁面, 如果 token 沒過期, 微博並不會再次要求登入 Oauth, 因為它會當你已經認證過了, 而直接導到帶入的 callback_url, 這是正常的, 但是有時候需要讓使用者直接切換帳號登入 Oauth 的話, 如果要求使用者先到微博登出, 那不就太不方便了嗎?
微博提供的作法是只要在授權連結上添加forcelogin參數,將forcelogin參數設置為true, 就可以達到強制再次做登入 Oauth
$weiboOauth->getAuthorizeURL($config["callback_url"]) . '&forcelogin=true';
ref :
http://open.weibo.com/wiki/Direct_messages/new
官方 Q&A - 接口問題
http://www.oooink.com/blog/find/c/47
http://open.weibo.com/qa/index.php?qa=1457&qa_1=%E8%AF%B7%E9%97%AE%EF%BC%8C%E5%A6%82%E4%BD%95%E5%9C%A8%E6%9C%AC%E5%9C%B0%E6%B5%8B%E8%AF%95%E6%96%B0%E6%B5%AA%E7%9A%84%E7%99%BB%E5%BD%95%E6%8C%89%E9%92%AE%E7%99%BB%E5%BD%95%E7%AC%AC%E4%B8%89%E6%96%B9%E7%BD%91%E7%AB%99%EF%BC%9F