日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

WeiXinMPSDK-微信C# SDK

發布時間:2023/12/25 综合教程 39 生活家
生活随笔 收集整理的這篇文章主要介紹了 WeiXinMPSDK-微信C# SDK 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

微信C# SDK

微信公眾號:Senparc.Weixin.MP.dll

微信企業號:Senparc.Weixin.QY.dl

微信開放平臺:Senparc.Weixin.Open.dll

本庫為.NET4.5,其他.NET版本請看各自分支。

已經支持所有微信6 API,包括自定義菜單/個性化菜單、模板信息接口、素材上傳接口、群發接口、多客服接口、支付接口、微小店接口、卡券接口等等。 > (同時由于易信的API目前與微信保持一致,此SDK也可以直接用于易信,如需使用易信的自定義菜單,通用接口改成易信的通訊地址即可)
已經支持用戶會話上下文(解決服務器無法使用Session處理用戶信息的問題)。
已經全面支持微信公眾號、企業號、開放平臺的最新API。
已經支持分布式緩存及緩存策略擴展。

目前官方的API都已完美集成,除非有特殊說明,所有升級都會盡量確保向下兼容,所以已經發布的版本請放心使用或直接升級(覆蓋)最新的Senparc.Weixin.MP.dll、Senparc.Weixin.QY.dll、Senparc.Weixin.Open.dll或Senparc.Weixin.dll。

如果需要使用或修改此項目的源代碼,建議先Fork。也歡迎將您修改的通用版本Pull Request過來。

資源

官網地址:http://weixin.senparc.com/
系列教程:http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html
微信技術交流社區:http://www.weiweihi.com/QA
自定義菜單在線編輯工具:http://weixin.senparc.com/Menu
在線消息測試工具:http://weixin.senparc.com/SimulateTool
緩存測試工具:http://weixin.senparc.com/Cache/Test
源代碼及最新更新:https://github.com/JeffreySu/WeiXinMPSDK

技術交流QQ群(目前未滿可加:3群、8群,其他群均已滿):

1群:300313885,2群:293958349,3群:342319110,4群:372212092

5群:377815480,6群:425898825,7群:482942254,8群:106230270

業務聯系QQ:498977166

新浪微博:@蘇震巍

如果這個項目對您有用,我們歡迎各方任何形式的捐助,也包括參與到項目代碼更新或意見反饋中來。謝謝!

資金捐助:進入主頁

關注測試賬號(SenparcRobot):

微信公眾平臺開發系列教程:http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html

項目文件夾說明

Senparc.Weixin.MP.BuildOutPut:所有最新版本DLL發布文件夾

Senparc.Weixin.MP.MvcExtension:Senparc.Weixin.MP.MvcExtension.dll源碼,為MVC4.0項目提供的擴展包。

Senparc.Weixin.MP.Sample:可以直接發布使用的Demo(ASP.NET MVC 4.0)

Senparc.Weixin.MP.Sample.WebForms:可以直接發布使用的Demo(ASP.NET WebForms)

Senparc.Weixin.MP:Senparc.Weixin.MP.dll 微信公眾賬號SDK源代碼

Senparc.Weixin.QY:Senparc.Weixin.QY.dll 微信企業號SDK源代碼

Senparc.Weixin.Open:Senparc.Weixin.Open.dll 第三方開放平臺SDK源代碼

Senparc.Wiexin:所有Senparc.Weixin.[x].dll 基礎類庫源代碼

Senparc.Weixin.MP.Sample中的關鍵代碼說明

注:這是MVC項目,WebForms項目見對應Demo中的Weixin.aspx。

/Controllers/WeixinController.cs

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

public readonly string Token = "weixin";

下面這個Action(Get)用于接收并返回微信后臺Url的驗證結果,無需改動。地址如: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(由微信服務器通過請求時的Url參數傳入),以及AppId、Token、EncodingAESKey等一系列內部敏感的信息(需要自行傳入)的實體類,同時也會在后面用到。

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

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

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

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

MessageHandler的處理流程非常簡單:

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

    postModel.Token = Token;
    postModel.EncodingAESKey = EncodingAESKey;//根據自己后臺的設置保持一致
    postModel.AppId = AppId;//根據自己后臺的設置保持一致

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

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

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

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

上述代碼中的CustomMessageHandler是一個自定義的類,繼承自Senparc.Weixin.MP.MessageHandler.cs。MessageHandler是一個抽象類,包含了執行各種不同請求類型的抽象方法(如文字,語音,位置、圖片等等),我們只需要在自己創建的CustomMessageHandler中逐個實現這些方法就可以了。剛建好的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)
        {
            var responseMessage = CreateResponseMessage<ResponseMessageText>();//ResponseMessageText也可以是News等其他類型
            responseMessage.Content = "這條消息來自DefaultResponseMessage。";
            return responseMessage;
        }

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

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

        //更多沒有重寫的OnXX方法,將默認返回DefaultResponseMessage中的結果。
        ....
    }
}

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

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

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

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

從v0.4.0開始,MessageHandler增加了對用戶會話上下文的支持,用于解決服務器上無法使用Session管理用戶會話的缺陷。詳見:用戶上下文WeixinContext和MessageContext

使用Nuget安裝到項目中

地址:https://www.nuget.org/packages/Senparc.Weixin.MP

命令:

PM> Install-Package Senparc.Weixin.MP

如何處理微信企業號請求?

Senparc.Weixin.QY.dll對企業號相關功能進行了封裝,操作過程和微信公眾賬號SDK(Senparc.Weixin.MP)保持了一致。

Nuget對應地址為:https://www.nuget.org/packages/Senparc.Weixin.QY

如何處理微開放平臺請求?

Senparc.Weixin.Open.dll對目前所有的開放平臺API進行了封裝,消息處理過程和微信公眾賬號SDK(Senparc.Weixin.MP)保持了一致,其他一些特殊的消息流程請先閱讀官方的文檔,然后對照Senparc.Weixin.MP.Sample中有關Open的Demo進行開發。

Nuget對應地址為:https://www.nuget.org/packages/Senparc.Weixin.Open

總結

以上是生活随笔為你收集整理的WeiXinMPSDK-微信C# SDK的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。