Giter VIP home page Giter VIP logo

jeffreysu / weixinmpsdk Goto Github PK

View Code? Open in Web Editor NEW
8.3K 644.0 4.3K 148.5 MB

微信全平台 SDK Senparc.Weixin for C#,支持 .NET Framework 及 .NET Core、.NET 6.0、.NET 8.0。已支持微信公众号、小程序、小游戏、微信支付、企业微信/企业号、开放平台、JSSDK、微信周边等全平台。 WeChat SDK for C#.

Home Page: https://weixin.senparc.com

License: Apache License 2.0

C# 97.62% JavaScript 2.38% HTML 0.01%
wechat wechat-sdk c-sharp sdk nuget redis memcached cache senparc weixin

weixinmpsdk's Introduction

Senparc.Weixin —— 微信 .NET SDK

Build status NuGet GitHub commit activity the past week, 4 weeks, year Static Badge license

Senparc.Weixin Senparc.Weixin.MP Senparc.Weixin.MP.Middleware Senparc.Weixin.MP.Mvc Senparc.Weixin.WxOpen Senparc.Weixin.WxOpen.Middleware Senparc.Weixin.Work Senparc.Weixin.Work.Middleware Senparc.Weixin.TenPay Senparc.Weixin.TenPayV3 Senparc.Weixin.Open Senparc.Weixin.AspNet Senparc.Weixin.Cache.Redis Senparc.Weixin.Cache.CsRedis Senparc.Weixin.Cache.Memcached Senparc.WebSocket

[English Version]

使用 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 等多种框架,同时兼容所有 MVC、Razor、WebApi、Console(命令行)、桌面应用(.exe)、Blazor、MAUI、后台服务等环境,和外部框架完全解耦。

Senparc.Weixin SDK 是目前使用率最高的微信 .NET SDK,也是国内最受欢迎的 .NET 开源项目之一。

自 2013 年起立项 10 年多来,我们一直保持着项目的持续更新,并将完整的源代码以及设计**毫无保留地分享给大家,希望有更多的人可以从中受益,理解并传播开源的精神,一同助力**开源事业!感恩一路上给我们提供帮助的朋友们!

如果你喜欢并希望我们继续优化这个项目,请给我们一个 ★Star :)

🔔 公告


在 2024 微软 MVP 全球峰会上有幸采访到 Scott Hanselman,并交流了一部分有关 AI 的话题,我们将会在 2024 年 4 月 13 日的“盛派 3.14 技术开放日”活动上再次进行对话,深入交流关于 AI 和 Agent 对未来软件行业以及开源软件的影响,欢迎大家关注!查看视频
⚡ Sample 已支持 .NET 8.0(向下兼容),点击这里查看
🔒 微信支付 V3 模块(V1.0)已上线!Nuget
🎠 全面支持长文本自动分片发送,更多:《顺应 AIGC 应用,自动“续航”回复超长文本消息》

🌟 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/

说明:
1、上述分模块示例中,同时包含了文档及可以立即运行的代码模板(只需要配置微信参数,无需修改任何代码)。 1、示例中的配置、注册、接口调用方法均一致,只要学会其中一个模块开发,就可以举一反三。以下的 Hello World 示例也以公众号为例,可以延伸到所有其他模块。
2、/docs 目录中提供了更完整的开发说明文档,供进阶开发使用,点击查看

🚀 Hello World :用 3 句代码开启你的微信开发之旅!

说明:
1、下述源码位于 /Samples/MP/ 文件夹,以微信公众号为例。学会公众号就可以举一反三使用其他模块,基本用法一致(小程序、企业微信、微信支付等)。
2、如需查看其他模块或集成示例,可以查看位于 /Samples/ 文件夹下的其他独立 Sample,或 /Samples/All/ 文件夹下的集成 Sample(进阶)。

启动代码(只需 2 句代码):

1、 在 Program.cs 的 builder.Build() 上方添加配置:

builder.Services.AddSenparcWeixinServices(builder.Configuration);

对应于 Startup.cs 的 ConfigureServices() 方法内。

2、 在 Program.cs 的 builder.Build() 下方启用配置:

var registerService = app.UseSenparcWeixin(app.Environment, null, null, register => { },
    (register, weixinSetting) =>
{
    //注册公众号信息(可以执行多次,注册多个公众号)
    register.RegisterMpAccount(weixinSetting, "【盛派网络小助手】公众号");
});

对应于 Startup.cs 的 Configure() 方法内。

调用高级接口(只需 1 句代码):

可在程序任意位置调用接口(以客服接口为例):

await CustomApi.SendTextAsync("AppId", "OpenId", "Hello World!");

