微信网页授权拿到的access_token 拿去换取用户信息

首先回调到个人页面 我现在是直接把access_token带给了前端然后让他带回拿用户信息
现在想存在服务端 但是貌似每次请求的access_token我存起来40001

https://blog.csdn.net/weixin_39735923/article/details/79202563

1.首先服务器是有定时任务的,每一小时更新一次access_token

2.有了第一步之后理论上不会出现40001错误了,为了防止此问题出现当请求返回40001后重复请求3次

3.请求3次后,如果还有此问题出现(几率已经很小了,不过为了保证准确性),把此信息存入到一个记录token失效错误的日志表中,定时的去处理这个表中的数据。

亲测10万用户,在经过第二步之后半月内只有几十条token失效的日志,在定时处理后,再没出现过问题。

将access_token存在redis中,存储时加上过期时间,取之前判断是否过期,未过期则用,已过期则无重新拉取
public string GetAccessTokenRedis(string AppId)
{
if (redis.HashExists("weixin_access_token", AppId))
{
var gettoken = redis.HashGet("weixin_access_token", AppId);
if (gettoken != null && gettoken.value!=null)
{
if (DateTime.Now < gettoken.expires)
{
return gettoken.value; /**存在未超时输出**/
}
}
}
string token = access_token();
if (token != null && !token.Trim().Equals(""))
{
DateTime _accessExpires = DateTime.Now.AddSeconds(7100);
redis.HashSet("weixin_access_token", AppId, new RedisWeiXinToken { value = token, expires = _accessExpires });
}
else {
AllFunction._Error.WriteOfWeb("AppId="+ AppId+ ",获取access_token失败");
token = String.Empty;
}
return token;
}

2、获取用户信息你这没有描述清楚,分二种情况
(1)你已经拿到用户的openid,则调用接口去获得用户基础信息(即头像、昵称这些)
string Str = GetJson(String.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}",access_token,openid));
(2)未拿到用户openid则需要用户扫码或者是点开在手机微信中网页,使用微信网页授权去获得
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

由于公众号的secret和获取到的access_token安全级别都非常高,必须只保存在服务器 如果我存在redis中是不是每个用户请求一次 他重新生成一次access_token 但是我后续的业务要用到这个access-token我是直接给前端了