C#開發微信公衆號-學習筆記

因爲最近要作微信服務號的開發,因此開始找相關說明和接口文檔開始學,故把學習過程及注意事項記錄一下,幫助想學習的快速上手.廢話很少少了,直接上乾貨!api

1.申請微信公衆號數組

  這個就不須要多說了吧,你們直接照着提示步驟走就行服務器

2.創建服務器和微信端的連接微信

  這一步的操做其實就是確認一下你的公衆號跟你的服務器匹配成功了,所要作的工做其實很簡單,就是微信會給你的服務器發一個請求,傳過去幾個參數,而後你把其中的timestamp,nonce參數獲取到,在把你在微信設置服務器的頁面填寫的token這三個值按字典排序以後拼接到一塊兒去跟傳過來的signature參數值對比,若是一致則證實匹配成功!字典排序當時不知道啥意思,其實很簡單就是把這三個值放在數組中,而後把他們按字符串排序就行,而後把排序後的三個值拼在一塊兒,中間不加東西,而後再進行shar1加密以後把全部字符都轉爲小寫就ok了,他的機制實際上是有問題的,由於他須要你回傳回去他傳過來的echostr參數值,也就是說你就算什麼也不處理,直接把獲取到的echostr回傳回去也是能夠驗證經過的.代碼我貼下來供參考:app

protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                string token = "ll2017";
                string timestamp = string.Empty;
                string nonce = string.Empty;
                string echostr = string.Empty;
                string signature = string.Empty;
                if (!string.IsNullOrEmpty(Request.Params["timestamp"]))
                {
                    timestamp = Request.Params["timestamp"];
                }
                if (!string.IsNullOrEmpty(Request.Params["signature"]))
                {
                    signature = Request.Params["signature"];
                }
                if (!string.IsNullOrEmpty(Request.Params["nonce"]))
                {
                    nonce = Request.Params["nonce"];
                }
                if (!string.IsNullOrEmpty(Request.Params["echostr"]))
                {
                    echostr = Request.Params["echostr"];
                }

                string[] strs = { token, timestamp, nonce };
                Array.Sort(strs);     //字典排序

                string str = string.Join("", strs);
                str = SHA1(str, System.Text.UTF8Encoding.UTF8);
                str = str.ToLower();

                if (str.Equals(signature))
                {
                    Response.Clear();
                    Response.Write(echostr);
                    Response.End();
                }
            }
        }

        /// <summary>  
        /// SHA1 加密,返回大寫字符串  
        /// </summary>  
        /// <param name="content">須要加密字符串</param>  
        /// <param name="encode">指定加密編碼</param>  
        /// <returns>返回40位大寫字符串</returns>  
        public static string SHA1(string content, Encoding encode)
        {
            try
            {
                SHA1 sha1 = new SHA1CryptoServiceProvider();
                byte[] bytes_in = encode.GetBytes(content);
                byte[] bytes_out = sha1.ComputeHash(bytes_in);
                sha1.Dispose();
                string result = BitConverter.ToString(bytes_out);
                result = result.Replace("-", "");
                return result;
            }
            catch (Exception ex)
            {
                throw new Exception("SHA1加密出錯:" + ex.Message);
            }
        }  
View Code

3.如今連接創建好了,就須要咱們進行公衆號開發了,首先咱們能夠咱們申請的公衆號的appid和appsecret兩個值根據微信提供的接口獲取到access_token,這個access_token後邊會一直用到,基本與接口的交互都須要傳這個參數.ide

https請求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