提示:

  1. Senparc.Weixin SDK 将全生命周期自动托管 AccessToken,因此开发过程只需提供 AppId,无需操心 AccessToken 过期等问题。
  2. AppId 等注册信息可从 Senparc.Weixin.Config.SenparcWeixinSetting 中自动获取,相关参数在 appsettings.json 中配置。
  3. 以上方法也支持同步方法:Senparc.Weixin.MP.AdvancedAPIs.CustomApi.SendText() 。
  4. 所有接口命名空间均参照官方 API 路径规则定义,且参数命名方式尽量与文档保持一致(特别是返回参数),以方便开发者在源码中快速查找定位、提升测试效率、降低 bug 发生的可能性。

至此,您已经可以举一反三调用所有微信模块的接口啦!更多技能请继续往下看。

如何使用公众号消息对话能力?

公众号默认提供了对话窗口,可以发送文字、图片、语音等不同类型的信息和程序互动。

以下示例同样适用于企业微信和小程序客服消息的对话,只需两步!

第一步:创建自定义 MessageHandler 负责控制消息处理逻辑:

CustomMessageHandler.cs
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 DefaultResponseMessage(IRequestMessageBase requestMessage)
        {
            //ResponseMessageText也可以是News等其他类型
            var responseMessage = this.CreateResponseMessage<ResponseMessageText>();
            responseMessage.Content = $"你发送了一条消息,但程序没有指定处理过程";
            return responseMessage;
        }

        public override Task<IResponseMessageBase> OnImageRequestAsync(RequestMessageImage requestMessage)
        {
            //处理图片请求...
        }

        public override Task<IResponseMessageBase> OnLocationRequestAsync(RequestMessageLocation requestMessage)
        {
            //处理地理位置请求...
        }
    }
}

第二步:请求 CustomMessageHandler:

我们提供了 中间件(推荐)和 Controller(或WebApi) 两种方式请求 CustomMessageHandler,您可以任选其一。以中间件为例,在 Program.cs 中启用配置后添加代码,注册 MessageHandler:

app.UseMessageHandlerForMp("/WeixinAsync",
    (stream, postModel, maxRecordCount, serviceProvider)
        => new CustomMessageHandler(stream, postModel, maxRecordCount, false, serviceProvider),
    options 
        =>
    {
        options.AccountSettingFunc = context => Senparc.Weixin.Config.SenparcWeixinSetting;
    });

此时,您已经可以使用 https://YourDomain/WeixinAsync 在微信公众号后台【设置与开发】>【基本配置】> 服务器地址(URL) 中进行配置,对应 Token 在 appsettings.json 中设置(同样适用于企业微信和小程序,请参考对应 Sample)。

此外,您还可以使用 Controller(或 WebApi) 方式可以对整个消息处理步骤进行更加细致的控制(或在 .NET Framework 中使用),点击这里查看

至此,您已经掌握了开发微信各平台所需要的基本技能,更多资源请继续往下看:

📇 更多介绍索引

本库包含了 .NET Framework/.NET Standard 2.0+/.NET Core 3.1/.NET 6/.NET 7/.NET 8 等多个版本的源代码(核心逻辑完全一致):

🏹 各模块类库

# 模块功能 DLL Nuget 支持 .NET 版本
1 基础库 Senparc.Weixin.dll Senparc.Weixin
Senparc.Weixin
.NET 4.5 .NET Standard 2.0/2.1 .NET 5.0 / 6.0 / 7.0 / 8.0
2 微信公众号 /
JSSDK / 摇周边
等等
Senparc.Weixin.MP.dll MP
MP
.NET 4.5 .NET Standard 2.0/2.1 .NET 5.0 / 6.0 / 7.0 / 8.0
3 微信小程序
(支持小游戏)
(独立项目)
Senparc.Weixin.WxOpen.dll WxOpen
WxOpen
.NET 4.5 .NET Standard 2.0/2.1 .NET 5.0 / 6.0 / 7.0 / 8.0
4 微信支付 Senparc.Weixin.TenPay.dll TenPay
TenPay
.NET 4.5 .NET Standard 2.0/2.1 .NET 5.0 / 6.0 / 7.0 / 8.0
5 微信支付 V3 Senparc.Weixin.TenPayV3.dll TenPayV3
TenPay
.NET 4.5 .NET Standard 2.0/2.1 .NET 5.0 / 6.0 / 7.0 / 8.0
6 ASP.NET MVC 扩展
Senparc.Weixin.MP.MVC.dll         MP.MVC
Mvc
.NET 4.5 .NET Standard 2.0/2.1 .NET 5.0 / 6.0 / 7.0 / 8.0
7 微信企业号 Senparc.Weixin.QY.dll QY
QY
.NET 4.5 .NET Standard 2.0/2.1 .NET 5.0 / 6.0 / 7.0 / 8.0
9 企业微信 Senparc.Weixin.Work.dll Work
Work
.NET 4.5 .NET Standard 2.0/2.1 .NET 5.0 / 6.0 / 7.0 / 8.0
9 微信开放平台 Senparc.Weixin.Open.dll Open
Open
.NET 4.5 .NET Standard 2.0/2.1 .NET 5.0 / 6.0 / 7.0 / 8.0
10 Redis 分布式缓存 Senparc.Weixin.Cache.
Redis.dll
Cache.Redis
Redis
.NET 4.5 .NET Standard 2.0/2.1 .NET 5.0 / 6.0 / 7.0 / 8.0
11 Memcached
分布式缓存
Senparc.Weixin.Cache.
Memcached.dll
Cache.Memcached
MC
.NET 4.5 .NET Standard 2.0/2.1 .NET 5.0 / 6.0 / 7.0 / 8.0
12 WebSocket
(独立项目)
 
