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接口返回參數說明