WeiXinMPSDK
微信全平台 .NET SDK, Senparc.Weixin for C#,支持 .NET Framework 及 .NET Core、.NET 10.0。已支持微信公众号、小程序、小游戏、微信支付、企业微信/企业号、开放平台、JSSDK、微信周边等全平台。 WeChat SDK for C#.
Install / Use
/learn @JeffreySu/WeiXinMPSDKREADME
Senparc.Weixin —— 微信 .NET SDK
📈 Senparc.Weixin SDK 是目前使用率最高的微信 .NET SDK,也是国内最受欢迎的 .NET 开源项目之一。本项目已持续维护超过 12 年,助力大量系统和应用取得成功。我们将继续保持更新,并正在深度融合 AI 场景应用,示例正在逐步上线。欢迎加入我们的社区 👐
使用 Senparc.Weixin,您可以方便快速地开发微信全平台的应用(包括微信公众号、小程序、小游戏、企业号、开放平台、微信支付、JS-SDK、微信硬件/蓝牙,等等)。本项目的 Demo 同样适合初学者进行 .NET 编程学习。
目前 Senparc.Weixin 已经支持几乎所有微信平台模块和接口,并同时支持 .NET 3.5 / 4.0 / 4.5 / .NET Standard 2.x / .NET Core 2.x / .NET Core 3.x / .NET 6.0 / .NET 7.0 / .NET 8.0 / .NET 10.0 等多种框架,同时兼容所有 MVC、Razor、WebApi、Console(命令行)、桌面应用(.exe)、Blazor、MAUI、后台服务等环境,和外部框架完全解耦。<br>
自 2013 年起立项 12 年多来,我们一直保持着项目的持续更新,并将完整的源代码以及设计思想毫无保留地分享给大家,希望有更多的人可以从中受益,理解并传播开源的精神,一同助力中国开源事业!感恩一路上给我们提供帮助的朋友们!
如果你喜欢并希望我们继续优化这个项目,请给我们一个 ★Star :)
🔔 公告
<!-- > 📺 <img src="https://github.com/JeffreySu/WeiXinMPSDK/assets/2281927/743f3019-c96b-4b61-acdb-d1834947d5d0" width="400" /><br /> 在 2024 微软 MVP 全球峰会上有幸采访到 Scott Hanselman,并交流了一部分有关 AI 的话题,我们将会在 2024 年 4 月 13 日的“盛派 3.14 技术开放日”活动上再次进行对话,深入交流关于 AI 和 Agent 对未来软件行业以及开源软件的影响,欢迎大家关注<br/>-->[!TIP] 🥇 盛派开发者社区 2025-2026 年度贡献者榜单<br> ⚡ .NET 10 正式版已发布,最新 Sample for .NET 10(向下兼容), 在线 Sample:https://sdk.weixin.senparc.com/<br> 🔥 AI 聊天机器人微信集成 Sample 已上线!查看<br> 🎬
Scott Hansleman 关于 AI 话题的专访查看视频<br/>
<!-- _1. 为了将 Demo 和源代码隔离,并让大家更方便地找到 Demo,现已将 Senparc.Weixin.MP.Sample 等文件夹转移到 [/Samples/](/Samples/) 文件夹下。_<br> --> <!-- _2. `Senparc.Weixin.Plugins`计划已经启动,详情 [点击这里](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Plugins)。_ -->[!NOTE] 🔒 微信支付 V3 模块(V1.0)已上线!Nuget<br> 🎠 全面支持长文本自动分片发送,更多:《顺应 GenAI 应用,自动“续航”回复超长文本消息》<br/>
🌟 Start:分模块独立说明文档 + Sample 代码示例
模块 | 地址 ----|---- 公众号 | https://sdk.weixin.senparc.com/Docs/MP/ 小程序 | https://sdk.weixin.senparc.com/Docs/WxOpen/ 企业微信 | https://sdk.weixin.senparc.com/Docs/Work/ 微信支付 V3(推荐) | https://sdk.weixin.senparc.com/Docs/TenPayV3/ 微信支付 V2(不推荐) | https://sdk.weixin.senparc.com/Docs/TenPayV2/
[!NOTE] 1、上述分模块示例中,同时包含了文档及可以立即运行的代码模板(只需要配置微信参数,无需修改任何代码)。<br> 2、示例中的配置、注册、接口调用方法均一致,只要学会其中一个模块开发,就可以举一反三。以下的 Hello World 示例也以公众号为例,可以延伸到所有其他模块。<br> 3、/docs 目录中提供了更完整的开发说明文档,供进阶开发使用,点击查看。 <br> 4、对应于微信不同平台,Senparc.Weixin SDK 已经将各模块解耦并独立发布,为了简化引用,您也可以直接引用 Senparc.Weixin.All,自动引用所有模块。
🚀 Hello World :用 3 句代码开启你的微信开发之旅!
[!NOTE] 1、下述源码位于
/Samples/MP/Senparc.Weixin.Sample.MP文件夹,以微信公众号为例。学会公众号就可以举一反三使用其他模块,基本用法一致(小程序、企业微信、微信支付等)。<br> 2、如需查看其他模块或集成示例,可以查看位于/Samples/文件夹下的其他独立 Sample,或/Samples/All/文件夹下的集成 Sample(进阶)。
启动代码(只需 2 句代码):
1、 <strong>在 Program.cs 的 builder.Build() 上方添加配置:</strong>
builder.Services.AddSenparcWeixinServices(builder.Configuration);
如果您使用的是旧格式的 Startup.cs 文件,上述代码对应于 Startup.cs 的 ConfigureServices() 方法内。
2、 <strong>在 Program.cs 的 builder.Build() 下方启用配置:</strong>
var registerService = app.UseSenparcWeixin(app.Environment, null, null, register => { },
(register, weixinSetting) =>
{
//注册公众号信息(可以执行多次,注册多个公众号)
register.RegisterMpAccount(weixinSetting, "【盛派网络小助手】公众号");
});
- 如果您使用的是旧格式的 Startup.cs 文件,上述代码对应于 Startup.cs 的 Configure() 方法内。
- 如果您希望系统自动注册所有配置好的账号,只需上述方法最后追加一个
autoRegisterAllPlatforms: true的设置即可(需要引用Senparc.Weixin.All包):var registerService = app.UseSenparcWeixin(app.Environment, null, null, register => { }, (register, weixinSetting) => { /* 无需手动注册 */ }, autoRegisterAllPlatforms: true /* 自动注册所有平台 */ );
调用高级接口(只需 1 句代码):
可在程序任意位置调用接口(以客服接口为例):
await CustomApi.SendTextAsync("AppId", "OpenId", "Hello World!");
[!TIP]
- Senparc.Weixin SDK 将全生命周期自动托管 AccessToken,因此开发过程只需提供 AppId,无需操心 AccessToken 过期等问题。<br>
- AppId 等注册信息可从
Senparc.Weixin.Config.SenparcWeixinSetting中自动获取,相关参数在appsettings.json中配置。<br>- 以上方法也支持同步方法:
Senparc.Weixin.MP.AdvancedAPIs.CustomApi.SendText()。<br>- 所有接口命名空间均参照官方 API 路径规则定义,且参数命名方式尽量与文档保持一致(特别是返回参数),以方便开发者在源码中快速查找定位、提升测试效率、降低 bug 发生的可能性。
[!TIP] 至此,您已经可以举一反三调用所有微信模块的接口啦!解锁更多技能请继续往下看。
如何使用公众号消息对话能力?
公众号默认提供了对话窗口,可以发送文字、图片、语音等不同类型的信息和程序互动。
以下示例同样适用于企业微信和小程序客服消息的对话,只需两步!
第一步:创建自定义 MessageHandler 负责控制消息处理逻辑:
<details> <summary>CustomMessageHandler.cs</summary>using Senparc.NeuChar.Entities;
using Senparc.Weixin.MP.Entities;
using Senparc.Weixin.MP.Entities.Request;
using Senparc.Weixin.MP.MessageContexts;
using Senparc.Weixin.MP.MessageHandlers;
namespace Senparc.Weixin.Sample.MP
{
/// <summary>
/// 自定义MessageHandler
/// 把MessageHandler作为基类,重写对应请求的处理方法
/// </summary>
public partial class CustomMessageHandler : MessageHandler<DefaultMpMessageContext>
{
public CustomMessageHandler(Stream inputStream, PostModel postModel, int maxRecordCount = 0,
bool onlyAllowEncryptMessage = false, IServiceProvider serviceProvider = null)
: base(inputStream, postModel, maxRecordCount, onlyAllowEncryptMessage, null, serviceProvider)
{
}
/// <summary>
/// 所有未处理类型的默认消息
/// </summary>
/// <returns></returns>
public override IResponseMessageBase DefaultResponseMessa