Senparc.WebSocket.dll Senparc.WebSocket
WebSocket
.NET 4.5 .NET Standard 2.0/2.1 .NET 5.0 / 6.0 / 7.0 / 8.0

图例

.NET 4.6 .NET Standard 2.x .NET 5.0 / 6.0 / 7.0 / 8.0
.NET Framework 4.6.2+ .NET Standard 2.0 / 2.1 .NET 8.0,向下兼容 .NET 5.0-7.0

提示:

  1. 自 2019 年 5 月 1 日起,.NET Framework 3.5 及 4.0 停止更新,最后一个 .NET Framework 3.5 + 4.0 稳定版点击这里
  2. 自 2022 年 4 月 3 日起,.NET Framework 4.5 升级为 4.6.2,最后一个 .NET Framework 4.5 的稳定版点击这里
  3. 如果您还在使用 .NET Framework,建议您在 2027 年 1 月 12 日之间,将 .NET Framework 应用升级至 .NET Framework 4.8+,彼时官方将停止对 .NET Framework 4.6.2 的支持(查看)。

功能支持

  • 已经支持大部分微信 8.x API,包括微信支付、自定义菜单/个性化菜单、模板信息接口、素材上传接口、群发接口、多客服接口、支付接口、微小店接口、卡券接口、发票接口等等。
  • 已支持微信公众号、小程序、企业号、开放平台、微信支付等各个模块。
  • 已经支持用户会话上下文(解决服务器无法使用 Session 处理用户信息的问题)。
  • 已经全面支持微信公众号、小程序、企业号(企业微信)、微信支付V2/V3、开放平台的最新 API。
  • 已经支持分布式缓存及缓存策略扩展(默认支持:本地缓存、Redis、Memcached,可自由扩展),开发过程无需关心所使用缓存的类型,可在配置文件或运行过程中自由切换。

1.目前官方的 API 都已完美集成,除非有特殊说明,所有升级都会尽量确保向下兼容,所以已经发布的版本请放心使用或直接升级(覆盖)最新的 dll,建议使用 Nuget 进行更新。
2. 您也可以自行修改并编译代码,打开 Senparc.Weixin.Sample.Net6.slnSenparc.Weixin.Sample.Net8.sln 解决方案即可看到所有源码。当编译模式为 Release 时,将自动生成本地 Nuget 包(默认生成到 /src/BuildOutPut/ 文件夹下)。

💾 源码项目文件夹说明(src文件夹下)

展开
文件夹 说明
Senparc.WebSocket WebSocket 模块
Senparc.Weixin.Cache Senparc.Weixin.Cache.Memcached.dll 、 Senparc.Weixin.Cache.Redis.dll 等分布式缓存扩展方案
Senparc.Weixin.AspNet Senparc.Weixin.AspNet.dll 专为 Web 提供支撑的类库
Senparc.Weixin.MP.MvcExtension Senparc.Weixin.MP.MvcExtension.dll源码,为 MVC 项目提供的扩展包
Senparc.Weixin.MP Senparc.Weixin.MP.dll 微信公众账号SDK源代码
Senparc.Weixin.MP.Middleware Senparc.Weixin.MP.Middleware.dll 微信公众账号消息中间件源代码
Senparc.Weixin.Open Senparc.Weixin.Open.dll 第三方开放平台SDK源代码
Senparc.Weixin.TenPay Senparc.Weixin.TenPay.dll & Senparc.Weixin.TenPayV3.dll 包含微信支付 V2V3 的源代码
Senparc.Weixin.Work Senparc.Weixin.Work.dll 企业微信SDK源代码
Senparc.Weixin.Work.Middleware Senparc.Weixin.Work.Middleware.dll 企业微信消息中间件源代码
Senparc.Weixin.WxOpen Senparc.Weixin.WxOpen.dll 微信小程序SDK源代码,包括小游戏
Senparc.Weixin.WxOpen.Middleware Senparc.Weixin.WxOpen.Middleware.dll 微信小程序消息中间件源代码,包括小游戏
Senparc.Weixin 所有Senparc.Weixin.[x].dll 基础类库源代码

