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接口返回参数说明