美文网首页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