消息关闭
    暂无新消息!
通过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没有任何内容。
一次问了三个问题,求各位大侠大神不吝赐教!

5个回答

︿ 2
补充说明:WeChatUserInfo类型中定义的属性在其他页面已经成功使用,显示用户的相关信息,但是网页授权跳转却显示不出来。
︿ 1
问题解决了,我要鄙视自己没有认证看开发者文档,也要小鄙视夏微信~
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,哭了!!
︿ 1
额外一个问题,网页授权中通过snsapi_userinfo返回的用户信息和用户管理中返回的用户信息,能用同一个类型获取返回值吗,用户管理url接口返回的用户信息有9个属性,比网页授权多2个,应该不影响吧?
︿ 0
1、scope是snsapi_userinfo,如果已经关注了微信号是不会出那个绿色提示授权的,体验效果和静默授权一样,这个你可以去看官方文档哈;

2、授权只是获取到了一个code,你得拿code去换取openid这些参数,而不是直接把这些参数给你。因为你的代码只贴了一点点,我不知道你这部分是不是这么写的;

问题3后你的补充我觉得可以先不回答,得让你确定一下问题2是不是问题的根本问题。

官方文档授权地址:
http://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html