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
就可以拿到对应于APPID
,APPSECRET
这个公众号的OpenID
。所以,既可以让用户来点击这个oAuthUrl
,也可以直接重定向过去。
网友评论