ASP.NET MVC5+EF6+EasyUI 後臺管理系統(70)-微信公衆平臺開發-成爲開發者

系列目錄

前言:

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

知識點:

  1. 成爲開發者
  2. 資源服務器

開始:

 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

相關文章
相關標籤/搜索