微信网页授权获取用户基本信息 access token 存在哪

微信网页授权获取用户基本信息 access token 存在哪,第1张

1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)

2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。

需要重新获取code,然后得到access token。 即要重新调用授权界面。需要用refresh token刷新access token。

关于access token过期的解决办法:

是在内层函数中,如果执行失败,并且是access_token过期的异常,则会在request的时候抛出专门的异常。

在外围函数如果接收到了这个异常,则会抛出让装饰器接收到,装饰器收到这个异常后会删掉缓存中的token,并且重新执行该函数,这样该函数在执行的时候,就会去主动的获取最新的token。

assess token过期的原因:

测试服和线上服使用同一个app_id和secret来获取,可能会存在其中一方获取的token是旧的。

代码中没有统一的从一个地方来获取,而是直接从官网获取,导致不统一(看了代码,没有发现单独获取token的地方)。

请求获取新的token的时候失败(应该不可能,因为请求成功以后会在redis中缓存两个小时,但是发现没过多久又再次失效,因此主要原因应该不是这个)。

异步队列等待的时间较长,正好执行的时候token已经更新(应该不可能,获取token是在异步函数中执行,而不是通过函数参数来传递)。

微信开发需要获取access token。以下内容引用微信官方开发者文档:

access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

公众平台的API调用所需的access_token的使用及生成方式说明:

1、为了保密appsecrect,第三方需要一个access_token获取和刷新的中控服务器。而其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则会造成access_token覆盖而影响业务;

2、目前access_token的有效期通过返回的expire_in来传达,目前是7200秒之内的值。中控服务器需要根据这个有效时间提前去刷新新access_token。在刷新过程中,中控服务器对外输出的依然是老access_token,此时公众平台后台会保证在刷新短时间内,新老access_token都可用,这保证了第三方业务的平滑过渡;

3、access_token的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新,还需要提供被动刷新access_token的接口,这样便于业务服务器在API调用获知access_token已超时的情况下,可以触发access_token的刷新流程。

如果第三方不使用中控服务器,而是选择各个业务逻辑点各自去刷新access_token,那么就可能会产生冲突,导致服务不稳定。

公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在微信公众平台官网-开发者中心页中获得(需要已经成为开发者,且帐号没有异常状态)。注意调用所有微信接口时均需使用>

接口调用请求说明

>

参数说明

grant_type      是      获取access_token填写client_credential

appid      是      第三方用户唯一凭证   

secret      是      第三方用户唯一凭证密钥,即appsecret   

返回说明

正常情况下,微信会返回下述JSON数据包给公众号:

{"access_token":"ACCESS_TOKEN","expires_in":7200}

参数说明

access_token      获取到的凭证   

expires_in      凭证有效时间,单位:秒   

错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):

{"errcode":40013,"errmsg":"invalid appid"}

一、通过全局Access Token获取用户基本信息

1 用户关注以及回复消息的时候,均可以获得用户的OpenID

<xml>

<ToUserName><![CDATA[gh_b629c48b653e]]></ToUserName>

<FromUserName><![CDATA[ollB4jv7LA3tydjviJp5V9qTU_kA]]></FromUserName>

<CreateTime>1372307736</CreateTime>

<MsgType><![CDATA[event]]></MsgType>

<Event><![CDATA[subscribe]]></Event>

<EventKey><![CDATA[]]></EventKey>

</xml>

其中的FromUserName就是OpenID

2 然后使用access_token接口,请求获得全局Access Token

>

返回结果:

{

"access_token": "NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-WmOLLniAYLAwzhbYhXNjbLc_KAA092cxkmpj5FpuqNO0IL7bB0Exz5s5qC9Umypy-rz2y441W9qgfnmNtIZWSjSQ",

"expires_in": 7200

}

3 再使用全局ACCESS_TOKEN获取OpenID的详细信息

>

返回如下:

{

"subscribe": 1,

"openid": "oLVPpjqs2BhvzwPj5A-vTYAX4GLc",

"nickname": "方倍",

"sex": 1,

"language": "zh_CN",

"city": "深圳",

"province": "广东",

"country": "中国",

"headimgurl": ">

"subscribe_time": 1386160805

}

至此,获得用户的基本信息。

二、通过OAuth20方式d出授权页面获得用户基本信息

1 首先配置回调域名

2 构造请求url如下:

>

页面URL中的

scope=snsapi_userinfo 表示应用授权作用域为请求用户信息

★ 如果使用别人的AppID和AppSecret,那么获得的OpenID是那个有高级接口权限的服务号的,这里可以通过消息回复,获取本公众账号下的OpenID,带入回调中,与另一个OpenID进行关联

>

将该链接回复给关注用户,用户点击后,d出应用授权界面

3 回调页面得到链接如下,回调url中将包含参数code

>

或者 >

4 再使用code换取oauth2的授权access_token

url如下:

>

获得授权Access Token:

{

"access_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5AI1bw2uqN--2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw",

"expires_in": 7200,

"refresh_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5CZPAwZksiuz_6x_TfkLoXLU7kdKM2232WDXB3Msuzq1A",

"openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc",

"scope": "snsapi_userinfo,"

}

5 再使用授权Access Token获取用户信息

url如下:

>

返回如下

{

"openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc",

"nickname": "方倍",

"sex": 1,

"language": "zh_CN",

"city": "Shenzhen",

"province": "Guangdong",

"country": "CN",

"headimgurl": ">

"privilege": []

1 简介

即server-side模式,是OAuth20认证的一种模式,又称Web Server Flow;

适用于需要从web server访问的应用,例如Web/wap网站。

其授权验证流程示意图如下(来源:OAuth20协议草案V21的41节 )

对于应用而言,需要进行两步:

1 获取Authorization Code;

2 通过Authorization Code获取Access Token

2 过程详解

Step1:获取Authorization Code

请求地址:

PC网站: >

你不能用这种redirect,而是需要取得这个结果,这个可以用>

注,取到TOKEN后,你可以把取得TOKEN的时间和超时的时间记录在数据库里,需要的用到的时候,先读取超时时间与当前时间比较,如果过期就重新获取(同时更新上面的记录),如果没过期就继续用之前的TOKEN就行了。

以上就是关于微信网页授权获取用户基本信息 access token 存在哪全部的内容,包括:微信网页授权获取用户基本信息 access token 存在哪、access token已过期、微信开发怎么获取access等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10129003.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存