微信网页授权获取用户信息失败

cloudiex 2016-03-10 12:47:59
通过OAuth实现自定义View菜单的网页授权跳转,跳转页面为GetUserInfoByOAuth.aspx,使用公众号为微信公众平台提供的测试号。
GetUserInfoByOAuth部分代码如下:
WeChatUserInfo userInfo = WeChatAuthorize.GetUserInfoByOAuth(out errorMessage);
if (userInfo != null)
{
Response.Write("OpenId->" + userInfo.openid + " Nickname->" + userInfo.nickname);
}
else
{
Response.Write("OMG,未获取到用户信息~" + errorMessage.errmsg);
}

微信测试号自定义菜单View的url为:string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect",appId,redirectUrl);
问题出来了,
问题一:点击菜单项,scope是snsapi_userinfo,却没有授权跳转提示,听说测试号只能是关注的用户才能实现网页授权跳转,但是无授权提示是怎么回事?又不是snsapi_base。
问题二:跳转虽然无提示,却成功跳转,页面上却只有OpenId-> Nickname->,没有实际的openid和nickname的值。能够输出OpenId->表示userInfo不为空,但是怎么实际的值却无法显示出来呢?
问题三:写了一个StreamWriter writer = new StreamWriter(HttpContext.Current.Server.MapPath(".") + "\\Log.md", true);
writer.WriteLine(userInfo.openid); 运行之后服务器上的Log.md没有任何内容。
一次问了三个问题,求各位大侠大神不吝赐教!
...全文
6499 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dubaiyouyue 2017-07-15
  • 打赏
  • 举报
回复
cloudiex 2016-03-10
  • 打赏
  • 举报
回复
补充说明:WeChatUserInfo类型中定义的属性在其他页面已经成功使用,显示用户的相关信息,但是网页授权跳转却显示不出来。
cloudiex 2016-03-10
  • 打赏
  • 举报
回复
引用 2 楼 Bob_張的回复:
1、scope是snsapi_userinfo,如果已经关注了微信号是不会出那个绿色提示授权的,体验效果和静默授权一样,这个你可以去看官方文档哈; 2、授权只是获取到了一个code,你得拿code去换取openid这些参数,而不是直接把这些参数给你。因为你的代码只贴了一点点,我不知道你这部分是不是这么写的; 问题3后你的补充我觉得可以先不回答,得让你确定一下问题2是不是问题的根本问题。 官方文档授权地址: http://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html
谢谢如此详细的回复,针对第2个问题,我的确是在自己的方法里通过request.querystring["code"]获取了code,并且设置了errormessage这样一个out参数。我直接在浏览器中输入getuserinfobyoath.aspx的链接,会弹出设定的错误提示,即为获取code。所以在微信菜单跳转时没有出现类似的errormessage提示,理论上应该是获取到code,然后再通过code,appid,secret,grant_type获取access_token和openid。这也是我想通过问题3中记录服务器输出消息的原因。不过经你的提醒,我大概感觉到问题可能在获取到json包后,我那个解析的类型,我自定义了一个类,包含access_token,openid等属性,但是没有用json的那个解析方法,我赶紧去试试。不过第3个问题,还请赐教。
Bob_張 2016-03-10
  • 打赏
  • 举报
回复
1、scope是snsapi_userinfo,如果已经关注了微信号是不会出那个绿色提示授权的,体验效果和静默授权一样,这个你可以去看官方文档哈; 2、授权只是获取到了一个code,你得拿code去换取openid这些参数,而不是直接把这些参数给你。因为你的代码只贴了一点点,我不知道你这部分是不是这么写的; 问题3后你的补充我觉得可以先不回答,得让你确定一下问题2是不是问题的根本问题。 官方文档授权地址: http://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html
cloudiex 2016-03-10
  • 打赏
  • 举报
回复
额外一个问题,网页授权中通过snsapi_userinfo返回的用户信息和用户管理中返回的用户信息,能用同一个类型获取返回值吗,用户管理url接口返回的用户信息有9个属性,比网页授权多2个,应该不影响吧?
cloudiex 2016-03-10
  • 打赏
  • 举报
回复
问题解决了,我要鄙视自己没有认证看开发者文档,也要小鄙视夏微信~ var ret = httpHelper.Get<AuthorizedResult>(new FormData { { "appid", appId }, { "secret", appSecret }, { "code", code }, { "grant_type", grant_type } }); 成功获取ret.openid,因为定义了AuthorizedResult,里面就是返回的那几个属性,刚才有看了一遍开发文档,里面的access_token让我吐血!access_token->“网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同”,所以返回用户信息的url接口竟然是“https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN”,我一直用原来定义好的用户管理里获取用户信息的方法去获取,因为参数都是access_token和openid,所以没注意。用户管理里获取用户信息的url接口是:“https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN”。5555555,哭了!!

3,143

社区成员

发帖
与我相关
我的任务
社区描述
微信开发即微信公众平台开发,将企业信息、服务、活动等内容通过微信网页的方式进行表现,通过二次开发可以将公众账号由一个媒体型营销工具转化成提供服务的产品。
社区管理员
  • 微信开发
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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