1、閱讀這段系列以前,你必須花半天時間大體閱讀微信公衆平臺的API文檔,我儘可能以簡短快速的語言與你們分享一個過程html
2、藉助微信公衆平臺SDK Senparc.Weixin for C#,因此你必須對Senparc進行獨立的瞭解 http://weixin.senparc.com/瀏覽器
3、若是配置遇到困難,下載文章尾部源碼進行參考服務器
---------------------------------------------------資源----------------------------------------------------------微信
1.微信公衆平臺登陸地址:https://mp.weixin.qq.com/app
2.註冊爲公衆帳號後,會讓你選擇類型,類型分三種:訂閱號(我是我的只能選擇這個)、服務號、企業微信公衆平臺
三個類型接口開放程度不一樣,咱們做爲開發者,沒必要理會什麼接口,只要成爲開發者,所有高級接口均可以調用工具
3.登陸後 成爲開發者 post
4. SDK Senparc.Weixin封裝了微信6.x的全部高級接口支持微信公衆號、企業號、開放平臺、微信支付、JSSDK測試
登陸測試號後,能夠看到一些配置,公開的接口,及說明,大體瀏覽全部接口名稱以後。能夠總結出:微信支付
1.開發環境利用appID,appsecret來得到Token
2.咱們利用拿到的Token來訪問提供的接口,如:修改菜單,發送信息
3.咱們提供咱們的服務器地址給微信,關注者經過微信服務器中轉站訪問咱們的開發環境得到消息
VS2015+MVC5
能夠看到系統分配了一個AppID(應用ID)和
其餘的須要咱們手動填寫服務器配置並啓用開發者模式: URL地址,Token令牌,EncodingAESKey消息加密密鑰
除了URL,咱們均可以隨便填寫,那麼URL是什麼?
圖上的URL是咱們的資源服務器,資源服務器是給微信中轉的服務器,微信將對這個接口(咱們的站點)進行Get和POST的請求。
查看官方接入文檔,咱們來建立一個資源服務器,嘗試交互
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319&token=&lang=zh_CN
開發者提交信息後,微信服務器將發送GET請求到填寫的服務器地址URL上,GET請求攜帶參數以下表所示:
參數 | 描述 |
signature | 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。 |
timestamp | 時間戳 |
nonce | 隨機數 |
echostr | 隨機字符串 |
開發者經過檢驗signature對請求進行校驗(下面有校驗方式)。若確認這次GET請求來自微信服務器,請原樣返回echostr參數內容,則接入生效,成爲開發者成功,不然接入失敗。加密/校驗流程以下:
1)將token、timestamp、nonce三個參數進行字典序排序 2)將三個參數字符串拼接成一個字符串進行sha1加密 3)開發者得到加密後的字符串可與signature對比,標識該請求來源於微信 |
Install-Package Senparc.Weixin.MP
安裝完成再再安裝一個MVC的擴展包
Install-Package Senparc.Weixin.MP.MVC
控制器包含一個GET和Post的請求,Get是驗證使用,Post是微信提交信息使用,好比關注者發送信息
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Web; using System.Web.Configuration; using System.Web.Mvc; using Senparc.Weixin.MP.Entities.Request; using Senparc.Weixin.MP.MvcExtension; using Senparc.Weixin.MP; using Apps.Web.Areas.WC.Core; namespace Apps.Web.Areas.WC.Controllers { public class WeChatController : Controller { public static readonly string Token ="WeixinToken";//與微信公衆帳號後臺的Token設置保持一致,區分大小寫。 public static readonly string EncodingAESKey = "dEq1BjMgmkEyOvva8pQfFwX95hBLOYKpAzBJ5y9pdSK";//與微信公衆帳號後臺的EncodingAESKey設置保持一致,區分大小寫。 public static readonly string AppId = "wx3.......f5";//與微信公衆帳號後臺的AppId設置保持一致,區分大小寫。 // GET: WC/WeChat public ActionResult Index() { return View(); } [HttpGet] [ActionName("Index")] public Task<ActionResult> Get(string signature, string timestamp, string nonce, string echostr) { return Task.Factory.StartNew(() => { if (CheckSignature.Check(signature, timestamp, nonce, Token)) { return echostr; //返回隨機字符串則表示驗證經過 } else { return "failed:" + signature + "," + CheckSignature.GetSignature(timestamp, nonce, Token) + "。" + "若是你在瀏覽器中看到這句話,說明此地址能夠被做爲微信公衆帳號後臺的Url,請注意保持Token一致。"; } }).ContinueWith<ActionResult>(task => Content(task.Result)); } /// <summary> /// 最簡化的處理流程 /// </summary> [HttpPost] [ActionName("Index")] public Task<ActionResult> Post(PostModel postModel) { return Task.Factory.StartNew<ActionResult>(() => { if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token)) { return new WeixinResult("參數錯誤!"); } postModel.Token = Token; postModel.EncodingAESKey = EncodingAESKey; //根據本身後臺的設置保持一致 postModel.AppId = AppId; //根據本身後臺的設置保持一致 var messageHandler = new CustomMessageHandler(Request.InputStream, postModel, 10); messageHandler.Execute(); //執行微信處理過程 return new FixWeixinBugWeixinResult(messageHandler); }).ContinueWith<ActionResult>(task => task.Result); } } }
(代碼中的方法CustomMessageHandler)且看做者的解析:http://www.cnblogs.com/szw/p/3414862.html
咱們先設置固定的三個值:
Token ="WeixinToken";//與微信公衆帳號後臺的Token設置保持一致,區分大小寫。
EncodingAESKey = "dEq1BjMgmkEyOvva8pQfFwX95hBLOYKpAzBJ5y9pdSK";//與微信公衆帳號後臺的EncodingAESKey設置保持一致,區分大小寫。
AppId = "wx3.......f5";//與微信公衆帳號後臺的AppId設置保持一致,區分大小寫。
這幾個值要和上面的相互對應起來才能!到此,咱們的服務器資源就完成了,能夠看到Senparc.Weixin SDK,幫咱們完成不少不少的東西,咱們根本不須要作什麼。
此次咱們上一篇文章,環境準備就派上用場了,咱們把剛剛新建的MVC發佈到本地的IIS!而後利用內網穿透,得到外網訪問
當你的運行與我同樣時候,證實這個地址是能夠做爲資源服務器的,其實就是廢話,咱們從頭至尾就只建立了一個控制器,加了以下代碼,讓控制器,可以支持一個GET和POST的Action方法而已。
把URL配置到微信裏面
點擊菜單:
點擊開發者工具,拉到中間位置能夠看到,這個測試公衆號的二維碼,用手機掃一下關注一下
關注以後給他發送一個信息!
若是發送信息後公衆號提示:該公衆號暫時沒法提供服務,請稍後再試
那麼要檢查配置的APPID已經TOKEN是否一致,我剛開始就是由於配置錯了,覺得代碼出錯,調試了大半天!
(若是你掃我上面哪一個二維碼,那麼你必定會獲得紅色那句話)
但願本文能給你們帶來一些啓發,咱們開發者是如何與微信交流的。
同時也可見開源SDK Senparc的強大!什麼都幫咱們作好了,咱們須要關心的只有咱們的業務。
若是你在動手配置過程遇到什麼困難,那麼下載示例源碼來進行參考
https://yunpan.cn/cMMwK2VAhMxS7 訪問密碼 b477