微信企业号:OAuth2.0微信授权验证

企业应用中的URL链接(包括自定义菜单或者消息中的链接),可以通过OAuth2.0验证接口来获取成员的身份信息。使用步骤和方法如下:

1、先开发要使用微信授权认证的网页应用,这个网址必须在互联网上。

2、生成回调网址

企业如果需要员工在跳转到企业网页时带上员工的身份信息,需构造如下的链接:

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

参数说明


参数      


必须      


说明      


appid



企业的CorpID


redirect_uri



授权后重定向的回调链接地址,请使用urlencode对链接进行处理


response_type



返回类型,此时固定为:code


scope



应用授权作用域,此时固定为:snsapi_base


state



重定向后会带上state参数,企业可以填写a-zA-Z0-9的参数值,长度不可超过128个字节


#wechat_redirect



微信终端使用此参数判断是否需要带上身份信息

举例:因为要调用urlencode函数,所以先在PHP生成这个回调网址。

$url=‘https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx74e955420d317a6e&redirect_uri=‘.urlencode(‘http://1.xxxxweixin.applinzi.com/test/login.php‘).‘&response_type=code&scope=snsapi_base&state=1#wechat_redirect‘;

echo $url

结果如下:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx74e955420d317a6e&redirect_uri=http%3A%2F%2F1.xxxxweixin.applinzi.com%2Ftest%2Flogin.php&response_type=code&scope=snsapi_base&state=1#wechat_redirect

 

3、绑定菜单

先选择对应的【应用】,然后启用【回调模式】,选择自定义菜单的【设置】,然后设置菜单,事件类型选择【跳转到网页】,输入上面的网站。具体见下面的图片。

4、获取code

员工点击该网页后,页面将跳转至 redirect_uri?code=CODE&state=STATE,如下:

http://1.xxxxweixin.applinzi.com/test/login.php?code=155dee2d7912739ed9ad43619138dfcf&state=1

该网页可以以GET方式读取code的内容。State的内容用户自行处理。

5、通过code获取员工信息

  • 请求说明 :Https请求方式:GET

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

  • 参数说明

参数      


必须      


说明      


access_token



调用接口凭证


code



通过成员授权获取到的code,每次成员授权带上的code将不一样,code只能使用一次,10分钟未被使用自动过期

  • 返回结果

a)企业成员授权时返回示例如下:

{

"UserId":"USERID",

"DeviceId":"DEVICEID"

}


参数      


说明      


UserId


成员UserID


DeviceId


手机设备号(由微信在安装时随机生成,删除重装会改变,升级不受影响,同一设备上不同的登录账号生成的deviceid也不同)

b)非企业成员授权时返回示例如下:

{

"OpenId":"OPENID",

"DeviceId":"DEVICEID"

}


参数      


说明      


OpenId


非企业成员的标识,对当前企业号唯一


DeviceId


手机设备号(由微信在安装时随机生成,删除重装会改变,升级不受影响)

c)出错时返回示例如下:

{

"errcode": "40029",

"errmsg": "invalid code"

}

6、通过userid获取员工信息

  • 请求说明 :Https请求方式: GET

https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&userid=USERID

  • 参数说明

参数      


必须      


说明      


access_token



调用接口凭证


userid



成员UserID。对应管理端的帐号

  • 返回结果
{
   "errcode": 0,
   "errmsg": "ok",
   "userid": "zhangsan",
   "name": "李四",
   "department": [1, 2],
   "position": "后台工程师",
   "mobile": "15913215421",
   "gender": "1",
   "email": "[email protected]",
   "weixinid": "lisifordev",
   "avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0";;;,
   "status": 1,
   "extattr": {"attrs":[{"name":"爱好","value":"旅游"},{"name":"卡号","value":"1234567234"}]}
}

参数      


说明      


errcode


返回码


errmsg


对返回码的文本描述内容


userid


成员UserID。对应管理端的帐号


name


成员名称


department


成员所属部门id列表


position


职位信息


mobile


手机号码


gender


性别。0表示未定义,1表示男性,2表示女性


email


邮箱


weixinid


微信号


avatar


头像url。注:如果要获取小图将url最后的"/0"改成"/64"即可


status


关注状态:       1=已关注,2=已禁用,4=未关注


extattr


扩展属性

7、示例代码PHP

<?php

$corpid="";
$corpsecret="";
 
$code = $_GET[‘code‘];
$accesstoken=get_access_token($corpid,$corpsecret);
if (!empty($code))
{
$user=getUserInfoByAuth($accesstoken,$code);
$userid=$user["UserId"];
$openid=$user["OpenId"];   
$deviceid=$user["DeviceId"];
   
if (!empty($userid))
{
   $userinfo=getUserInfo($accesstoken,$userid);
    $username= $userinfo["name"];
}
}

function getUserInfoByAuth($accesstoken,$code)
{
   
     $url="https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=$accesstoken&code=$code";
      $content=curl_get($url);
      $ret= json_decode($content,true);
      return $ret;
}
 
 function getUserInfo($accesstoken,$userid)
{
   
      $url="https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=$accesstoken&userid=$userid";
      $content=curl_get($url);
      $ret= json_decode($content,true);
      return $ret;
}
 function curl_get($url)
{
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
   
    if(!curl_exec($ch))
    {
        error_log(curl_error($ch));
        $data="";
    }
    else
    {
        $data=curl_multi_getcontent($ch);
    }
   
    curl_close($ch);
    return $data;
}

//获取access_token
 function get_access_token($corpid,$corpsecret)
 {
  $url="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$corpid&corpsecret=$corpsecret";
  $ch=curl_init();
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
  curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  
   $output=curl_exec($ch);
  
  curl_close($ch);
  $jsoninfo = json_decode($output,true);

return  $jsoninfo["access_token"];
 }  //end get_access_token