4.獲取到access_token,就能夠爲咱們的公衆號添加菜單了,他是分爲兩級菜單的,以及菜單最多支持三個,沒個菜單中文描述不得大於4個漢子字符也就是八個英文字符,每一個一級菜單最多能夠有5個二級菜單.二級菜單最多7個漢字
,多出來的部分將會以「...」代替.建立自定義菜單後,菜單的刷新策略是,在用戶進入公衆號會話頁或公衆號profile頁時,若是發現上一次拉取菜單的請求在5分鐘之前,就會拉取一下菜單,若是菜單有更新,就會刷新客戶端的菜單。
測試時能夠嘗試取消關注公衆帳號後再次關注,則能夠看到建立後的效果。
自定義菜單接口可實現多種類型按鈕,以下:
一、click:點擊推事件用戶點擊click類型按鈕後,微信服務器會經過消息接口推送消息類型爲event的結構給開發者(參考消息接口指南),而且帶上按鈕中開發者填寫的key值,開發者能夠經過自定義的key值與用戶進行交互;
二、view:跳轉URL用戶點擊view類型按鈕後,微信客戶端將會打開開發者在按鈕中填寫的網頁URL,可與網頁受權獲取用戶基本信息接口結合,得到用戶基本信息。
三、scancode_push:掃碼推事件用戶點擊按鈕後,微信客戶端將調起掃一掃工具,完成掃碼操做後顯示掃描結果(若是是URL,將進入URL),且會將掃碼的結果傳給開發者,開發者能夠下發消息。
四、scancode_waitmsg:掃碼推事件且彈出「消息接收中」提示框用戶點擊按鈕後,微信客戶端將調起掃一掃工具,完成掃碼操做後,將掃碼的結果傳給開發者,同時收起掃一掃工具,而後彈出「消息接收中」提示框,隨後可能會收到開發者下發的消息。
五、pic_sysphoto:彈出系統拍照發圖用戶點擊按鈕後,微信客戶端將調起系統相機,完成拍照操做後,會將拍攝的相片發送給開發者,並推送事件給開發者,同時收起系統相機,隨後可能會收到開發者下發的消息。
六、pic_photo_or_album:彈出拍照或者相冊發圖用戶點擊按鈕後,微信客戶端將彈出選擇器供用戶選擇「拍照」或者「從手機相冊選擇」。用戶選擇後即走其餘兩種流程。
七、pic_weixin:彈出微信相冊發圖器用戶點擊按鈕後,微信客戶端將調起微信相冊,完成選擇操做後,將選擇的相片發送給開發者的服務器,並推送事件給開發者,同時收起相冊,隨後可能會收到開發者下發的消息。
八、location_select:彈出地理位置選擇器用戶點擊按鈕後,微信客戶端將調起地理位置選擇工具,完成選擇操做後,將選擇的地理位置發送給開發者的服務器,同時收起位置選擇工具,隨後可能會收到開發者下發的消息。
九、media_id:下發消息(除文本消息)用戶點擊media_id類型按鈕後,微信服務器會將開發者填寫的永久素材id對應的素材下發給用戶,永久素材類型能夠是圖片、音頻、視頻、圖文消息。請注意:永久素材id必須是在「素材管理/新增永久素材」接口上傳後得到的合法id。
十、view_limited:跳轉圖文消息URL用戶點擊view_limited類型按鈕後,微信客戶端將打開開發者在按鈕中填寫的永久素材id對應的圖文消息URL,永久素材類型只支持圖文消息。請注意:永久素材id必須是在「素材管理/新增永久素材」接口上傳後得到的合法id。

5.而後能夠根據微信提供的接口添加菜單了,根據前邊獲取到的access_token
http請求方式:POST(請使用https協議) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
 {
     "button":[
     {    
          "type":"click",
          "name":"今日歌曲",
          "key":"V1001_TODAY_MUSIC"
      },
      {
           "name":"菜單",
           "sub_button":[
           {    
               "type":"view",
               "name":"搜索",
               "url":"http://www.soso.com/"
            },
            {
                 "type":"miniprogram",
                 "name":"wxa",
                 "url":"http://mp.weixin.qq.com",
                 "appid":"wx286b93c14bbf93aa",
                 "pagepath":"pages/lunar/index"
             },
            {
               "type":"click",
               "name":"贊一下咱們",
               "key":"V1001_GOOD"
            }]
       }]
 }

 6.能夠根據view的url作登錄驗證,先說一下須要用戶手動確認的驗證工具

 https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect學習

其中redirect_uri是你要跳轉的頁面,這個頁面達到的效果如圖測試

點擊確認登錄後會跳轉到你redirect_uri填寫的頁面而且會給頁面傳兩個參數,code和status,這個code頗有用,咱們能夠根據這個code獲取微信用戶的openid編碼

7.根據獲取的code獲取微信用戶的openid,和一個access_token,此access_token非前邊的access_token,此處獲取的是網頁受權access_token

HTTPS://api.weixin.qq.com/sns/oauth2/access_token?appid=&secret=&code=&grant_type=authorization_code

 8.獲取到用戶的openid和網頁受權access_token就能夠獲取到微信用戶的基本信息,包括頭像,年齡,地區等

  HTTPS://api.weixin.qq.com/sns/userinfo?access_token=&openid=&lang=zh_CN

9.咱們就能夠根據獲取到的微信信息在咱們的系統中爲給微信用戶建立咱們系統的用戶了

相關文章
相關標籤/搜索