日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

項目介紹

您可以方便快速地開發(fā)微信全平臺的應(yīng)用(包括微信公眾號、小程序、小游戲、企業(yè)號、開放平臺、微信支付、JS-SDK、微信硬件/藍牙,等等)。本項目的 Demo 同樣適合初學(xué)者進行 .NET 編程學(xué)習(xí)。

 

.net支持

.NET Framework 3.5

.NET Framework 4.0

.NET Framework 4.5.1

.NET Standard 2.0 / 2.1

.NET Core 2.x / 3.x

.NET 5.0 / .NET 6.0

 

功能介紹

  • 已經(jīng)支持大部分微信 8.x API,包括微信支付、自定義菜單/個性化菜單、模板信息接口、素材上傳接口、群發(fā)接口、多客服接口、支付接口、微小店接口、卡券接口、發(fā)票接口等等。
  • 已支持微信公眾號、小程序、企業(yè)號、開放平臺等各個模塊。
  • 已經(jīng)支持用戶會話上下文(解決服務(wù)器無法使用 Session 處理用戶信息的問題)。
  • 已經(jīng)全面支持微信公眾號、小程序、企業(yè)號(企業(yè)微信)、微信支付V2/V3、開放平臺的最新 API。
  • 已經(jīng)支持分布式緩存及緩存策略擴展(默認(rèn)支持:本地緩存、redis、Memcached,可自由擴展)。

目前官方的 API 都已完美集成,除非有特殊說明,所有升級都會盡量確保向下兼容,所以已經(jīng)發(fā)布的版本請放心使用或直接升級(覆蓋)最新的 dll,Release生成目錄,建議使用 Nuget 進行更新。

Senparc.Weixin.MP.Sample 中的關(guān)鍵代碼說明

注:這是 MVC 項目,WebForms項 目見對應(yīng) Demo 中的 Weixin.aspx。

/Controllers/WeixinController.cs

下面的Token需要和微信公眾平臺后臺設(shè)置的Token同步,如果經(jīng)常更換建議寫入Web.config等配置文件(實際使用過程中兩列建議使用數(shù)字+英文大小寫改寫Token,Token一旦被破解,微信請求將很容易被偽造!):

public readonly string Token = "weixin";

下面這個Action(Get)用于接收并返回微信后臺Url的驗證結(jié)果,無需改動。地址如:http://domain/Weixin 或 http://domain/Weixin/Index

/// <summary>
/// 微信后臺驗證地址(使用Get),微信后臺的“接口配置信息”的Url填寫如:http://weixin.senparc.com/weixin
/// </summary>
[HttpGet]
[ActionName("Index")]
public ActionResult Get(PostModel postModel, string echostr)
{
    if (CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token))
    {
        return Content(echostr); //返回隨機字符串則表示驗證通過
    }
    else
    {
        return Content("failed:" + postModel.Signature + "," 
            + MP.CheckSignature.GetSignature(postModel.Timestamp, postModel.Nonce, Token) + "。" +
            "如果你在瀏覽器中看到這句話,說明此地址可以被作為微信公眾賬號后臺的Url,請注意保持Token一致。");
    }
}

上述方法中的PostModel是一個包括了了Signature、Timestamp、Nonce(由微信服務(wù)器通過請求時的Url參數(shù)傳入),以及AppId、Token、EncodingAESKey等一系列內(nèi)部敏感的信息(需要自行傳入)的實體類,同時也會在后面用到。

下面這個Action(Post)用于接收來自微信服務(wù)器的Post請求(通常由用戶發(fā)起),這里的if必不可少,之前的Get只提供微信后臺保存Url時的驗證,每次Post必須重新驗證,否則很容易偽造請求。

/// <summary>
/// 用戶發(fā)送消息后,微信平臺自動Post一個請求到這里,并等待響應(yīng)XML
/// </summary>
[HttpPost]
[ActionName("Index")]
public ActionResult Post(PostModel postModel)
{
    if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token))
    {
        return Content("參數(shù)錯誤!");
    }
    ...
}

如何處理微信公眾賬號請求?

Senparc.Weixin.MP提供了2中處理請求的方式,傳統(tǒng)方法及使用MessageHandler處理方法(推薦)。上面兩個方法在wiki中已經(jīng)有比較詳細的說明,這里簡單舉例MessageHandler的處理方法。

MessageHandler的處理流程非常簡單:

[HttpPost]
[ActionName("Index")]
public ActionResult Post(PostModel postModel)
{
    if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token))
    {
        return Content("參數(shù)錯誤!");
    }

    postModel.Token = Token;
    postModel.EncodingAESKey = EncodingAESKey;//根據(jù)自己后臺的設(shè)置保持一致
    postModel.AppId = AppId;//根據(jù)自己后臺的設(shè)置保持一致

    var messageHandler = new CustomMessageHandler(Request.InputStream, postModel);//接收消息(第一步)

    messageHandler.Execute();//執(zhí)行微信處理過程(第二步)

    return new FixWeixinBugWeixinResult(messageHandler);//返回(第三步)
}

整個消息除了postModel的賦值以外,接收(第一步)、處理(第二步)、返回(第三步)分別只需要一行代碼。

上述代碼中的CustomMessageHandler是一個自定義的類,繼承自Senparc.Weixin.MP.MessageHandler.cs。MessageHandler是一個抽象類,包含了執(zhí)行各種不同請求類型的抽象方法(如文字,語音,位置、圖片等等),我們只需要在自己創(chuàng)建的CustomMessageHandler中逐個實現(xiàn)這些方法就可以了。剛建好的CustomMessageHandler.cs如下:

using System;
using System.IO;
using Senparc.Weixin.MP.MessageHandlers;
using Senparc.Weixin.MP.Entities;

namespace Senparc.Weixin.MP.Sample.CustomerMessageHandler
{
    public class CustomMessageHandler : MessageHandler<MessageContext>
    {
        public public CustomMessageHandler(Stream inputStream, PostModel postModel, int maxRecordCount = 0)
            : base(inputStream, postModel, maxRecordCount)
        {

        }

        public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
        {
            //ResponseMessageText也可以是News等其他類型
            var responseMessage = CreateResponseMessage<ResponseMessageText>();
            responseMessage.Content = "這條消息來自DefaultResponseMessage。";
            return responseMessage;
        }

        public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
        {
            //...
        }

        public override IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage)
        {
            //...
        }

        //更多沒有重寫的OnXX方法,將默認(rèn)返回DefaultResponseMessage中的結(jié)果。
        ....
    }
}

其中OnTextRequest、OnVoiceRequest等分別對應(yīng)了接收文字、語音等不同的請求類型。

比如我們需要對文字類型請求做出回應(yīng),只需要完善OnTextRequest方法:

      public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
      {
          //TODO:這里的邏輯可以交給Service處理具體信息,參考OnLocationRequest方法或/Service/LocationSercice.cs
          var responseMessage = CreateResponseMessage<ResponseMessageText>();
          responseMessage.Content = string.Format("您剛才發(fā)送了文字信息:{0}", requestMessage.Content);
          return responseMessage;
      }

這樣CustomMessageHandler在執(zhí)行messageHandler.Execute()的時候,如果發(fā)現(xiàn)請求信息的類型是文本,會自動調(diào)用以上代碼,并返回代碼中的responseMessage作為返回信息。responseMessage可以是IResponseMessageBase接口下的任何類型(包括文字、新聞、多媒體等格式)。

分享到:
標(biāo)簽:net
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定