微信公衆號三方平臺開發【component_access_token篇】

今天開始前,補充一點之前忘了說的事兒——第三方平臺授權流程。

在獲得component_verify_ticket(上期已介紹如何獲取)和component_access_token(本期後面將介紹如何獲取)後,我們就會開始進入正式的授權流程了,具體流程大致如下:

  1. 獲取預授權碼(pre_auth_code):預授權碼是第三方平臺實現公衆號授權託管的必備信息;
  2. 進入授權頁:我們可以在自己的網站中設置“微信公衆號授權”入口,引導微信公衆號管理員進入授權頁(授權頁地址包含第三方平臺的appid、預授權碼以及回調URL等參數,如:https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx);
  3. 微信公衆號管理員確認並同意登錄授權:微信公衆號管理員進入第三方平臺授權頁後,需要確認並同意將自己的微信公衆號授權給第三方平臺,從而完成授權流程(授權完成後,授權頁會自動跳轉到回調URL,並將授權碼和過期時間加在回調URL的參數中,如:redirect_url?auth_code=xxx&expires_in=600);
  4. 利用授權碼調用微信公衆號相關API:得到授權碼後,我們可以使用授權碼來獲取授權微信公衆號的接口調用憑據(authorizer_access_token,簡稱令牌),之後,我們就可以通過這個接口調用憑據去調用微信公衆號相關API,從而代微信公衆號實現其業務(我們能夠調用到哪些API,取決於微信公衆號管理員給我們授權了哪些權限集,當然也還取決於微信公衆號自身所擁有哪些權限)。

Ok!下面進入今天的正題,如何獲取第三方平臺component_access_token(第三方平臺compoment_access_token是第三方平臺授權流程中接口的調用憑據,簡稱令牌。每個令牌都存在有效期(2小時),並且是有限制的,所以這裏我們需要好令牌的管理,在令牌快過期時(比如1小時55分)再次進行刷新請求獲取新的令牌。)。

在我們獲取到微信服務器推送過來的component_verify_ticket後,需要將其作爲參數,向微信服務器發送請求來獲取component_access_token。

接口調用請求說明

http請求方式: POST(請使用https協議)
https://api.weixin.qq.com/cgi-bin/component/api_component_token

POST數據示例:

{
"component_appid":"appid_value" ,
"component_appsecret": "appsecret_value",
"component_verify_ticket": "ticket_value"
}

參數說明
參數 說明
component_appid 第三方平臺appid
component_appsecret 第三方平臺appsecret
component_verify_ticket 微信後臺推送的ticket,此ticket會定時推送

component_appid和component_appsecret在第三方平臺詳情頁進行查看。

返回說明

正常情況,微信會返回如下json數據包:
{
"component_access_token":"61W3mEpU66027wgNZ_MhGHNQDHnFATkDa9-2llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA",
"expires_in":7200
}

結果參數說明
參數 說明
component_access_token 第三方平臺access_token
expires_in 有效期
具體程序實現:

public function get_component_access_token()
$res = $this->component_detail();//獲取第三方平臺基礎信息
$last_time = $res['token_time'];//上一次component_access_token獲取時間
$component_access_token = $res['component_access_token'];//獲取數據查詢到的component_access_token
$difference_time = $this->validity($last_time);//上一次獲取時間與當前時間的時間差
//判斷component_access_token是否爲空或者是否超過有效期
if(empty($component_access_token) || $difference_time>7000){
$component_access_token = $this->get_component_access_token_again();
}
return $component_access_token;
}
//獲取第三方平臺基礎信息
public function component_detail(){
$res = M('Public')->where(array('id'=>1))->find();
return $res;
}
//重新獲取component_access_token
public function get_component_access_token_again(){
$url = 'https://api.weixin.qq.com/cgi-bin/component/api_component_token';
$tok = $this->component_detail();
$param ['component_appid'] = $tok['appid'];
$param ['component_appsecret'] = $tok['appsecret'];
$param ['component_verify_ticket'] = $tok['componentverifyticket'];
$data = post_data ( $url, $param );
$token['component_access_token'] = $data ['component_access_token'];
$token['token_time'] = date("Y-m-d H:i:s");
M('Public') ->where(array('id'=>1))->setField($token);
return $data['component_access_token'];
}
//獲取時間差
public function validity($time){
$current_time = time();
$difference_time = $current_time - strtotime($time);
return $difference_time;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章