ASP.NET MVC5+EF6+EasyUI 后台管理系統(70)-微信公眾平台開發-成為開發者


系列目錄

前言:

一、閱讀這段系列之前,你必須花半天時間大致閱讀微信公眾平台的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. 成為開發者
  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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM