首页 » 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践 » 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践全文在线阅读

《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》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接口返回参数说明