如何将WebApi项目与企业微信和公众号完美集成?
摘要:前言 很久没写文章了,现在有了AI,其实已经不怎么需要写文章,反正不懂就问AI嘛。 不过AI总是有盲区的,就比如国内的微信开发。 微信的文档是公认的烂,而且经常悄咪咪改接口又不更新文档,所以AI对微信开发的API其实不怎么熟悉,经常给出一些
前言
很久没写文章了,现在有了AI,其实已经不怎么需要写文章,反正不懂就问AI嘛。
不过AI总是有盲区的,就比如国内的微信开发。
微信的文档是公认的烂,而且经常悄咪咪改接口又不更新文档,所以AI对微信开发的API其实不怎么熟悉,经常给出一些错误的回复。
本文记录一下最近我使用 C# WebApi 项目接入企业微信和公众号的过程,主要是用到自动回复功能。
前置工作
依赖库
我用到了 SKIT.FlurlHttpClient.Wechat 这个系列的库:https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat
原本想直接用 Flurl 对接的,毕竟现在手里有了锤子(AI),看啥都是钉子,啥都想造轮子。
不过搜了一下我的收藏夹,发现有这个项目,封装了微信的大部分接口,那还要啥自行车,直接用就完事儿了。
其中:
企业微信:SKIT.FlurlHttpClient.Wechat.Work
公众号:SKIT.FlurlHttpClient.Wechat.Api
微信配置信息
需要准备这些配置信息:
企业微信:
public class WechatWorkOptions {
public string CorpId { get; set; } = string.Empty;
// 应用ID
public int AgentId { get; set; }
// 应用密钥
public string Secret { get; set; } = string.Empty;
// 回调 Token
public string CallbackToken { get; set; } = string.Empty;
// 回调 EncodingAESKey
public string CallbackEncodingAESKey { get; set; } = string.Empty;
}
公众号:
public class WechatApiClientOptions {
public string AppId { get; set; } = string.Empty;
public string AppSecret { get; set; } = string.Empty;
public string CallbackToken { get; set; } = string.Empty;
public string CallbackEncodingAESKey { get; set; } = string.Empty;
}
注册服务
// 企业微信
builder.Services.AddSingleton<WechatWorkClient>(sp => {
var options = sp.GetRequiredService<IOptions<WechatWorkOptions>>().Value;
return WechatWorkClientBuilder.Create(options).Build();
});
// 公众号
builder.Services.AddSingleton<WechatApiClient>(sp => {
var options = sp.GetRequiredService<IOptions<WechatMpOptions>>().Value;
return WechatApiClientBuilder.Create(options).Build();
});
准备工作就搞定了。
管理token
微信的接口都需要用 AccessToken 才能调用,但微信又不想开发者每次都去请求获取token,所以只能获取一次然后自己保存了。
C# 可以用 IMemoryCache 组件,很方便的管理这些临时存储的数据;Django框架也有内置的cache机制,其他语言框架可以用Redis这类NoSQL数据库来存储。扯远了,本文还是介绍C#的。