?>

其他文章请见西祠胡同讨论版:http://www.xici.net/b1261440/

时间: 2024-08-04 18:35:48

微信企业号:OAuth2.0微信授权验证的相关文章

微信企业号-- OAuth2.0验证.net开发

在做企业号 OAuth2.0验证 的时候走了一些弯路,在这里记录一下. 当我查官方的接口文档的时候就给了一下代码: 企业应用中的URL链接(包括自定义菜单或者消息中的链接),可以通过OAuth2.0验证接口来获取成员的身份信息. 通过此接口获取成员身份会有一定的时间开销.对于频繁获取成员身份的场景,建议采用如下方案: 1.企业应用中的URL链接直接填写企业自己的页面地址 2.成员跳转到企业页面时,企业校验是否有代表成员身份的cookie,此cookie由企业生成 3.如果没有获取到cookie,

微信企业号OAuth2验证接口实例(使用SpringMVC)

微信企业号OAuth2验证接口(使用SpringMVC) 企业应用中的URL链接(包括自定义菜单或者消息中的链接),可以通过OAuth2.0来获取员工的身份信息. 注意,此URL的域名,必须完全匹配企业应用设置项中的'可信域名',否则获取用户信息时会返回50001错误码. 可信域名设置不包含"http://",只需域名或IP即可. OAuth2验证可以使用多种方式,此处使用注解方式.设计思路是在需要获取用户信息的GET请求上添加注解,然后在调用的时候判断是否包含此注解,然后做处理流程.

Force.com微信开发系列(七)OAuth2.0网页授权

OAuth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站上存储的私密资源(如用户个人信息.照片.视频.联系人列表),而无须将用户名和密码提供给第三方应用.本文将详细介绍OAuth协议以及在微信里的具体实现. OAuth2.0协议介绍 OAuth2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0. OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程. OAuth2.0允许用户提供一个令牌,而不是用户

微信公众平台oauth2.0网页授权

本篇文章你将学到:在自己做的微信网站里,利用oauth2.0网页授权接口获取用户的信息(openid,姓名,性别,地区,头像等).如大转盘等游戏记录哪个微信用户获得什么奖品.H5等小游戏需要把分数与对应用户捆绑在一起等网页应用. 微信公众平台oauth2.0网页授权能干什么 它是在自己做的网站中不用用户登录来获取微信用户相关信息的,进而实现相关业务. 说明与注意 1.网页授权分为两种, 一种为只获取openid  (基本授权 snsapi_base) 一种为获取用户全部信息 (高级授权 snsa

***微信公众平台开发: 获取用户基本信息+OAuth2.0网页授权

本文介绍如何获得微信公众平台关注用户的基本信息,包括昵称.头像.性别.国家.省份.城市.语言.本文的方法将囊括订阅号和服务号以及自定义菜单各种场景,无论是否有高级接口权限,都有办法来获得用户基本信息,而无需模拟登录. 在本文中,特别要注意的是有两个不同的Access Token,他们产生的方式不一样,一种是使用AppID和AppSecret获取的access_token,一种是OAuth2.0授权中产生的access_token,方倍工作室分别称为全局Access Token和授权Access

微信公众平台开发(71)OAuth2.0网页授权

微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者:方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使用这个的时候失败了或者无法理解其内容,希望我出个教程详细讲解一下,于是便有了这篇文章. 一.什么是OAuth2.0 官方网站:http://oauth.net/   http://oauth.net/2/ 权威定义:OAuth is An open protocol to allow secure

微信OAuth2.0网页授权接口

微信OAuth2.0网页授权接口 微信OAuth2.0网页授权接口的thinkphp实现版本号.主要实现了oauth网页受权,以及部分其它接口. 用法 为什么用OAuth2.0受权? 通过OAuth2.0受权的网页将会获取到打开者的微信信息.甚至包含微信昵称.头像等实用的数据,开发人员们能够凭此设计出很多其它更丰富的页面应用,比方近期一直非常火爆的红包类活动.除此之外还有个额外的优点,就是能够控制页面在非微信浏览器中无法打开,能够降低代码被人窥窃的风险. 那么红包类活动是怎样使用OAuth2.0

(转)微信公众平台开发 OAuth2.0网页授权

微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者:方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使用这个的时候失败了或者无法理解其内容,希望我出个教程详细讲解一下,于是便有了这篇文章. 一.什么是OAuth2.0 官方网站:http://oauth.net/   http://oauth.net/2/ 权威定义:OAuth is An open protocol to allow secure

使用Owin中间件搭建OAuth2.0认证授权服务器

前言 这里主要总结下本人最近半个月关于搭建OAuth2.0服务器工作的经验.至于为何需要OAuth2.0.为何是Owin.什么是Owin等问题,不再赘述.我假定读者是使用Asp.Net,并需要搭建OAuth2.0服务器,对于涉及的Asp.Net Identity(Claims Based Authentication).Owin.OAuth2.0等知识点已有基本了解.若不了解,请先参考以下文章: MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN

ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证

原文:ASP.NET没有魔法--ASP.NET MVC使用Oauth2.0实现身份验证 随着软件的不断发展,出现了更多的身份验证使用场景,除了典型的服务器与客户端之间的身份验证外还有,如服务与服务之间的(如微服务架构).服务器与多种客户端的(如PC.移动.Web等),甚至还有需要以服务的形式开放给第三方的,身份验证这一功能已经演化为一个服务,很多大型应用中都有自己的身份验证服务器甚至集群,所以普通的身份验证方式已经不能满足需求. 在.Net领域中也有一些开源的身份验证服务器组件,如Identit