微信公共服務平臺開發(.Net 的實現)13-------網頁受權(下 :C#代碼的實現 )

接着上次的理論,咱們此次來研究用代碼實現「網頁受權獲取用戶基本信息」,首先咱們須要一個連接指向微信的受權頁面,在微信開發平臺中已經說了,這個連接必須在微信客戶端中打開,那麼咱們就乾脆使用文本消息來完成吧,也就是說當咱們發送「受權」兩個字的時候,微信給咱們一個連接,咱們點擊這個連接而後進入「受權頁面」。首先改造一下咱們OnLoad函數:數據庫

if (wx.MsgType == "text" && wx.Content == "你好")
{

res = sendTextMessage(wx, "你好,歡迎使用北京永傑友信科技有限公司公共微信平臺!");
}
else if (wx.MsgType == "text" && wx.Content == "受權")
{
string MyAppid = "wx043225275885dafd";
string RedirectUri = "http://wx.4ugood.net/OAuthRedirectUri.aspx";
string URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + MyAppid + "&redirect_uri=" + RedirectUri + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect" ;
string Str = "<a href='" + URL + "'>受權頁面</a>";
res = sendTextMessage(wx, Str);
}
else if (wx.MsgType == "voice")
{
res = sendTextMessage(wx, wx.Recognition);
}
else if (wx.MsgType == "location")
{
res = sendTextMessage(wx, "您發送的位置是:" + wx.Label + ";緯度是:" + wx.Location_X + ";經度是:" + wx.Location_Y + ";縮放比例爲:" + wx.Scale);
}
else
{
res = sendTextMessage(wx, "你好,未能識別消息!");
}json

其中,MyAppid不用說了,RedirectUri 是咱們跳轉後的網頁,等會兒就會看到代碼,URL是微信給出的格式,咱們直接使用就OK了。這樣就會反饋一個連接,點擊就能夠進入受權的頁面了。
下面咱們來看看RedirectUri參數的OAuthRedirectUri.aspx頁面的源碼吧,由於是講解的例子,以說明問題爲主,我就簡化了其中也佈局,OAuthRedirectUri.aspx.cs的內容以下:
首先咱們用到了兩個類:OAuth_Token和OAuthUserapi

public class OAuth_Token
{
public OAuth_Token()
{數組

//
//TODO: 在此處添加構造函數邏輯
//
}
//access_token 網頁受權接口調用憑證,注意:此access_token與基礎支持的access_token不一樣
//expires_in access_token接口調用憑證超時時間,單位(秒)
//refresh_token 用戶刷新access_token
//openid 用戶惟一標識,請注意,在未關注公衆號時,用戶訪問公衆號的網頁,也會產生一個用戶和公衆號惟一的OpenID
//scope 用戶受權的做用域,使用逗號(,)分隔
public string access_token { get; set; }
public string expires_in { get; set; }
public string refresh_token { get; set; }
public string openid { get; set; }
public string scope { get; set; }微信

}微信開發


public class OAuthUser
{
public OAuthUser()
{ }
#region 數據庫字段
private string _openID;
private string _searchText;
private string _nickname;
private string _sex;
private string _province;
private string _city;
private string _country;
private string _headimgUrl;
private string _privilege;
#endregionapp

#region 字段屬性
/// <summary>
/// 用戶的惟一標識
/// </summary>
public string openid
{
set { _openID = value; }
get { return _openID; }
}
/// <summary>
///
/// </summary>
public string SearchText
{
set { _searchText = value; }
get { return _searchText; }
}
/// <summary>
/// 用戶暱稱
/// </summary>
public string nickname
{
set { _nickname = value; }
get { return _nickname; }
}
/// <summary>
/// 用戶的性別,值爲1時是男性,值爲2時是女性,值爲0時是未知
/// </summary>
public string sex
{
set { _sex = value; }
get { return _sex; }
}
/// <summary>
/// 用戶我的資料填寫的省份
/// </summary>
public string province
{
set { _province = value; }
get { return _province; }
}
/// <summary>
/// 普通用戶我的資料填寫的城市
/// </summary>
public string city
{
set { _city = value; }
get { return _city; }
}
/// <summary>
/// 國家,如中國爲CN
/// </summary>
public string country
{
set { _country = value; }
get { return _country; }
}
/// <summary>
/// 用戶頭像,最後一個數值表明正方形頭像大小(有0、4六、6四、9六、132數值可選,0表明640*640正方形頭像),用戶沒有頭像時該項爲空
/// </summary>
public string headimgurl
{
set { _headimgUrl = value; }
get { return _headimgUrl; }
}
/// <summary>
/// 用戶特權信息,json 數組,如微信沃卡用戶爲(chinaunicom)其實這個格式稱不上JSON,只是個單純數組
/// </summary>
public string privilege
{
set { _privilege = value; }
get { return _privilege; }
}
#endregion
}函數

而後是OAuthRedirectUri.aspx.cs的所有內容:佈局

public partial class OAuthRedirectUri : System.Web.UI.Page
{url

string Appid = "wx043225275885dafd";
string appsecret = "cb4425b24ab79ef875029cf0bf326ae9";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (!string.IsNullOrEmpty(Request.QueryString["code"]))
{
string Code = Request.QueryString["code"].ToString();
//得到Token
OAuth_Token Model = Get_token(Code);
//Response.Write(Model.access_token);
OAuthUser OAuthUser_Model = Get_UserInfo(Model.access_token, Model.openid);
Response.Write("用戶OPENID:" + OAuthUser_Model.openid + "<br>用戶暱稱:" + OAuthUser_Model.nickname + "<br>性別:" + OAuthUser_Model.sex + "<br>所在省:" + OAuthUser_Model.province + "<br>所在市:" + OAuthUser_Model.city + "<br>所在國家:" + OAuthUser_Model.country + "<br>頭像地址:" + OAuthUser_Model.headimgurl + "<br>用戶特權信息:" + OAuthUser_Model.privilege);

}
}
}

