1. 程式人生 > >asp.net下微信網頁授權

asp.net下微信網頁授權

微信網頁授權我相信做微信開發的小夥伴都可能遇見過這樣的問題

1.我們要明白微信網頁授權主要是用來做什麼?

使用者在微信客戶端中訪問第三方網頁,公眾號可以通過微信網頁授權機制,來獲取使用者基本信 息, 進 而實現業務邏輯。

網頁授權分以下幾步
1. 配置網頁授權回撥域名
2. 使用者同意授權,獲取code
3. 通過code換取網頁授權access_token
4. 重新整理access_token(如果需要)
5. 拉取使用者資訊(需scope為 snsapi_userinfo)

1. 配置網頁授權回撥域名
現在微信高階介面列表中並沒有-OAuth2.0 微信修改了配置地方
公共號設定=>功能設定=>網頁授權域名 的設定選項中,修改授權回撥域名
這裡寫圖片描述

!這裡寫圖片描述這裡寫圖片描述
這裡圖片弄的比較小,小夥伴們可以登入公共微訊號後臺自己看
關於網頁授權回撥域名的說明:

2. 使用者同意授權,獲取code

在確保微信公眾賬號擁有授權作用域(scope引數)的許可權的前提下(服務號獲得高階介面後,預設擁有scope引數中的snsapi_base和snsapi_userinfo),引導關注者開啟如下頁面:

redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

若提示“該連結無法訪問”,請檢查引數是否填寫錯誤,是否擁有scope引數對應的授權作用域許可權。

這裡寫圖片描述

這裡寫圖片描述

3. 通過code換取網頁授權access_token

首先請注意,這裡通過code換取的是一個特殊的網頁授權access_token,與基礎支援中的access_token(該access_token用於呼叫其他介面)不同。公眾號可通過下述介面來獲取網頁授權access_token。如果網頁授權的作用域為snsapi_base,則本步驟中獲取到網頁授權access_token的同時,也獲取到了openid,snsapi_base式的網頁授權流程即到此為止。
尤其注意:由於公眾號的secret和獲取到的access_token安全級別都非常高,必須只儲存在伺服器,不允許傳給客戶端。後續重新整理access_token、通過access_token獲取使用者資訊等步驟,也必須從伺服器發起。

這裡寫圖片描述這裡寫圖片描述

比如現在通過ID來讀取讀取資料庫資料,但是在專案中為了安全可能只是傳一個ID,大家更具專案需求來寫吧!

protected string toopenid { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
        DAL da = new DAL();
        var appid = string.Empty;
        var appsecret = string.Empty;
        var code = Request.QueryString["Code"];
        var ID= Request.QueryString["ID"];
        if (string.IsNullOrEmpty(code))  //在網頁授權之後會回撥該頁面 如果有值就不需要在去獲取code
        {
            if (!string.IsNullOrWhiteSpace(ID))
            {
                DataRow shopdataRow = da.GetAppID(ID);
                if (shopdataRow != null)
                {
                     appid = (String)shopdataRow["appid"];
                     Response.Redirect(BuildWebCodeUrl(appid, "http://www.xxxx.net/index.aspx?appid =" + appid, "snsapi_base",
                      "a-zA-Z0-9"));
                     //這步使用者同意授權,獲取code,獲取之後回調當我當前頁面
                     //大家有要問了為什麼這裡需要傳遞appID呢?這個appID是當我獲取完之後通過appID來查詢資料來獲取appsecret

                }

            }


        }
        else
        {
            if (!string.IsNullOrWhiteSpace(appid ))
            {
                DataRow shopdataRow = da.Getappsecret(appid );
                if (shopdataRow != null)
                {
                    appsecret = (String)shopdataRow["appsecret"];
                 }
            }
            //Post 這裡就是一個Post方法來獲取使用者的openid而已
            WebCredential theWebCredential = Post(appid, appsecret, code);

            toopenid = theWebCredential.openid;
          }

WeiXin.BuildWebCodeUrl:說明
///
/// 得到獲取code的Url
///
/// 公眾號的唯一標識
/// 授權後重定向的回撥連結地址,請使用urlencode對連結進行處理
/// 應用授權作用域,snsapi_base (不彈出授權頁面,直接跳轉,只能獲取使用者openid),snsapi_userinfo (彈出授權頁面,可通過openid拿到暱稱、性別、所在地。並且,即使在未關注的情況下,只要使用者授權,也能獲取其資訊)
/// 重定向後會帶上state引數,開發者可以填寫a-zA-Z0-9的引數值
///
public static string BuildWebCodeUrl(string appid, string redirect, string scope, string state = “”)
{

  return 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, redirect, scope, state);
 }

寫的不好,大家多原諒哈