


Senparc.Weixin.MP SDK 微信公眾平臺(tái)開(kāi)發(fā)教學(xué)(三):微信大眾平臺(tái)開(kāi)發(fā)驗(yàn)證
Feb 22, 2017 pm 03:34 PM? ? 要對(duì)接微信公眾平臺(tái)的"開(kāi)發(fā)模式",即對(duì)接到自己的網(wǎng)站程序,必須在註冊(cè)成功之後(見(jiàn)Senparc.Weixin.MP SDK?微信公眾平臺(tái)開(kāi)發(fā)教程(一):微信公眾平臺(tái)註冊(cè)),等待官方審核,審核通過(guò)之後,會(huì)在後臺(tái)頂部出現(xiàn)「進(jìn)階功能」選單。
? ? 使用「進(jìn)階功能」>「開(kāi)發(fā)模式」之前,必須有一個(gè)已經(jīng)部署在Internet上,可以用80埠訪問(wèn)的網(wǎng)站(網(wǎng)域名稱或IP存取都可以),一些開(kāi)發(fā)的準(zhǔn)備工作見(jiàn)文章:Senparc.Weixin.MP SDK?微信公眾平臺(tái)開(kāi)發(fā)教學(xué)課程(二):成為開(kāi)發(fā)者
? ? 首次進(jìn)入「進(jìn)階功能」後介面如下:
#? ? 我們看到預(yù)設(shè)情況下,“編輯模式”是開(kāi)啟的,要使用“開(kāi)發(fā)模式”,必須先關(guān)閉“編輯模式”。
? ? 點(diǎn)選進(jìn)入編輯模式。如下圖:
? ? 點(diǎn)選右上角的滑桿,關(guān)閉「編輯功能」。
? ?接著回到“進(jìn)階功能”,進(jìn)入“開(kāi)發(fā)模式”,如下圖:
? ? 進(jìn)入開(kāi)發(fā)模式後,我們需要設(shè)定與微信伺服器通訊的Url,以及只有我們自己知道的Token(千萬(wàn)不可洩露)。
? ? 官方已經(jīng)提供了一個(gè)PHP版本的範(fàn)例:http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.zip,你也可以根據(jù)官方API的說(shuō)明用自己的語(yǔ)言編寫(xiě)。
? ? 在Senparc.Weixin.MP的開(kāi)源專案中,我們也提供了ASP.NET MVC和ASP.NET Web Forms兩種可以直接部署的Demo:https://github.com/JeffreySu/WeiXinMPSDK
? ? 在提交的時(shí)候,微信伺服器會(huì)對(duì)填寫(xiě)的URL,使用Token進(jìn)行一次Get方式請(qǐng)求的驗(yàn)證,如果順利通過(guò),則保存成功,如果不通過(guò),會(huì)給予錯(cuò)誤訊息,並且所填寫(xiě)的資訊是無(wú)法儲(chǔ)存的。
? ? 為了更直觀地示範(fàn)這個(gè)URL對(duì)應(yīng)的程式中,應(yīng)高包含哪些必要元素,我在這裡給出Senparc.Weixin.MP的實(shí)作方法(我會(huì)分別以MVC和WebForms為例):
方法一:使用MVC
? ? 1、建立一個(gè)Controller,如WeixinController.cs,引用Senparc.Weixin.MP.dll(using Senparc.Weixin.MP.dll),最新的DLL見(jiàn)開(kāi)源專案的Senparc.Weixin.MP.BuildOutPut資料夾https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Senparc.Weixin.MP.BuildOutPut
? ? 2、設(shè)定私有變數(shù)(當(dāng)然你也可以保存在資料庫(kù)中),如:
public readonly string Token = "weixin";//與微信公眾賬號(hào)后臺(tái)的Token設(shè)置保持一致,區(qū)分大小寫(xiě)。
? ? 3、建立一個(gè)名稱為Index,用於Get請(qǐng)求的Action,如:
/// <summary> /// 微信后臺(tái)驗(yàn)證地址(使用Get),微信后臺(tái)的“接口配置信息”的Url填寫(xiě)如:http://m.miracleart.cn/ /// </summary> [HttpGet] [ActionName("Index")] public ActionResult Get(string signature, string timestamp, string nonce, string echostr) { if (CheckSignature.Check(signature, timestamp, nonce, Token)) { return Content(echostr); //返回隨機(jī)字符串則表示驗(yàn)證通過(guò) } else { return Content("failed:" + signature + "," + MP.CheckSignature.GetSignature(timestamp, nonce, Token)+"。如果您在瀏覽器中看到這條信息,表明此Url可以填入微信后臺(tái)。"); } }
至此,這些程式碼編譯後依照要求部署到網(wǎng)站上,並且在「介面設(shè)定資訊」中填入http://m.miracleart.cn/,Token填寫(xiě)weixin。
? ? 上述程式碼完整的WeixinController.cs可以看這裡。
方法二:使用Web Forms
? ? Web Forms的驗(yàn)證過(guò)程和MVC是一樣的,只是寫(xiě)法上有點(diǎn)差別,這裡直接給出程式碼(也要using Senparc.Weixin.MP. dll),假設(shè)檔案名稱為根目錄下weixin.aspx:
public partial class Weixin : System.Web.UI.Page { private readonly string Token = "weixin";//與微信公眾賬號(hào)后臺(tái)的Token設(shè)置保持一致,區(qū)分大小寫(xiě)。 protected void Page_Load(object sender, EventArgs e) { string signature = Request["signature"]; string timestamp = Request["timestamp"]; string nonce = Request["nonce"]; string echostr = Request["echostr"]; if (Request.HttpMethod == "GET") { //get method - 僅在微信后臺(tái)填寫(xiě)URL驗(yàn)證時(shí)觸發(fā) if (CheckSignature.Check(signature, timestamp, nonce, Token)) { WriteContent(echostr); //返回隨機(jī)字符串則表示驗(yàn)證通過(guò) } else { WriteContent("failed:" + signature + "," + CheckSignature.GetSignature(timestamp, nonce, Token)); } } else { //判斷Post或其他方式請(qǐng)求 } Response.End(); } private void WriteContent(string str) { Response.Output.Write(str); } }
依照上面的程式碼,在「介面設(shè)定資訊」中,Url應(yīng)填入http://YourDomain/weixin.aspx,Token應(yīng)填入weixin。
? ? 上述weixin.aspx.cs完整程式碼看這裡(當(dāng)然你也可以寫(xiě)成ashx進(jìn)一步提高效率)。
? ??
? ??CheckSignature.Check()方法是Senparc.Weixin.MP SDK中一個(gè)驗(yàn)證請(qǐng)求的方法,已經(jīng)做了封裝。這裡直接使用是為了簡(jiǎn)化程式碼突出重點(diǎn),有興趣的朋友可以直接看原始碼。
? ? 用上述MVC和Web Forms兩種方法的任一種,已經(jīng)可以讓後臺(tái)驗(yàn)證通過(guò)。但要注意,光有Get的方法,尚不能與微信用戶發(fā)來(lái)的信息通訊,因?yàn)橥高^(guò)前面的教程我們知道,微信後臺(tái)的Url是透過(guò)Get方式請(qǐng)求,而微信客戶端的請(qǐng)求是由Post方式請(qǐng)求的,關(guān)於Post的方法,我會(huì)在後面的教學(xué)中詳細(xì)說(shuō)明。
? ? 並且,在目前的設(shè)定狀態(tài)下,即便你寫(xiě)了Post相關(guān)的方法,通過(guò)驗(yàn)證之後也不表示你的伺服器已經(jīng)可以接收到微信伺服器的訊息了,還有最後一步:手動(dòng)開(kāi)啟“開(kāi)發(fā)者模式”:
? ? 現(xiàn)在這個(gè)微信帳號(hào)已經(jīng)成功切換到了“開(kāi)發(fā)者模式”,所有微信客戶端發(fā)送到該公眾帳號(hào)的訊息,都將轉(zhuǎn)發(fā)到剛才填寫(xiě)的Url。
? ? 下一篇我們將介紹如何使用最「粗礦」的方式回應(yīng)客戶端的發(fā)來(lái)的Post請(qǐng)求。
? ? 在了解了「粗礦」方法之後,我們會(huì)正式進(jìn)入「精緻」和「簡(jiǎn)潔」的Senparc.Weixin.MP SDK的方法。
更多Senparc.Weixin.MP SDK 微信公眾平臺(tái)開(kāi)發(fā)教學(xué)(三):微信大眾平臺(tái)開(kāi)發(fā)驗(yàn)證?相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)
