[OAuth] 使用微信OAuth获取OpenID

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,也可以直接重定向过去。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容