讀古今文學網 > 微信公眾平台開發:從零基礎到ThinkPHP5高性能框架實踐 > 20.9 網頁開發 >

20.9 網頁開發

20.9.1 企業號網頁授權

企業號的網頁授權和服務號類似,都是先獲取Code,再根據Code來取用戶信息。不同的是,對於企業成員,獲得的是UserID,而非企業成員則是OpenID。企業成員的UserID和OpenID可以互相轉換。

以下是企業號網頁授權代碼示例。


 1 require_once("wxqiye.class.php");
 2 $weixin = new class_wxqiye;
 3 
 4 if (isset($_COOKIE["openid"]) && !empty($_COOKIE
       ["openid"])){
 5     $openid = $_COOKIE["openid"];
 6 }else{
 7     if (!isset($_GET["code"])){
 8         $redirect_url = 'http:// '.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
 9         $jumpurl = $weixin->oauth2_authorize($redirect_url, "snsapi_base", "123");
10         Header("Location: $jumpurl");
11     }else{
12         $userinfo = $weixin->oauth2_get_userinfo($_GET["code"]);
13         if (isset($userinfo["OpenId"])){
14             $openid = $userinfo["OpenId"];
15         }else{
16             $openinfo = $weixin->convert_openid($userinfo["UserId"]);
17             $openid = $openinfo["openid"];
18         }
19         setcookie("openid", $openid, time+86400); // 一天後過期
20     }
21 }
  

在上述代碼中,第4~5行判斷當前瀏覽器中的Cookie信息是否存在並且有具體值。如果包含了用戶的OpenID,則是上一次網頁授權時設置的,不需要浪費時間進行二次授權。如果Cookie中沒有OpenID,則進入網頁授權流程。

第7~10行,企業號獲得Code。其接口如下。


https:// open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
  

上述數據的參數說明如表20-39所示。

表20-39 企業號獲取Code接口的參數說明

點擊後,頁面將跳轉至redirect_uri?code=CODE&state=STATE,其中包含Code參數。

取得Code參數之後,企業號可根據Code參數獲得員工的UserID或OpenID,代碼為第12行。其接口如下。


https:// qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
  

上述數據的參數說明如表20-40所示。

表20-40 code獲取成員信息接口的參數說明

正確創建時,返回的數據分為以下幾種情況。

1)企業成員授權時,返回示例如下。


{
    "UserId":"USERID",
    "DeviceId":"DEVICEID"
}
  

2)非企業成員授權時,返回示例如下。


{
    "OpenId":"OPENID",
    "DeviceId":"DEVICEID"
}
  

上述數據的參數說明如表20-41所示。

表20-41 Code獲取成員信息接口返回參數說明

對於使用場景為微信支付、微信紅包和企業轉賬,企業號用戶在使用微信支付的功能時,需要將企業號的UserID轉成OpenID。使用微信紅包功能時,需要將應用ID和UserID轉成appid和OpenID才能使用。

UserID轉換成OpenID的接口如下。


https:// qyapi.weixin.qq.com/cgi-bin/user/convert_to_openid?access_token=ACCESS_TOKEN
  

UserID轉換成OpenID時,POST數據示例如下。


{
    "userid":"zhangsan",
    "agentid":1
}
  

上述數據的參數說明如表20-42所示。

表20-42 UserID轉換成OpenID接口的參數說明

正確創建時,返回的數據示例如下。


{
    "errcode":0,
    "errmsg":"ok",
    "openid":"oDOGms-6yCnGrRovBj2yHij5JL6E",
    "appid":"wxf874e15f78cc84a7"
}
  

上述數據的參數說明如表20-43所示。

表20-43 UserID轉換成OpenID接口返回參數說明

如果需要知道某個結果事件的OpenID對應企業號內成員的信息時,可以通過調用OpenID轉換成UserID接口進行轉換查詢。

OpenID轉換成UserID接口如下。


https:// qyapi.weixin.qq.com/cgi-bin/user/convert_to_userid?access_token=ACCESS_TOKEN
  

OpenID轉換成UserID時,POST數據示例如下。


{
    "openid":"oDOGms-6yCnGrRovBj2yHij5JL6E"
}
  

上述數據的參數說明如表20-44所示。

表20-44 OpenID轉換成UserID接口的參數說明

正確創建時,返回的數據示例如下。


{
    "errcode":0,
    "errmsg":"ok",
    "userid":"zhangsan"
}
  

上述數據的參數說明如表20-45所示。

表20-45 OpenID轉換成UserID接口返回參數說明