美文网首页Other
[OAuth] 使用微信OAuth获取OpenID

[OAuth] 使用微信OAuth获取OpenID

作者: 何幻 | 来源:发表于2016-03-03 07:17 被阅读781次

    1. 将目标url作为redirectUrl,产生一个oAuthUrl

    string oAuthUrl = string.Format(
        "https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope={2}&state={3}#wechat_redirect",
        APPID, 
        HttpUtility.UrlEncode(redirectUrl), 
        SCOPE, 
        transmitData == null ? "" : HttpUtility.UrlEncode(transmitData)
    );
    

    注:
    (1)并不是任意Url都可以作为redirectUrl,该Url的域名需要在微信公众平台管理页面进行配置:OAuth2.0网页授权,修改,授权回调页面域名。
    (2)微信的oAuthUrl只能在微信浏览器中使用。
    (3)SCOPE = "snsapi_base",表示不弹出用户确认框,来获取用户信息。
    (4)transmitData表示要传递过去的参数,redirectUrl中可以使用Request["state"]来拿到。

    2. 目标url页面获取OpenID

    (1)从查询参数中拿到oAuthCode = Request["code"]
    (2)通过以下方式拿到AccessToken

    string getAccessTokenUrl = string.Format(
        "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code",
        APPID, 
        APPSECRET, 
        oAuthCode
    );
    

    (3)解析这个getAccessTokenUrl返回的json字符串,拿到OpenID

    public sealed class AccessToken
    {
        public string access_token { get; set; }
    
        public long expires_in { get; set; }
    
        public string refresh_token { get; set; }
    
        public string openid { get; set; }
    
        public string scope { get; set; }
    }
    

    注:
    (1)在目标url中,只能使用oAuthCode一次,否则就会过期,显示“redirect_uri参数错误”。
    (2)只要用户访问oAuthUrl就可以拿到对应于APPIDAPPSECRET这个公众号的OpenID。所以,既可以让用户来点击这个oAuthUrl,也可以直接重定向过去。

    相关文章

      网友评论

        本文标题:[OAuth] 使用微信OAuth获取OpenID

        本文链接:https://www.haomeiwen.com/subject/xounkttx.html