国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

  • <li id="oygua"></li>
    <thead id="oygua"></thead>

    Rumah applet WeChat pembangunan WeChat 從源代碼中帶你解析微信開發(fā)

    從源代碼中帶你解析微信開發(fā)

    May 05, 2017 am 10:49 AM

      這兩天項(xiàng)目需要在微信上面開一個(gè)接口,就研究了一下,過程很艱難,結(jié)果很理想,下面我就介紹一下微信開發(fā)需要注意的地方。

    1,賬號(hào)問題

      /* 首先說第一個(gè)你得選擇公眾平臺(tái)(開放平臺(tái)貌似是做應(yīng)用集成的,這個(gè)沒有仔細(xì)研究,如果有誰了解,希望告訴我一聲),在公眾平臺(tái)我們需要注冊(cè)賬號(hào),賬號(hào)還分兩種,個(gè)人類型和企業(yè)類型,其中個(gè)人類型的只能申請(qǐng)訂閱號(hào),而企業(yè)類型的才可以搞到服務(wù)號(hào),訂閱號(hào)只能手工或者配置一些關(guān)鍵詞去做事情,服務(wù)號(hào)才能部署一些智能的東東,需要高級(jí)開發(fā)權(quán)限只能是服務(wù)號(hào),所以如果你是個(gè)人,想要針對(duì)用戶發(fā)過來的消息去回復(fù)不同的內(nèi)容,洗洗睡吧。 */

      搞開發(fā)的都知道上面那段話的意思,是的,我給注釋了,我今天在登陸訂閱號(hào)的時(shí)候,發(fā)現(xiàn)訂閱號(hào)也有高級(jí)功能的,可能我那個(gè)時(shí)候沒有通過審核吧,OK,不妨礙下面的分享。

    2,開發(fā)模式

      很簡(jiǎn)單,當(dāng)你拿到你的服務(wù)賬號(hào)的時(shí)候,你會(huì)發(fā)現(xiàn),在功能中有個(gè)高級(jí)功能(在訂閱賬號(hào)里面是沒有高級(jí)功能這個(gè)選項(xiàng)的),之后你可以選擇開通哪種方式。目前開發(fā)和編輯只能啟動(dòng)一個(gè)。

    3,配置服務(wù)器

      微信接口只有一個(gè)URL,任何數(shù)據(jù)都是通過這個(gè)URL和你的服務(wù)器進(jìn)行連接的(GET或者POST)都需要走這個(gè)接口,下面會(huì)說說兩個(gè)用到的地方。

    4,驗(yàn)證服務(wù)器

      在填寫你的服務(wù)器URL之后,微信會(huì)帶上幾個(gè)參數(shù)去訪問你的URL,你只需要返回特定的數(shù)據(jù)就OK了,具體方法也可以查看此鏈接:http://mp.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97

      在連接中有部分php的代碼可以參考,下面我將我的代碼貼一下,在這邊我走了很多彎路,所以我盡量貼的全一點(diǎn)

     1         /// <summary> 2         /// 驗(yàn)證微信簽名 3         /// </summary> 4         /// <param name="sigNature">微信加密簽名,signature結(jié)合了開發(fā)者填寫的token參數(shù)和請(qǐng)求中的timestamp參數(shù)、nonce參數(shù)。</param> 5         /// <param name="timestamp">時(shí)間戳</param> 6         /// <param name="nonce">隨機(jī)數(shù)</param> 7         /// <param name="echoStr">隨機(jī)字符串</param> 8         /// <returns>開發(fā)者通過檢驗(yàn)signature對(duì)請(qǐng)求進(jìn)行校驗(yàn)(下面有校驗(yàn)方式)。若確認(rèn)此次GET請(qǐng)求來自微信服務(wù)器,請(qǐng)?jiān)瓨臃祷豦chostr參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。</returns> 9         [System.Web.Http.AcceptVerbs("GET")]10         [System.Web.Http.ActionName("Api")]11         [ApiExplorerSettings(IgnoreApi = false)]12         public HttpResponseMessage CheckSignature(string sigNature, string timestamp, string nonce, string echoStr)13         {14             var content =15                    string.Format("SigNature:{0}\nTimestamp:{1}\nNonce:{2}\nEchoStr:{3}",16                                  sigNature, timestamp, nonce, echoStr);17             logger.Debug(content);    // 此處的log你可以刪掉18 19             var list = new string[] { timestamp, nonce, TOKEN };20             Array.Sort(list);21             var tmpArr = string.Join("", list);22             var tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpArr, "SHA1").ToLower();23 24             if (tmpStr == sigNature && !string.IsNullOrEmpty(echoStr))     //根據(jù)微信的驗(yàn)證規(guī)則做判斷25                 return Tools.GetReturn(echoStr);26 27             return Tools.GetReturn("error");28         }

      之所以寫了GetReturn這個(gè)函數(shù)是因?yàn)?a href="http://www.miracleart.cn/wiki/1536.html" target="_blank">MVC給我的結(jié)果封裝了,每次我返回一個(gè)字符串的時(shí)候他都會(huì)在外層添加一對(duì)引號(hào),微信還傻不愣登的不認(rèn)識(shí)。。。。這個(gè)函數(shù)主要就是給我去除MVC封裝的

    1      public static HttpResponseMessage GetReturn(string message)2         {3             return new HttpResponseMessage4                 {5                     Content = new StringContent(message, Encoding.UTF8, "text/html")6                 };7         }

      上面的CheckSignature是一個(gè)GET的接口,主要就是驗(yàn)證微信服務(wù)的,當(dāng)然,你仔細(xì)研究下微信說的也可以發(fā)現(xiàn),當(dāng)你收到echoStr的時(shí)候,直接return其實(shí)就OK了,不必多出驗(yàn)證的步驟。

    5,消息接收接口

      我只關(guān)注了一個(gè)功能,當(dāng)用戶發(fā)送消息的時(shí)候我要回復(fù)用戶消息,而且只關(guān)注文本消息就OK了(其實(shí)別的類型的消息原理都差不多)。

      我們需要注意這邊的幾點(diǎn):

      a,此接口的ActionName和上面驗(yàn)證的接口是一樣的,這樣,他們?cè)谕饷嬖L問就是相同的URL,只是訪問的Method不同罷了。

    1         [System.Web.Http.AcceptVerbs("POST")]2         [System.Web.Http.ActionName("Api")]3         [ApiExplorerSettings(IgnoreApi = false)]4         public HttpResponseMessage ReceiveMessage()

      b,這種獲取消息內(nèi)容的方法我也是研究了好久才找到的,費(fèi)死勁了。

    1   var message = Request.Content.ReadAsStringAsync().Result;

      c,在這個(gè)接口他POST過來很多的變量,我都用正則給他搞到了

    1             var toUserName = GetItemValue(message, ToUserNameReg);2             var fromUserName = GetItemValue(message, FromUserNameReg);3             var createTime = GetItemValue(message, CreateTimeReg);4             var msgType = GetItemValue(message, MsgTypeReg);5             var content = GetItemValue(message, ContentReg);6             var msgId = GetItemValue(message, MsgIdReg);7             var eventStr = GetItemValue(message, EventReg);8             var eventKey = GetItemValue(message, EventKeyReg);

      d,我只關(guān)注其中兩種類型的事件:event and text,event值得是關(guān)注和解除關(guān)注,在關(guān)注的時(shí)候要表示感謝不是;發(fā)過來的text,我需要找到回復(fù)的內(nèi)容。

                switch (msgType)
                {                case "text":
                        {
                        }                case "event":
                        {
                        }                default:                    return Tools.GetReturn("error");
                }

      e,全部代碼在這里:

    1         private static readonly Regex ToUserNameReg = new Regex(@"(?<=<ToUserName><!\[CDATA\[).*?(?=\]\]></ToUserName>)", RegexOptions.Compiled);2         private static readonly Regex FromUserNameReg = new Regex(@"(?<=<FromUserName><!\[CDATA\[).*?(?=\]\]></FromUserName>)", RegexOptions.Compiled);3         private static readonly Regex CreateTimeReg = new Regex(@"(?<=<CreateTime>)\d*?(?=</CreateTime>)", RegexOptions.Compiled);4         private static readonly Regex MsgTypeReg = new Regex(@"(?<=<MsgType><!\[CDATA\[).*?(?=\]\]></MsgType>)", RegexOptions.Compiled);5         private static readonly Regex ContentReg = new Regex(@"(?<=<Content><!\[CDATA\[).*?(?=\]\]></Content>)", RegexOptions.Compiled);6         private static readonly Regex MsgIdReg = new Regex(@"(?<=<MsgId>)\d*?(?=</MsgId>)", RegexOptions.Compiled);7         private static readonly Regex EventReg = new Regex(@"(?<=<Event><!\[CDATA\[).*?(?=\]\]></Event>)", RegexOptions.Compiled);8         private static readonly Regex EventKeyReg = new Regex(@"(?<=<EventKey><!\[CDATA\[).*?(?=\]\]></EventKey>)", RegexOptions.Compiled);
     1      /// <summary> 2         /// 接受微信消息,如果需要反饋,則調(diào)用回復(fù)接口進(jìn)行答復(fù) 3         /// </summary> 4         /// <param name="ToUserName">開發(fā)者微信號(hào)</param> 5         /// <param name="FromUserName">發(fā)送方帳號(hào)(一個(gè)OpenID)</param> 6         /// <param name="CreateTime">消息創(chuàng)建時(shí)間 (整型)</param> 7         /// <param name="MsgType">text</param> 8         /// <param name="Content">文本消息內(nèi)容</param> 9         /// <param name="MsgId">消息id,64位整型</param>10         /// <returns>successful or not</returns>11         [System.Web.Http.AcceptVerbs("POST")]12         [System.Web.Http.ActionName("Api")]13         [ApiExplorerSettings(IgnoreApi = false)]14         public HttpResponseMessage ReceiveMessage()15         {16             var message = Request.Content.ReadAsStringAsync().Result;17 18             var toUserName = GetItemValue(message, ToUserNameReg);19             var fromUserName = GetItemValue(message, FromUserNameReg);20             var createTime = GetItemValue(message, CreateTimeReg);21             var msgType = GetItemValue(message, MsgTypeReg);22             var content = GetItemValue(message, ContentReg);23             var msgId = GetItemValue(message, MsgIdReg);24             var eventStr = GetItemValue(message, EventReg);25             var eventKey = GetItemValue(message, EventKeyReg);26 27             var logStr = string.Format("Message:{8}\n\nToUserName:{0}\nFromUserName:{1}\nCreateTime:{2}\nMsgType:{3}\nContent:{4}\nMsgId:{5}\nEvent:{6}\nEventKey:{7}",28                         toUserName, fromUserName, createTime, msgType, content, msgId, eventStr, eventKey, message);29             logger.Debug(logStr);30 31             switch (msgType)32             {33                 case "text":34                     {35                         var returnMessage = Tools.GetCategory(content);  // 這塊是獲取反饋信息的方法,你的和我的應(yīng)該不一樣,所以這塊你得修改一下。36                         var sendMessage = GetSendMessage(fromUserName, returnMessage, toUserName);37                         logger.Debug("MsgId:" + msgId + Environment.NewLine + sendMessage);38 39                         return Tools.GetReturn(sendMessage);        // 這個(gè)函數(shù)在上面已經(jīng)貼出來了,在這塊就不在貼了40                     }41                 case "event":42                     {43                         if (eventStr == "subscribe")      // 關(guān)注事件44                         {45                             var returnMessage = "歡迎關(guān)注**賬號(hào) [微笑]";46                             var sendMessage = GetSendMessage(fromUserName, returnMessage, toUserName);47                             return Tools.GetReturn(sendMessage);48                         }49                         return Tools.GetReturn("error");50                     }51                 default:52                     return Tools.GetReturn("error");53             }54         }
     1      /// <summary> 2         /// 獲取消息體中正則所能匹配到的內(nèi)容 3         /// </summary> 4         /// <param name="message">消息內(nèi)容</param> 5         /// <param name="regex">正則</param> 6         /// <returns>返回正則匹配的所有內(nèi)容</returns> 7         [ApiExplorerSettings(IgnoreApi = true)] 8         private string GetItemValue(string message, Regex regex) 9         {10             if(regex.IsMatch(message))11                 return regex.Match(message).Value;12             return "";13         }
     1 /// <summary> 2         /// 發(fā)送被動(dòng)響應(yīng)消息 3         /// </summary> 4         /// <param name="ToUserName">接收方帳號(hào)(收到的OpenID)</param> 5         /// <param name="Content">回復(fù)的消息內(nèi)容(換行:在content中能夠換行,微信客戶端就支持換行顯示)</param> 6         /// <param name="FromUserName">開發(fā)者微信號(hào)</param> 7         /// <param name="CreateTime">消息創(chuàng)建時(shí)間 (整型)</param> 8         /// <param name="MsgType">text</param> 9         /// <returns></returns>10         [System.Web.Http.AcceptVerbs("POST")]11         [System.Web.Http.ActionName("GetSendMessage")]12         [ApiExplorerSettings(IgnoreApi = false)]13         public string GetSendMessage(string ToUserName, string Content, string FromUserName = Developer,14                                      string MsgType = "text")15         {16             var createTime = Tools.ConvertDateTimeToInt(DateTime.Now);17 18             return19                 string.Format(@"<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime><MsgType><![CDATA[{3}]]></MsgType><Content><![CDATA[{4}]]></Content></xml>", ToUserName, FromUserName, createTime, MsgType, Content);20         }

    【相關(guān)推薦】

    1. 微信公眾號(hào)平臺(tái)源碼下載

    2.?小豬CMS生活通O2O系統(tǒng)v2.0尊享版下載

    Atas ialah kandungan terperinci 從源代碼中帶你解析微信開發(fā). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

    Alat AI Hot

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    Video Face Swap

    Video Face Swap

    Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

    Alat panas

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma

    SublimeText3 versi Cina

    SublimeText3 versi Cina

    Versi Cina, sangat mudah digunakan

    Hantar Studio 13.0.1

    Hantar Studio 13.0.1

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    Dreamweaver CS6

    Dreamweaver CS6

    Alat pembangunan web visual

    SublimeText3 versi Mac

    SublimeText3 versi Mac

    Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

    Topik panas

    Tutorial PHP
    1502
    276
    Tutorial mengemas kini versi curl di bawah Linux! Tutorial mengemas kini versi curl di bawah Linux! Mar 07, 2024 am 08:30 AM

    Untuk mengemas kini versi curl di bawah Linux, anda boleh mengikuti langkah di bawah: Semak versi curl semasa: Pertama, anda perlu menentukan versi curl yang dipasang dalam sistem semasa. Buka terminal dan laksanakan arahan berikut: curl --version Perintah ini akan memaparkan maklumat versi curl semasa. Sahkan versi curl tersedia: Sebelum mengemas kini curl, anda perlu mengesahkan versi terkini yang tersedia. Anda boleh melawati tapak web rasmi curl (curl.haxx.se) atau sumber perisian yang berkaitan untuk mencari versi terkini curl. Muat turun kod sumber curl: Menggunakan curl atau penyemak imbas, muat turun fail kod sumber untuk versi curl pilihan anda (biasanya .tar.gz atau .tar.bz2

    Penerokaan mendalam tentang pengedaran kod sumber kernel Linux Penerokaan mendalam tentang pengedaran kod sumber kernel Linux Mar 15, 2024 am 10:21 AM

    Ini ialah artikel 1500 perkataan yang meneroka pengedaran kod sumber kernel Linux secara mendalam. Oleh kerana ruang yang terhad, kami akan menumpukan pada struktur organisasi kod sumber kernel Linux dan menyediakan beberapa contoh kod khusus untuk membantu pembaca memahami dengan lebih baik. Kernel Linux ialah kernel sistem pengendalian sumber terbuka yang kod sumbernya dihoskan pada GitHub. Keseluruhan pengedaran kod sumber kernel Linux adalah sangat besar, mengandungi ratusan ribu baris kod, melibatkan berbilang subsistem dan modul yang berbeza. Untuk mendapatkan pemahaman yang lebih mendalam tentang kod sumber kernel Linux

    Bagaimana untuk melihat kod sumber java Bagaimana untuk melihat kod sumber java Dec 27, 2023 pm 04:41 PM

    Lihat langkah: 1. Cari direktori pemasangan atau lihat dalam talian 2. Buka zip kod sumber 3. Gunakan editor teks atau persekitaran pembangunan bersepadu 4. Navigasi dan lihat kod sumber; Pengenalan terperinci: 1. Cari direktori pemasangan atau lihat dalam talian: Jika JDK dipasang, anda boleh mencari kod sumber Java dalam direktori pemasangan JDK. Dalam direktori pemasangan JDK, biasanya terdapat src.zip atau fail termampat yang serupa, yang mengandungi kod sumber pustaka kelas teras Java juga boleh melihat kod sumber Java dalam talian, dsb.

    Analisis laluan penyimpanan kod sumber kernel Linux Analisis laluan penyimpanan kod sumber kernel Linux Mar 14, 2024 am 11:45 AM

    Kernel Linux ialah kernel sistem pengendalian sumber terbuka yang kod sumbernya disimpan dalam repositori kod khusus. Dalam artikel ini, kami akan menganalisis laluan penyimpanan kod sumber kernel Linux secara terperinci dan menggunakan contoh kod khusus untuk membantu pembaca memahami dengan lebih baik. 1. Laluan penyimpanan kod sumber kernel Linux Kod sumber kernel Linux disimpan dalam repositori Git yang dipanggil linux, yang dihoskan di [https://github.com/torvalds/linux](http

    Bagaimana untuk melihat kod sumber Tomcat Bagaimana untuk melihat kod sumber Tomcat Jan 25, 2024 pm 01:56 PM

    Langkah-langkah untuk melihat kod sumber Tomcat: 1. Muat turun kod sumber Tomcat 2. Import kod sumber Tomcat dalam IDEA 3. Lihat kod sumber 4. Fahami prinsip kerja Tomcat 5. Sertai komuniti dan menyumbang ; 6. Langkah berjaga-jaga; 7. Belajar dan kemas kini secara berterusan 8. Gunakan alat dan pemalam. Pengenalan terperinci: 1. Untuk memuat turun kod sumber Tomcat, anda perlu terlebih dahulu mendapatkan kod sumber Tomcat Anda boleh memuat turun pakej kod sumber dari laman web rasmi Apache Tomcat, dsb.

    Pembangunan PHP WeChat: Bagaimana untuk melaksanakan penyulitan dan penyahsulitan mesej Pembangunan PHP WeChat: Bagaimana untuk melaksanakan penyulitan dan penyahsulitan mesej May 13, 2023 am 11:40 AM

    PHP ialah bahasa skrip sumber terbuka yang digunakan secara meluas dalam pembangunan web dan pengaturcaraan sisi pelayan, terutamanya dalam pembangunan WeChat. Hari ini, semakin banyak syarikat dan pembangun mula menggunakan PHP untuk pembangunan WeChat kerana ia telah menjadi bahasa pembangunan yang benar-benar mudah dipelajari dan mudah digunakan. Dalam pembangunan WeChat, penyulitan dan penyahsulitan mesej merupakan isu yang sangat penting kerana ia melibatkan keselamatan data. Untuk mesej tanpa kaedah penyulitan dan penyahsulitan, penggodam boleh mendapatkan data dengan mudah, menimbulkan ancaman kepada pengguna.

    Bagaimanakah anda boleh memahami prinsip reka bentuk dan matlamat di sebalik spesifikasi kod PHP terkini dengan membaca kod sumbernya? Bagaimanakah anda boleh memahami prinsip reka bentuk dan matlamat di sebalik spesifikasi kod PHP terkini dengan membaca kod sumbernya? Sep 05, 2023 pm 02:46 PM

    Bagaimanakah anda boleh memahami prinsip reka bentuk dan matlamat di sebalik spesifikasi kod PHP terkini dengan membaca kod sumbernya? Pengenalan: Apabila menulis kod PHP berkualiti tinggi, adalah sangat penting untuk mengikuti piawaian pengekodan tertentu. Melalui spesifikasi kod, kebolehbacaan, kebolehselenggaraan dan kebolehskalaan kod boleh dipertingkatkan. Untuk bahasa PHP, terdapat spesifikasi kod yang diterima pakai secara meluas, iaitu PSR (PHPStandardsRecommendations). Artikel ini akan memperkenalkan cara membaca kod sumber spesifikasi kod PHP terkini

    Apakah akhiran kod sumber java? Apakah akhiran kod sumber java? Dec 27, 2023 pm 04:31 PM

    Di Java, akhiran untuk fail kod sumber biasanya .java. Semasa menulis program Java, fail kod sumber dengan akhiran .java dicipta, yang mengandungi kod sumber Java. Contohnya, fail kod sumber Java yang ringkas boleh dinamakan MyClass.java, dengan MyClass ialah nama kelas dan .java ialah akhiran bagi fail tersebut.

    See all articles