进入文件夹

🖥️ Samples 文件夹说明(Samples文件夹下)

Senparc.Weixin SDK 所有的模块的用法都保持了高度的一致,包括配置过程、AccessToken 管理、消息处理、服务消息、接口调用,等等。您只需参考任意一个模块的用法(推荐从公众号小程序开始),就可以举一反三使用其他模块。

从以下 Sample 中您可以了解到每个独立模块的配置和使用方式,直接打开对应文件夹下的 .sln 解决方案即可查看对应源码,运行即可看到说明文档。其中 All 文件夹中包含了更多综合和进阶功能的演示。

文件夹 说明 SDK 引用方式
MP 公众号 Nuget 包
TenPayV2 微信支付 V1 和 V2 Nuget 包
TenPayV3 微信支付 V3(TenPay APIv3) Nuget 包
Work 企业微信 Nuget 包
WxOpen 微信小程序 Nuget 包
Shared 所有 Sample 都需要用到的共享文件
All 包含微信公众号、小程序、微信支付、企业微信等所有功能的混合场景演示,
推荐用于集成多个平台的项目,或许要进行深度开发的场景参考(进阶)
All/console 命令行 Console Demo(.NET Core) Nuget 包
All/net45-mvc 可以直接发布使用的Demo(.NET Framework 4.5 + ASP.NET MVC) Nuget 包
All/net6-mvc 可以直接发布使用的 Demo(.NET 6.0),兼容 .NET 5.0 和 .NET Core 源码
All/net7-mvc 可以直接发布使用的 Demo(.NET 7.0),兼容 .NET 5.0、6.0 和 .NET Core 源码
All/net8-mvc 可以直接发布使用的 Demo(.NET 8.0),兼容 .NET 5.0、6.0、7.0 和 .NET Core 源码

进入 Samples 文件夹

🎨 资源

  1. 官网地址:https://weixin.senparc.com/
  2. 在线 Demo 地址(.NET 8.0,向下兼容 .NET 6.0、7.0 和 .NET Core):https://sdk.weixin.senparc.com/
  3. 微信开发系列教程:https://www.cnblogs.com/szw/p/weixin-course-index.html
  4. 微信技术交流社区:https://weixin.senparc.com/QA
  5. 自定义菜单在线编辑工具:https://sdk.weixin.senparc.com/Menu
  6. 在线消息测试工具:https://sdk.weixin.senparc.com/SimulateTool
  7. 缓存测试工具:https://sdk.weixin.senparc.com/Cache/Test
  8. chm帮助文档下载:https://sdk.weixin.senparc.com/Document
  9. 源代码及最新更新:https://github.com/JeffreySu/WeiXinMPSDK
  10. 微信开发资源集合:https://github.com/JeffreySu/WeixinResource
  11. 《微信开发深度解析》阅读辅助系统:https://book.weixin.senparc.com
  12. 购买《微信开发深度解析》:https://item.jd.com/12220004.html
  13. 《微信公众号 + 小程序快速开发》视频教程:https://github.com/JeffreySu/WechatVideoCourse
  • 技术交流QQ群:

1群(公众号):300313885
14群(视频课程学员群):588231256
10群(分布式缓存群):246860933
12群(微信小程序):108830388
16群(开放平台):860626938
以下群已满:
2群:293958349(已满),3群:342319110(已满)
4群:372212092(已满), 5群:377815480(已满),6群:425898825(已满)
7群:482942254(已满),8群:106230270(已满),9群:539061281(已满)
11群:553198593(已满),13群:183424136(开放平台,已满),15群:289181996(已满)

  • 业务联系QQ:498977166

如果这个项目对您有用,我们欢迎各方任何形式的捐助,也包括参与到项目代码更新或意见反馈中来。谢谢!

资金捐助:进入

📖 Senparc 官方图书教程

由 Jeffrey Su 和盛派团队耗时 2 年完成的微信开发图书已经出版,书名:《微信开发深度解析:公众号、小程序高效开发秘籍》,全书配套辅助阅读系统已经上线: BookHelper
欢迎购买正版图书:【购买正版】
图书出版时的代码版本快照见分支 BookVersion1

💻 Senparc 官方视频教程

为了帮助大家更直观地了解微信开发细节,同时结合《微信开发深度解析》图书进行学习,我们成立“盛派课堂”小组,开设了微信开发视频课程,帮助大家从多个维度学习微信开发以及 .NET 开发过程中的诸多技巧。
视频包含两大部分:

  1. 微信开发基础技能
  2. 公众号及小程序案例实战

共计 60 课时,配有番外篇。
目前视频已经在网易云课堂上线,课程制作精良、内容充实,被选为“A”级课程,【观看视频】【查看课程代码及课件】

🧪 关注测试账号体验功能(SenparcRobot):

盛派网络小助手公众号 盛派网络小助手小程序 BookHelper

✋ 贡献代码

如果需要使用或修改此项目的源代码,建议先Fork。也欢迎将您修改的通用版本Pull Request过来。

  1. Fork
  2. 创建您的特性分支 (git checkout -b my-new-feature)
  3. 提交您的改动 (git commit -am 'Added some feature')
  4. 将您的修改记录提交到远程 git 仓库 (git push origin my-new-feature)
  5. 然后到 github 网站的该 git 远程仓库的 my-new-feature 分支下发起 Pull Request (请提交到 Developer 分支,不要直接提交到 master 分支)

👩‍🏫 如何使用 .NET Core 开发

当前分支包含了 .NET Framework 4.6.2+ 及 .NET 6.0/7.0/8.0 的全版本代码(已经不更新的版本请查看 release 快照)。
其中 .NET Framework 的 Demo 位于 /src/Samples/All/net45-mvc 目录下,
【推荐】.NET 8.0(向下兼容 .NET 5.0、6.0、7.0 及 .NET Core 3.1 等更低版本) 的 Demo 位于 /Samples/All/net8-mvc 目录下。

注意:

  1. 以上 Sample 中,net8-mvc 中的 Sample 直接引用了每个模块的源码,使用 Release 编译后可生成兼容不同版本的 Senaprc.Weixin SDK 库。
  2. 您也可以使用 .NET 6.0(向下兼容 .NET 5.0 及 .NET Core 3.1 等更低版本) 的 Demo 位于 /Samples/All/net6-mvc 目录下。

↕️ 使用Nuget安装到项目中

各个模块的 Nuget 安装方式:《使用 Nuget 将 SDK 安装到项目中

🏬 如何部署

1) 部署到 Azure App Service

App Service 是 Microsoft Azure 推出的 Web 服务,对 .NET 有很好的支持。部署步骤详见:《将微信站点部署到 Azure 中》

2) 部署到任意服务器的 FTP

在 Web 服务器上安装 FTP 服务(推荐 FileZilla Server),直接使用 FTP 直接上传本地已经编译好的代码(本项项目 Samples 中对应的是 Senparc.Weixin.Sample.Net7Senparc.Weixin.Sample.Net6Senparc.Weixin.Sample.NetCore3,编译后即可直接使用,无需修改代码)。如果使用 Azure App Service 或其他云服务,通常 FTP 也都是开通的。

🍴 各重要分支说明

 分支       说明        
master   正式发布的主分支,通常这个分支比较稳定,可以用于生产环境。
Developer 1、开发分支,此分支通常为 Beta 版本,新版本都会先在此分支中进行开发,最后推送稳定版到 master 分支,如果想对新功能先睹为快,可以使用此分支。
2、此分支同时兼容 .NET 4.5 / .NET Core / .NET Core 2.0 版本,建议 Pull Request 的代码都到这个分支下,而不是 master
BookVersion1 此分支为《微信开发深度解析:微信公众号、小程序高效开发秘籍》图书出版时对应代码快照。
DotNET-Core_MySQL 此分支为 .NET Core 环境下的 Pomelo.EntityFrameworkCore.MySql 框架集成演示分支。
NET4.0     仅支持 .NET 4.0 的分支,此分支已于2017年停止更新。.NET 4.0 最新代码随 master / Developer 分支同步更新
NET3.5     仅支持 .NET 3.5 的分支,此分支已于2015年停止更新。.NET 3.5 最新代码随 master / Developer 分支同步更新
Developer-Senparc.SDK 此分支仅用于 Senparc 团队内部测试,可忽略。

🍟 感谢贡献者

感谢为此项目做出贡献的开发者,你们不光完善了这个项目,也为**开源事业出了一份力,感谢你们!名单点击这里查看。

💰 捐助

如果这个项目对您有用,我们欢迎各方任何形式的捐助,也包括参与到项目代码更新或意见反馈中来。谢谢!

资金捐助:

donate

⭐ Star 数量统计

starcharts stargazers over time

📎 License

Apache License Version 2.0

Copyright 2024 Jeffrey Su & Suzhou Senparc Network Technology Co.,Ltd.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 
except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the 
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
either express or implied. See the License for the specific language governing permissions 
and limitations under the License.

Detail: https://github.com/JeffreySu/WeiXinMPSDK/blob/master/license.md

100% 开源,支持商用。

weixinmpsdk's People

Contributors

554393109 avatar annxu avatar bemguin avatar ccccccmd avatar chensean1 avatar cqwebwang avatar dong900512 avatar dupeng0811 avatar francisfyk avatar giagiigi avatar gokeiyou avatar hetaoos avatar jadynwong avatar janeconan avatar jeffreysu avatar jiehanlin avatar lishewen avatar lsch003 avatar mc7246 avatar mojinxun avatar niktac avatar niuhongbo avatar pekrr1e avatar phoenixpang avatar qideqian avatar rockrockwhite avatar sunnyli9 avatar tyszcc avatar wangdrama avatar zmjack avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

weixinmpsdk's Issues

想做一个查找附近娱乐场所的功能

想做一个查找附近娱乐场所的功能。
不知道能不能介绍一下关于通过位置,查找周围银行,饭店等等的API。。。
很需要这个功能啊。。。。

WeixinUserInfoResult

///

    /// 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
    /// </summary>


    public int sex { get; set; }
    /// <summary>


    /// 用户所在城市
    /// </summary>


    public string city { get; set; }
    /// <summary>


    /// 用户所在省份
    /// </summary>


    public string province { get; set; }
    /// <summary>


    /// 用户所在国家
    /// </summary>


    public string country { get; set; }

WeixinUserInfoResult.cs 用户信息的这几个成员漏了。

event消息推送问题

当自定义菜单的type为view时,被点击也会推送消息到接口,sdk的event枚举上没有相应的值,以及相应处理方法,请问是有意不作处理么?

群发消息错误 system error

群发消息错误 system error
SendTextGroupMessageByOpenId 可以正确提交,
SendTextGroupMessageByGroupId一直返回 system error
不知道是微信系统的问题,还是文档的问题

Senparc.Weixin.MP.Entities.RequestMessageEventBase继承错误

Senparc.Weixin.MP.Entities.RequestMessageEventBase继承自RequestMessageBase和IRequestMessageBase,当RequestMessageFactory创建RequestMessage为RequestMessageEventBase类型时(如微博的follow和unfollow),并不继承自IRequestMessageEventBase。
所以当执行MessageHandler的Execute()方法时,在var requestMessageText = (RequestMessage as IRequestMessageEventBase).ConvertToRequestMessageText();这一句中,ConvertToRequestMessageText(IRequestMessageEventBase requestMessageEvent)中获取到的requestMessageEvent是null,导致之后会抛空异常错误。根据继承关系和类名来看,RequestMessageEventBase应该继承自RequestMessageBase和IRequestMessageEventBase。

P2P模块工作模式

就个人了解而言,目前关于主动发送消息的方法基本都是1、模拟登录2、获取fakeid 3、模拟发送消息。不知道P2P功能模块实现原理如何,热切期待SDK的发布!!!

上传文件的方法不能用了

我昨天下载的最新版本,目前需要用到下面方法上传文件到微信服务器并获得media_id

UploadMediaFile

我打开源文件,里面上传的路径好像已经不是最新的了,目前的是:

http://api.weixin.qq.com/cgi-bin/media/upload?access_token={0}&type={1}&filename={2}&filelength={3}

在微信测试平台使用发现最新的url已经在最开始的api.weixin.qq.com之前加了file,就是说最新的变成了:
http://file.api.weixin.qq.com/xxxxx 剩下的部分一样。但是好像没有filename和filelength这2个参数了,现在是post的方式。

但是当我修改url之后也无法上传图片,返回错误是:
微信Post请求发生错误!错误代码:41005,说明:media data missing

我上传的代码是:

string accessToken =AccessTokenContainer.TryGetToken(appId, appSecret);

string img = @"d:/logo.jpg";

UploadMediaFileResult result = CommonApi.UploadMediaFile(accessToken, UploadMediaFileType.image, img);

首先access token肯定正确,权限也都有, 图片的路径也正确,就是当执行这个方法的时候报错。

请查证。

谢谢。

关于Senparc.Weixin.Config中的TIME_OUT的建议

o(∩_∩)o 嗨您们好。

Senparc.Weixin/Senparc.Weixin/Config 的 TIME_OUT 属性,
是否会考虑成外部调用时,允许修改?
目前使用SDK的过程中,发现在网络环境一般的场景里,10秒钟的超时时间,确实比较短。(特别是上传视频文件的时候,微信官方允许10MB以下。)

Senparc.Weixin项目,RequestUtility的HttpGet、HttpPost,有看到方法是暴露Timeout参数(Timeout是指定了参数常量,但仍然允许上一层调用时设置具体的数值)。

但是RequestUtility这两个方法的上一层,Senparc.Weixin.MP项目,Senparc.Weixin.MP.AdvancedAPIs相关的类,目前没提供Timeout参数供调用。
因此后续是否会考虑做调整呢?

很期待得到您们的回复。

新的框架非常好用

新的框架非常好用,一下子代码清晰了很多很多。
不过CreateFromRequest过时了,这个警告一下子变多了。。。。
你可以补充一个ASHX的例子,我是用ASHX来做的。。。。

总体上说V0.6非常给力!!加油!!支持你。。

关于要有两个子菜单的异常

https://github.com/JeffreySu/WeiXinMPSDK/blob/master/Senparc.Weixin.MP/Senparc.Weixin.MP/CommonAPIs/CommonApi.Menu.cs#L221
1、在微信公众平台设置的两个子菜单中,一个是直接跳转url,另一个设置的显示图文信息。在获取菜单时总是报错,发现显示图文信息的菜单项是空内容,被代码认为跟菜单下只有一个菜单项,导致报错。
2、也许某些情况下的确只有一个子菜单,这个应该不影响程序的运行。

else if (availableSubButton < 2)
{
throw new WeixinMenuException("子菜单至少需要填写2个!");
}

关于NewMessage,非常急!!

问题描述
我想将一个NewResponse的消息事先序列化为一个Xml、
这样的话,无法使用CreateFromRequestMessage方法(没有RequestMessage),
所以改用 var strongresponseNewsMessage = new ResponseMessageNews();
设定ArticlesOK,但是,这样的ResponseMessageNews序列化的时候,
text
这样的话,
var strongresponseNewsMessageBack = ResponseMessageFactory.GetResponseEntity(responseDoc);
也无法正常获得对象
附上整个XML



-62135625600
text

1


<Title></Title>





0

和正常的ResponseMessageNews比较发现,字段的次序也是有问题的,正常的应该是这样的

10


<Title></Title>





<Title></Title>




.......
.......



1364546180
news

0

非常急的问题,请尽快修正问题或者告诉我解决方法。

视频无法发送呀

微信直接发送视频消息,现有高级API的是无法发送的呀,需要上传二次,获取二次media_id.
我自己写了如下代码,是按照MP程序的规范写的,但是怎么提示无法连接微信服务器,URL也没错呀

    /// <summary>
    /// 二次上传视频,获取第二次mediaid2
    /// </summary>
    /// <param name="accessToken"></param>
    /// <param name="meida_id"></param>
    /// <param name="title"></param>
    /// <param name="description"></param>
    /// <returns></returns>
    public static string UploadVideo2(string accessToken, string meida_id, string title, string description)
    {
        const string urlFormat = "https://file.api.weixin.qq.com/cgi-bin/media/uploadvideo?access_token={0}";
        var data = new
        {
            media_id = meida_id,
            title = title,
            description = description
        };
        try
        {
            UploadMediaFileResult r = CommonJsonSend.Send<UploadMediaFileResult>(accessToken, urlFormat, data);
            return r.media_id;
        }
        catch (Exception ex)
        {
            return "";
        }
    }

CommonApi.Menu中,GetMenuFromJsonResult()的几个条件判断

非常感谢您的开源程序,对我帮助很大。

我使用的技术环境是 Angularjs + Webapi,post到服务器时,数据格式跟mvc的不大一样,导致 GetMenuFromJsonResult() 函数中的判断产生了错误。我进行了具体如下修改:

1、第 199 行,if(rootButton.name == null) 改为 if (string.IsNullOrEmpty(rootButton.name))。

2、第 204 行,var availableSubButton = rootButton.sub_button.Count(z => !string.IsNullOrEmpty(z.name)) 改为:
var availableSubButton = rootButton.sub_button == null ? 0 : rootButton.sub_button.Count(z => !string.IsNullOrEmpty(z.name))

3、第 308 行,if(subSubButton.name == null) 改为 if (string.IsNullOrEmpty(subSubButton.name))

以上,谢谢!

能请教下客服消息接口怎么使用吗?

首先获取access_token,然后调用CommonJsonSend.send(token, formatUrl, data);
这里的data是一个Object,很难理解,我的参数怎么写才对?
或许,能请你写个sample吗?
惭愧,惭愧,我又来提问小白的问题了。
感谢。

东西不错,不过不想个驱动程序

喜欢这个工程,不过,不像一个驱动程序。
能不能将核心的东西独立出来,优化包装一下。
能够让大家方便的使用。
例如token现在是写死的,在验证的那个源代码里面。
用户不应需要手工修改源代码,而是直接使用就OK了
愿意帮你修改,不知道你能坚持这个工程到什么时候?

群发消息接口的Senparc.Weixin.MP.AdvancedAPIs.NewsModel缺少字段show_cover_pic

群发消息接口的Senparc.Weixin.MP.AdvancedAPIs.NewsModel缺少字段show_cover_pic
微信文档中的接口规范如下:
{
"articles": [
{
"thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",
"author":"xxx",
"title":"Happy Day",
"content_source_url":"www.qq.com",
"content":"content",
"digest":"digest",
"show_cover_pic":"1"
},
{
"thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",
"author":"xxx",
"title":"Happy Day",
"content_source_url":"www.qq.com",
"content":"content",
"digest":"digest",
"show_cover_pic":"0"
}
]
}

WeixinPayLib 是不是过时了

MVC的例子中WeixinPayController 引用了 Senparc.Weixin.MP.WeixinPayLib
这是是不是已经过时了,我在源码中找到了TenPayLib 是不是
WeixinPayLib已经被TenPayLib代替了?

关于超时处理

我看了新增的代码后对超时处理的方法认为不是很妥当,我认为应该在Config.cs文件里设置为静态属性,设置为const并不是很妥当,用户很多时候是需要全局一次性修改的。

使用客服高级接口 发送消息乱码

就是做了一个简单的封装,用了一个单例来注册token
用高级接口发送消息,不知道为啥是乱码
代码如下:

public sealed class WeChatCommonApi
{
    private static WeChatCommonApi _instance = null;
    string _appId = ConfigurationManager.AppSettings.Get("WechatAppId");
    string _appSecret = ConfigurationManager.AppSettings.Get("WechatAppSecret");
    private WeChatCommonApi()
    {
        AccessTokenContainer.Register(_appId, _appSecret);
    }

    public static WeChatCommonApi Api
    {
        get { return _instance ?? (_instance = new WeChatCommonApi()); }
    }
    public string SendText(string OpenId, string Comment)
    {
        var accessToken = AccessTokenContainer.GetToken(_appId);
        try 
        {           
           return Custom.SendText(accessToken, OpenId, Comment).errcode.ToString();
        }
        catch (ErrorJsonResultException e)
        {
            return e.JsonResult.errcode.ToString();
        }
    }
}

Senparc.Weixin.MP/Senparc.Weixin.MP/AdvancedAPIs/GroupMessage/NewsModel.cs缺少字段show_cover_pic

微信文档中的接口规范如下:
{
"articles": [
{
"thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",
"author":"xxx",
"title":"Happy Day",
"content_source_url":"www.qq.com",
"content":"content",
"digest":"digest",
"show_cover_pic":"1"
},
{
"thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",
"author":"xxx",
"title":"Happy Day",
"content_source_url":"www.qq.com",
"content":"content",
"digest":"digest",
"show_cover_pic":"0"
}
]
}

开发者的URL /weixin 能换成其他的吗?

开发者的URL /weixin 能换成其他的吗? 比如说/WeChat这样
我不熟悉c#和.net,既然用到MVC,这个只是个控制器,应该可以修改的吧,需要做额外的工作就是编译是吗?

关于素材管理

现在微信给出的API中貌似没有素材管理这一块
而单单使用”上传下载多媒体文件“ 这个功能的话,就存在一个有效期的问题
如果每次用户发多媒体消息的话就重新上传一遍素材的话 感觉 这个方法又实在太笨了
不知道你们有没有什么好的办法解决这个问题吗 ?

生成二维码bug

Senparc.Weixin.MP.AdvancedAPIs.QrCode 的 Create方法,expireSeconds大于0时才是生成临时二维码,请确认并修复bug。thx!

CheckSignature.Check总是返回false

调用这个方法总是返回false,我自己写了一个方法替换可以的,说明我的地址是没有错的。不知道你有没有测试过这个方法。

MessageHandler的异常处理方式

https://github.com/JeffreySu/WeiXinMPSDK/blob/master/Senparc.Weixin.MP/Senparc.Weixin.MP/MessageHandlers/MessageHandler.cs#L272
如上连接的代码位置。
catch (Exception ex)
{
throw ex;
}
这样处理异常,会丢失原始的异常堆栈信息,调试时不能直接看到发生异常的位置,而将此处作为发生异常的位置。虽然保留了异常中message信息,但是堆栈信息缺找不到了,调试起来比较麻烦。
处理异常的 一个原则就是,仅catch能或者需要处理的异常,而此处对看似对异常没是实质性的处理逻辑,我觉得可以删除此处的代码。
或者作者这样处理有其原因??

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.