1. 將目標url作為redirectUrl栅表,產(chǎn)生一個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網(wǎng)頁授權(quán)重付,修改苗踪,授權(quán)回調(diào)頁面域名。
(2)微信的oAuthUrl
只能在微信瀏覽器中使用娜饵。
(3)SCOPE = "snsapi_base"
关划,表示不彈出用戶確認框小染,來獲取用戶信息。
(4)transmitData
表示要傳遞過去的參數(shù)贮折,redirectUrl
中可以使用Request["state"]
來拿到裤翩。
2. 目標url頁面獲取OpenID
(1)從查詢參數(shù)中拿到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參數(shù)錯誤
”寂呛。
(2)只要用戶訪問oAuthUrl
就可以拿到對應于APPID
缤灵,APPSECRET
這個公眾號的OpenID
伦籍。所以蓝晒,既可以讓用戶來點擊這個oAuthUrl
,也可以直接重定向過去鸽斟。