名著阅读 > 微信公众平台开发:从零基础到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接口返回参数说明