求星游记之星游记风暴法米拉免费百度云免费资源,谢谢。

网站建设、切图、企业建站、微信开发 联系QQ: tel:
微信开发之获取openid
围观9185次
编辑日期:
获取用户有两种方式,一种是用户发送消息,微信服务器会把openid推送给开发者,另一种是通过OAuth2.0网页授权获取用户openid,今天讲的是通过网页授权获取用户openid。
网页授权获取用户openid需在微信公众平台后台开发者中心授权回调域名。
1、登陆微信公众平台后台。
2、进入开发者中心
点击“修改”
这里填写你的域名,如www.devdo.net,不要加http://等协议头。
根据者文档说明,关于网页授权有两种scope
以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
我们只需要获取用户openid,所以scope就选择为snsapi_base,对于以snsapi_base为scope的网页授权,就静默授权的,用户无感知;这样的好处是不需要用户点击授权按钮进行授权。
首先,需要获取获取code,通过下面方式访问,即可返回code,appid是微信开发者的appid,redirect_uri是获取code后需要跳转的页面,跳转后code会追加到redirect_uri后台,如redirect_uri=http://www.devdo.net?p=123,那么获取code后跳转的结果为http://www.devdo.net?p=123&code=codevalue。
https://open./connect/oauth2/authorize?appid=wx520c15f&redirect_uri=$uri&response_type=code&scope=snsapi_base&state=123#wechat_redirect
首先请注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。
由于我们采用的是snsapi_base式的网页授权,所以要获取openid,进行到这一步就完成了,返回的参数中自带openid。
获取code后,请求以下链接获取access_token:
公众号的唯一标识
公众号的appsecret
填写第一步获取的code参数
grant_type
填写为authorization_code
正确时返回的JSON数据包如下:
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE",
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
access_token
网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_in
access_token接口调用凭证超时时间,单位(秒)
refresh_token
用户刷新access_token
用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
用户授权的作用域,使用逗号(,)分隔
只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。
错误时微信会返回JSON数据包如下(示例为Code无效错误):
{"errcode":40029,"errmsg":"invalid code"}
一个获取openid的函数,公供参考。
function GetUserOpenid($uri,$appid,$appsecret){
if(!isset($uri) && !isset($appid)){
if(session('wx_openid')){
if(isset($_GET['code'])){
//code参数已有,获取
$url_get='https://api./sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$_GET['code'].'&grant_type=authorization_code';
$res=json_decode(curlGet($url_get));
session('wx_openid',$res-&openid);//保存openid。
header("location:".$uri); //获取openid后跳转到指定页面。
//无code参数,先获取code
$uri=urlencode($uri);//这里需要urlencode一下
$redurl='https://open./connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$uri.'&response_type=code&scope=snsapi_base&state=0101010#wechat_redirect';
header("location:".$redurl);
这里的openid已经保存到session中,你可以直接取出使用,php的curl请参考。
本文固定链接:
转载请注明:
作者:码农一号
这个作者貌似有点懒,什么都没有留下。
如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!
您可能还会对这些文章感兴趣!
(C)码农小兵 devdo.net
| Theme devdo微信网页授权是服务号才有的高级功能,开发者可以通过授权后获取用户的基本信息;在此之前,想要获取消息信息只能在用户和公众号交互时根据openid获取用户信息;而微信网页授权可在不需要消息交互,也不需要关注的情况下获取用户的基本信息。(该接口出来很早了,工作忙,一直没更新教程)微信网页授权时通过OAuth2.0完成的,整个过程分为三步:
用户授权,获取code;
根据code获取access_token【可通过refresh_token刷新获取较长有效期】
通过access_token和openid获取用户信息
具体教程参考官方文档:对微信网页授权过程做了简单封装:&?php
* 微信授权相关接口
class Wechat {
//高级功能-》开发者模式-》获取
private $app_id = 'xxx';
private $app_secret = 'xxxxxxx';
* 获取微信授权链接
* @param string $redirect_uri 跳转地址
* @param mixed $state 参数
public function get_authorize_url($redirect_uri = '', $state = '')
$redirect_uri = urlencode($redirect_uri);
return "https://open./connect/oauth2/authorize?appid={$this-&app_id}&redirect_uri={$redirect_uri}&response_type=code&scope=snsapi_userinfo&state={$state}#wechat_redirect";
* 获取授权token
* @param string $code 通过get_authorize_url获取到的code
public function get_access_token($app_id = '', $app_secret = '', $code = '')
$token_url = "https://api./sns/oauth2/access_token?appid={$this-&app_id}&secret={$this-&app_secret}&code={$code}&grant_type=authorization_code";
$token_data = $this-&http($token_url);
if($token_data[0] == 200)
return json_decode($token_data[1], TRUE);
return FALSE;
* 获取授权后的微信用户信息
* @param string $access_token
* @param string $open_id
public function get_user_info($access_token = '', $open_id = '')
if($access_token && $open_id)
$info_url = "https://api./sns/userinfo?access_token={$access_token}&openid={$open_id}&lang=zh_CN";
$info_data = $this-&http($info_url);
if($info_data[0] == 200)
return json_decode($info_data[1], TRUE);
return FALSE;
public function http($url, $method, $postfields = null, $headers = array(), $debug = false)
$ci = curl_init();
/* Curl settings */
curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ci, CURLOPT_TIMEOUT, 30);
curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
switch ($method) {
case 'POST':
curl_setopt($ci, CURLOPT_POST, true);
if (!empty($postfields)) {
curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
$this-&postdata = $
curl_setopt($ci, CURLOPT_URL, $url);
curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ci, CURLINFO_HEADER_OUT, true);
$response = curl_exec($ci);
$http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
if ($debug) {
echo "=====post data======\r\n";
var_dump($postfields);
echo '=====info=====' . "\r\n";
print_r(curl_getinfo($ci));
echo '=====$response=====' . "\r\n";
print_r($response);
curl_close($ci);
return array($http_code, $response);微信使用网页授权获取用户基本信息
有时候用户没有关注某个公众号,但是有些地方公众号需要获取到这个用户的信息,正常情况下,没有关注是获取不到的,但是微信提供了OAuth2.0来完成网页授权,请看例子,例子使用的是ruby代码
1,首先你要在公众号上设置授权的回调域名,如下:
(不需要加http://)
这样设置后,只要在这个域名下面的页面都可调起网页授权,当然有几个不能授权,具体可以官方文档
2,设置好授权回调域名后,接下来就要引导用户进入授权页面,需要注意的是,个人觉得授权一次就够了,只要第一次进来判断当前微信用户信息是否存在,如果不存在可调起授权,如果有的话有不需要了,这样可避免多次调用的问题,至于怎么判断,我是用session来做的,授权后将用户信息保存到session里,第二次进来如果session有值,说明已经用户信息了,我的例子只要获取到用户的open_id就可以,所以用的scope的参数是snsapi_base代码如下
def get_wx_user_info
& app_id = "XXXXXXX" &&
& oauth_url = "https://open./connect/oauth2/authorize?appid=# & & &{app_id}&redirect_uri=# & & & & & & &{Rack::Utils.escape(request.url)}&response_type=code&scope=snsapi_base#wechat_redirect"
& redirect_to oauth_url&if session[:wx_user_id].blank?
3,通过code来获取用户的open_id
if params[:code].present?
& app_id = "XXXXXXXX"
&&app_secret = "xxxxxxx" & &&
& url = "https://api./sns/oauth2/access_token?appid=# & & {app_id}&secret=#{app_secret}&code=#{params[:code]}&grant_type=authorization_code"
& result = RestClient.get(url)
& data = JSON(result)
& return redirect_to "#{request.url}"
因为我只要获取用户的open_id,所以到这里就算完成了,只要将json数据解析出来就OK了
如果你要拉取用户的基本信息的话,只要将上面得到access_token在放在文档上的API再获取一下就可以
wx_info_response =
HTTParty.get("https://api./sns/userinfo?access_token=#{data['access_token']}&openid=#{mp_user.app_id}&lang=zh_CN")
wx_info_response_json = JSON(wx_info_response)
这样就能得到用户的信息了。
有什么问题可扫描上面的二维码或加下面群:,直接问我。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。企业应用中的URL链接(包括自定义菜单或者消息中的链接),可以通过OAuth2.0来获取员工的身份信息。
注意,此URL的域名,必须完全匹配企业应用设置项中的’可信域名’,否则获取用户信息时会返回50001错误码。
一、企业获取code
企业如果需要员工在跳转到企业时带上员工的身份信息,需构造如下的链接:
https://open./connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
企业的CorpID
redirect_uri
授权后重定向的回调链接地址,请使用urlencode对链接进行处理
response_type
返回类型,此时固定为:code
应用授权作用域,此时固定为:snsapi_base
重定向后会带上state参数,企业可以填写a-zA-Z0-9的参数值
#wechat_redirect
终端使用此参数判断是否需要带上身份信息
员工点击后,页面将跳转至 redirect_uri/?code=CODE&state=STATE,企业可根据code参数获得员工的userid。
二、获取成员信息
Https请求方式:GET
https://qyapi./cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE&agentid=AGENTID
access_token
通过员工授权获取到的code,每次员工授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期
跳转链接时所在的企业应用ID
须拥有agent的使用权限;agentid必须和跳转链接时所在的企业应用ID相同。
a)正确时返回示例如下:
{&&&&&UserId&:&USERID&&}&
员工UserID
出错时返回示例如下:
{&&&&&errcode&:&&40029&,&&&&&errmsg&:&&invalid&code&&}&开发者必读
开发者工具
获取接口调用凭据
消息加解密
自定义菜单管理
数据统计接口
微信JS-SDK
微信小店接口
微信卡券接口
微信门店接口
微信智能接口
设备功能介绍
多客服功能
摇一摇周边
微信连Wi-Fi
出自微信公众平台开发者文档
如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。
关于网页授权回调域名的说明
1、在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的开发者中心页配置授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加
2、授权回调域名配置规范为全域名,比如需要网页授权的域名为:,配置以后此域名下面的页面 、
都可以进行OAuth2.0鉴权。但 、
3、如果公众号登录授权给了第三方开发者来进行管理,则不必做任何设置,由第三方代替公众号实现网页授权即可
关于网页授权的两种scope的区别说明
1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。
关于网页授权access_token和普通access_token的区别
1、微信网页授权是通过OAuth2.0机制实现的,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),通过网页授权access_token可以进行授权后接口调用,如获取用户基本信息;
2、其他微信接口,需要通过基础支持中的“获取access_token”接口来获取到的普通access_token调用。
关于UnionID机制
1、请注意,网页授权获取用户基本信息也遵循UnionID机制。即如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.)绑定公众号后,才可利用UnionID机制来满足上述需求。
2、UnionID机制的作用说明:如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为同一用户,对同一个微信开放平台下的不同应用(移动应用、网站应用和公众帐号),unionid是相同的。
关于特殊场景下的静默授权
1、上面已经提到,对于以snsapi_base为scope的网页授权,就静默授权的,用户无感知;
2、对于已关注公众号的用户,如果用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,即使是scope为snsapi_userinfo,也是静默授权,用户无感知。
具体而言,网页授权流程分为四步:
1、引导用户进入授权页面同意授权,获取code
2、通过code换取网页授权access_token(与基础支持中的access_token不同)
3、如果需要,开发者可以刷新网页授权access_token,避免过期
4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)
在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:
若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。
尤其注意:由于授权操作安全等级较高,所以在发起授权请求时,微信会对授权链接做正则强匹配校验,如果链接的参数顺序不对,授权页面将无法正常访问
参考链接(请在微信客户端中打开此链接体验)
Scope为snsapi_base
https%3A%2F%%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_4_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect
Scope为snsapi_userinfo
尤其注意:跳转回调redirect_uri,应当使用https链接来确保授权code的安全性。
公众号的唯一标识
redirect_uri
授权后重定向的回调链接地址,请使用urlencode对链接进行处理
response_type
返回类型,请填写code
应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)
重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
#wechat_redirect
无论直接打开还是做页面302重定向时候,必须带此参数
下图为scope等于snsapi_userinfo时的授权页面:
用户同意授权后
如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE
code说明 :
code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
首先请注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。
尤其注意:由于公众号的secret和获取到的access_token安全级别都非常高,必须只保存在服务器,不允许传给客户端。后续刷新access_token、通过access_token获取用户信息等步骤,也必须从服务器发起。
获取code后,请求以下链接获取access_token:
公众号的唯一标识
公众号的appsecret
填写第一步获取的code参数
grant_type
填写为authorization_code
正确时返回的JSON数据包如下:
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE",
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
access_token
网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_in
access_token接口调用凭证超时时间,单位(秒)
refresh_token
用户刷新access_token
用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
用户授权的作用域,使用逗号(,)分隔
只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。详见:
错误时微信会返回JSON数据包如下(示例为Code无效错误):
{"errcode":40029,"errmsg":"invalid code"}
由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token拥有较长的有效期(7天、30天、60天、90天),当refresh_token失效的后,需要用户重新授权。
获取第二步的refresh_token后,请求以下链接获取access_token:
公众号的唯一标识
grant_type
填写为refresh_token
refresh_token
填写通过access_token获取到的refresh_token参数
正确时返回的JSON数据包如下:
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
access_token
网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_in
access_token接口调用凭证超时时间,单位(秒)
refresh_token
用户刷新access_token
用户唯一标识
用户授权的作用域,使用逗号(,)分隔
错误时微信会返回JSON数据包如下(示例为Code无效错误):
{"errcode":40029,"errmsg":"invalid code"}
如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。
http:GET(请使用https协议)
access_token
网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
用户的唯一标识
返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
正确时返回的JSON数据包如下:
"openid":" OPENID",
" nickname": NICKNAME,
"sex":"1",
"province":"PROVINCE"
"city":"CITY",
"country":"COUNTRY",
"headimgurl":
"privilege":[
"PRIVILEGE1"
"PRIVILEGE2"
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
用户的唯一标识
用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
用户个人资料填写的省份
普通用户个人资料填写的城市
国家,如中国为CN
headimgurl
用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)
只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。详见:
错误时微信会返回JSON数据包如下(示例为openid无效):
{"errcode":40003,"errmsg":" invalid openid "}
http:GET(请使用https协议)
access_token
网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
用户的唯一标识
正确的Json返回结果:
{ "errcode":0,"errmsg":"ok"}
错误时的Json返回示例:
{ "errcode":40003,"errmsg":"invalid openid"}

我要回帖

更多关于 星游记风暴法米拉免费 的文章

 

随机推荐