微信OAuth授权,偶然出现invalid code,invalid token

peng2739956 2015-11-17 03:22:06
OAuth授权出现少数人报 40029错误,一直授权不成功。贴上代码,求大神指教。

if (LWRequest.GetString("code") != "")
{
OAuthUserInfo infos = null;
try
{
DataTable result = GetToken(LWRequest.GetString("code"), Appid, Ksy);
if (result.Columns.Contains("errcode"))
{
Prompt("" + result.Rows[0]["errmsg"].ToString());
return;
}
infos = OAuthApi.GetUserInfo(result.Rows[0]["access_token"].ToString(), result.Rows[0]["openid"].ToString());
}
catch
{
Response.Redirect("/500error.html");
}
if (infos != null)
{

}
}
else
{
string u = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + Appid + "&redirect_uri=" + System.Web.HttpContext.Current.Server.UrlEncode(url) + "&response_type=code&scope=snsapi_userinfo&state=1&connect_redirect=1#wechat_redirect";
Response.Redirect(u);
}
...全文
4164 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_34472779 2017-01-07
  • 打赏
  • 举报
回复
你这个主要原因还是出在微信的code上面!因为微信对code说明是 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。 页面授权将跳转至 redirect_uri填写的url的时候会带上code和state,因为code只能使用一次,所以当用户刷新当前页面的时候code就会失效,就会出现oauth_code invalid code报错信息。解决办法是当页面授权将跳转至 redirect_uri填写的url的时候会带上code和state,利用code换取openid和页面access_token等,在带上这些参数又重定向对当前页面代码如下$weixin = new TPWechat($this->options); if (isset($_GET['code'])) { $re = $weixin->getOauthAccessToken(); if (!$re) { $error = \Com\Wechat\ErrorCode::getErrText($weixin->errCode); echo ($error . "\n" . $weixin->errMsg); die; } redirect(U('Index/viewsaaa?openid=' . $re['openid'] . '&access_token=' . $re['access_token'] . '&refresh_token=' . $re['refresh_token'])); } else { $this->assign(array( 'openid' => I('get.openid'), 'token' => I('get.access_token'), 'refresh_token' => I('get.refresh_token'), )); $this->display('views'); }
qq_34472779 2017-01-07
  • 打赏
  • 举报
回复
你这个主要原因还是出在微信的code上面!因为微信对code说明是 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。 页面授权将跳转至 redirect_uri填写的url的时候会带上code和state,因为code只能使用一次,所以当用户刷新当前页面的时候code就会失效,就会出现oauth_code invalid code报错信息。
qq_36538170 2016-10-28
  • 打赏
  • 举报
回复
开启调试,你会发现你在同页面有2次获取Code,避免点击某些按钮,发生再次回传获取CODE,NET的话请把第一次获取放到 if (!IsPostBack) { 放到这里,避免点击按钮时又一次获取 }
qq_35265588 2016-06-09
  • 打赏
  • 举报
回复
楼主解决了吗?我也是这个问题 找不到答案
mrxxdd 2016-01-31
  • 打赏
  • 举报
回复
这是多次回调的问题
正怒月神 版主 2015-11-17
  • 打赏
  • 举报
回复
引用 10 楼 peng2739956 的回复:
[quote=引用 9 楼 hanjun0612 的回复:] var result = OAuthApi.GetAccessToken(AppId, AppSecret, code); 程序崩溃还真不知道了。你看一下我刚才给你的贴吧地址,里面我写了一些代码的。 我看你写的代码,好像没什么问题。
代码差不多,我也是用的senparc的SDK,代码就几行,出现这种问题连原因都没分析出来[/quote] 我总觉得是代码问题,因为我这里访问,好像还没出过这个情况。。。。。 但是根据楼主的代码,也分析不出原因
xdashewan 2015-11-17
  • 打赏
  • 举报
回复
不抓包拿出来分析,盯着代码瞪眼有用?就算你去找对方技术,别人也是让你拿数据来,你给他们看代码,有用?
peng2739956 2015-11-17
  • 打赏
  • 举报
回复
引用 9 楼 hanjun0612 的回复:
var result = OAuthApi.GetAccessToken(AppId, AppSecret, code); 程序崩溃还真不知道了。你看一下我刚才给你的贴吧地址,里面我写了一些代码的。 我看你写的代码,好像没什么问题。
代码差不多,我也是用的senparc的SDK,代码就几行,出现这种问题连原因都没分析出来
正怒月神 版主 2015-11-17
  • 打赏
  • 举报
回复
var result = OAuthApi.GetAccessToken(AppId, AppSecret, code); 程序崩溃还真不知道了。你看一下我刚才给你的贴吧地址,里面我写了一些代码的。 我看你写的代码,好像没什么问题。
peng2739956 2015-11-17
  • 打赏
  • 举报
回复
引用 7 楼 peng2739956 的回复:
[quote=引用 5 楼 hanjun0612 的回复:] 可能是你调用错了。 授权的token和普通token不是同一个。
Token是同一个 [/quote] 关键是同一套代码,有些人能授权成功,有些人就不行,而且token 出问题,那也应该 try catch到,但是直接程序奔溃了。
peng2739956 2015-11-17
  • 打赏
  • 举报
回复
引用 5 楼 hanjun0612 的回复:
可能是你调用错了。
授权的token和普通token不是同一个。

Token是同一个
xdashewan 2015-11-17
  • 打赏
  • 举报
回复
抓包,把错误的包的请求拿出来分析下
正怒月神 版主 2015-11-17
  • 打赏
  • 举报
回复
可能是你调用错了。
授权的token和普通token不是同一个。

peng2739956 2015-11-17
  • 打赏
  • 举报
回复
引用 1 楼 hanjun0612 的回复:
if (string.IsNullOrEmpty(Request.QueryString["code"]))
{
string urlStr = OAuthApi.GetAuthorizeUrl(AppId, "你的授权方法/UserOAuth?url=" + urlCallBack, "1", OAuthScope.snsapi_base, "code");
Redirect(urlStr)
}
else
{
//如果用户已经授权,那么这里添加代码
}

public void UserOAuth(string url,string code)
{
这里是授权方法。
}

授权方法里边根据code获取token偶尔会出现invalid code 和这种问题
peng2739956 2015-11-17
  • 打赏
  • 举报
回复
来个人啊 亲。十万火急
正怒月神 版主 2015-11-17
  • 打赏
  • 举报
回复
http://tieba.baidu.com/p/4142016680?pid=78559049209&cid=0#78559049209 之前在贴吧写的。25楼开始,是授权,希望对你有点帮助
正怒月神 版主 2015-11-17
  • 打赏
  • 举报
回复
if (string.IsNullOrEmpty(Request.QueryString["code"]))
{
string urlStr = OAuthApi.GetAuthorizeUrl(AppId, "你的授权方法/UserOAuth?url=" + urlCallBack, "1", OAuthScope.snsapi_base, "code");
Redirect(urlStr)
}
else
{
//如果用户已经授权,那么这里添加代码
}

public void UserOAuth(string url,string code)
{
这里是授权方法。
}

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