//得到Token
protected OAuth_Token Get_token(string Code)
{
string Str = GetJson("https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + Appid + "&secret=" + appsecret + "&code=" + Code + "&grant_type=authorization_code");
OAuth_Token Oauth_Token_Model = JsonHelper.ParseFromJson<OAuth_Token>(Str);
return Oauth_Token_Model;
}
//刷新Token
protected OAuth_Token refresh_token(string REFRESH_TOKEN)
{
string Str = GetJson("https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=" + Appid + "&grant_type=refresh_token&refresh_token=" + REFRESH_TOKEN);
OAuth_Token Oauth_Token_Model = JsonHelper.ParseFromJson<OAuth_Token>(Str);
return Oauth_Token_Model;
}
//得到用戶信息
protected OAuthUser Get_UserInfo(string REFRESH_TOKEN, string OPENID)
{
// Response.Write("得到用戶信息REFRESH_TOKEN:" + REFRESH_TOKEN + "||OPENID:" + OPENID);
string Str = GetJson("https://api.weixin.qq.com/sns/userinfo?access_token=" + REFRESH_TOKEN + "&openid=" + OPENID);
OAuthUser OAuthUser_Model = JsonHelper.ParseFromJson<OAuthUser>(Str);
return OAuthUser_Model;
}
protected string GetJson(string url)
{
WebClient wc = new WebClient();
wc.Credentials = CredentialCache.DefaultCredentials;
wc.Encoding = Encoding.UTF8;
string returnText = wc.DownloadString(url);

if (returnText.Contains("errcode"))
{
//可能發生錯誤
}
//Response.Write(returnText);
return returnText;
}
}

其中用到的JsonHelper類在 微信公共服務平臺開發(.Net 的實現)5-------解決access_token過時的問題  也提到過,再也不粘貼了。

 

這樣咱們就實現了受權到拉取用戶信息的功能了。

相關文章
相關標籤/搜索