系列目錄
前言:
一、閱讀這段系列之前,你必須花半天時間大致閱讀微信公眾平台的API文檔,我盡量以簡短快速的語言與大家分享一個過程
二、借助微信公眾平台SDK Senparc.Weixin for C#,所以你必須對Senparc進行獨立的了解 http://weixin.senparc.com/
三、如果配置遇到困難,下載文章尾部源碼進行參考
---------------------------------------------------資源----------------------------------------------------------
1.微信公眾平台登錄地址:https://mp.weixin.qq.com/
2.注冊為公眾賬號后,會讓你選擇類型,類型分三種:訂閱號(我是個人只能選擇這個)、服務號、企業
三個類型接口開放程度不同,我們作為開發者,不必理會什么接口,只要成為開發者,全部高級接口都可以調用
3.登錄后 成為開發者
4. SDK Senparc.Weixin封裝了微信6.x的所有高級接口支持微信公眾號、企業號、開放平台、微信支付、JSSDK
配置:
登錄測試號后,可以看到一些配置,公開的接口,及說明,大致瀏覽所有接口名稱之后。可以總結出:
1.開發環境利用appID,appsecret來獲得Token
2.我們利用拿到的Token來訪問提供的接口,如:修改菜單,發送信息
3.我們提供我們的服務器地址給微信,關注者通過微信服務器中轉站訪問我們的開發環境獲得消息
開發環境:
VS2015+MVC5
知識點:
- 成為開發者
- 資源服務器
開始:
1.登錄微信公眾號(左邊菜單下邊位置)
可以看到系統分配了一個AppID(應用ID)和
其他的需要我們手動填寫服務器配置並啟用開發者模式: URL地址,Token令牌,EncodingAESKey消息加密密鑰
除了URL,我們都可以隨便填寫,那么URL是什么?
2.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對比,標識該請求來源於微信 |
3.創建資源服務器
1.新建一個Asp.Net MVC站點(不演示創建站點)
2.安裝Senparc.Weixin.MP庫
Install-Package Senparc.Weixin.MP
安裝完成再再安裝一個MVC的擴展包
Install-Package Senparc.Weixin.MP.MVC
3.新建一個WeChat控制器
控制器包含一個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,幫我們完成很多很多的東西,我們根本不需要做什么。
4.發布站點
這次我們上一篇文章,環境准備就派上用場了,我們把剛剛新建的MVC發布到本地的IIS!然后利用內網穿透,獲得外網訪問
當你的運行與我一樣時候,證明這個地址是可以作為資源服務器的,其實就是廢話,我們從頭到尾就只創建了一個控制器,加了如下代碼,讓控制器,能夠支持一個GET和POST的Action方法而已。
5.發條微信試下(把服務器URL配回到微信公眾號里面來)
把URL配置到微信里面
點擊菜單:
點擊開發者工具,拉到中間位置可以看到,這個測試公眾號的二維碼,用手機掃一下關注一下
關注之后給他發送一個信息!
6.服務器返回信息
如果發送信息后公眾號提示:該公眾號暫時無法提供服務,請稍后再試
那么要檢查配置的APPID已經TOKEN是否一致,我剛開始就是因為配置錯了,以為代碼出錯,調試了大半天!
(如果你掃我上面哪個二維碼,那么你一定會得到紅色那句話)
總結:
希望本文能給大家帶來一些啟發,我們開發者是如何與微信交流的。
同時也可見開源SDK Senparc的強大!什么都幫我們做好了,我們需要關心的只有我們的業務。
如果你在動手配置過程遇到什么困難,那么下載示例源碼來進行參考
https://yunpan.cn/cMMwK2VAhMxS7 訪問密碼 b477