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);
}
17 个解决方案
#1
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)
{
这里是授权方法。
}
#2
来个人啊 亲。十万火急
#3
http://tieba.baidu.com/p/4142016680?pid=78559049209&cid=0#78559049209
之前在贴吧写的。25楼开始,是授权,希望对你有点帮助
之前在贴吧写的。25楼开始,是授权,希望对你有点帮助
#4
授权方法里边根据code获取token偶尔会出现invalid code 和这种问题
#5
可能是你调用错了。
授权的token和普通token不是同一个。
授权的token和普通token不是同一个。
#6
抓包,把错误的包的请求拿出来分析下
#7
Token是同一个
#8
关键是同一套代码,有些人能授权成功,有些人就不行,而且token 出问题,那也应该 try catch到,但是直接程序奔溃了。
#9
var result = OAuthApi.GetAccessToken(AppId, AppSecret, code);
程序崩溃还真不知道了。你看一下我刚才给你的贴吧地址,里面我写了一些代码的。
我看你写的代码,好像没什么问题。
程序崩溃还真不知道了。你看一下我刚才给你的贴吧地址,里面我写了一些代码的。
我看你写的代码,好像没什么问题。
#10
var result = OAuthApi.GetAccessToken(AppId, AppSecret, code);
程序崩溃还真不知道了。你看一下我刚才给你的贴吧地址,里面我写了一些代码的。
我看你写的代码,好像没什么问题。
代码差不多,我也是用的senparc的SDK,代码就几行,出现这种问题连原因都没分析出来
#11
不抓包拿出来分析,盯着代码瞪眼有用?就算你去找对方技术,别人也是让你拿数据来,你给他们看代码,有用?
#12
var result = OAuthApi.GetAccessToken(AppId, AppSecret, code);
程序崩溃还真不知道了。你看一下我刚才给你的贴吧地址,里面我写了一些代码的。
我看你写的代码,好像没什么问题。
代码差不多,我也是用的senparc的SDK,代码就几行,出现这种问题连原因都没分析出来
我总觉得是代码问题,因为我这里访问,好像还没出过这个情况。。。。。
但是根据楼主的代码,也分析不出原因
#13
这是多次回调的问题
#14
楼主解决了吗?我也是这个问题 找不到答案
#15
开启调试,你会发现你在同页面有2次获取Code,避免点击某些按钮,发生再次回传获取CODE,NET的话请把第一次获取放到
if (!IsPostBack)
{
放到这里,避免点击按钮时又一次获取
}
if (!IsPostBack)
{
放到这里,避免点击按钮时又一次获取
}
#16
你这个主要原因还是出在微信的code上面!因为微信对code说明是 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。 页面授权将跳转至 redirect_uri填写的url的时候会带上code和state,因为code只能使用一次,所以当用户刷新当前页面的时候code就会失效,就会出现oauth_code invalid code报错信息。
#17
你这个主要原因还是出在微信的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');
}
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');
}
#1
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)
{
这里是授权方法。
}
#2
来个人啊 亲。十万火急
#3
http://tieba.baidu.com/p/4142016680?pid=78559049209&cid=0#78559049209
之前在贴吧写的。25楼开始,是授权,希望对你有点帮助
之前在贴吧写的。25楼开始,是授权,希望对你有点帮助
#4
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 和这种问题
#5
可能是你调用错了。
授权的token和普通token不是同一个。
授权的token和普通token不是同一个。
#6
抓包,把错误的包的请求拿出来分析下
#7
可能是你调用错了。
授权的token和普通token不是同一个。
Token是同一个
#8
可能是你调用错了。
授权的token和普通token不是同一个。
Token是同一个
关键是同一套代码,有些人能授权成功,有些人就不行,而且token 出问题,那也应该 try catch到,但是直接程序奔溃了。
#9
var result = OAuthApi.GetAccessToken(AppId, AppSecret, code);
程序崩溃还真不知道了。你看一下我刚才给你的贴吧地址,里面我写了一些代码的。
我看你写的代码,好像没什么问题。
程序崩溃还真不知道了。你看一下我刚才给你的贴吧地址,里面我写了一些代码的。
我看你写的代码,好像没什么问题。
#10
var result = OAuthApi.GetAccessToken(AppId, AppSecret, code);
程序崩溃还真不知道了。你看一下我刚才给你的贴吧地址,里面我写了一些代码的。
我看你写的代码,好像没什么问题。
代码差不多,我也是用的senparc的SDK,代码就几行,出现这种问题连原因都没分析出来
#11
不抓包拿出来分析,盯着代码瞪眼有用?就算你去找对方技术,别人也是让你拿数据来,你给他们看代码,有用?
#12
var result = OAuthApi.GetAccessToken(AppId, AppSecret, code);
程序崩溃还真不知道了。你看一下我刚才给你的贴吧地址,里面我写了一些代码的。
我看你写的代码,好像没什么问题。
代码差不多,我也是用的senparc的SDK,代码就几行,出现这种问题连原因都没分析出来
我总觉得是代码问题,因为我这里访问,好像还没出过这个情况。。。。。
但是根据楼主的代码,也分析不出原因
#13
这是多次回调的问题
#14
楼主解决了吗?我也是这个问题 找不到答案
#15
开启调试,你会发现你在同页面有2次获取Code,避免点击某些按钮,发生再次回传获取CODE,NET的话请把第一次获取放到
if (!IsPostBack)
{
放到这里,避免点击按钮时又一次获取
}
if (!IsPostBack)
{
放到这里,避免点击按钮时又一次获取
}
#16
你这个主要原因还是出在微信的code上面!因为微信对code说明是 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。 页面授权将跳转至 redirect_uri填写的url的时候会带上code和state,因为code只能使用一次,所以当用户刷新当前页面的时候code就会失效,就会出现oauth_code invalid code报错信息。
#17
你这个主要原因还是出在微信的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');
}
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');
}