c# 通过企业微信接口获取聊天的信息
有个需求,需要通过接口获取员工的聊天记录并保存下载,找了一圈,官方的都是c和java的Demo,因此在这里记录一下,方便大家使用。
前期准备
首先需要开通企业微信的会话保存功能,这个需要企业认证后,直接开通就行,审核需要等1-3个工作日。
后台配置
秘钥
秘钥分为公钥和私钥,公钥在后台配置,给企业微信使用,私钥自己拿着,待接口返回消息再解密使用。
秘钥生成建议使用这个网址,生成的秘钥自己保存下来就行。
拿到公钥私钥后,将公钥直接复制到企业微信后台

获取Secret
点击获取按钮即可。
代码实现
代码我直接使用的这位wsk198726大佬的,直接下载可用
文章: https://blog.csdn.net/wsk198726/article/details/137175703
代码讲解非常详细,拿到后直接调用即可。
遇到的问题
引用dll“找不到指定模块"
鼠标右键dll属性--复制到输入目录--始终复制
试图加载格式不正确的程序
代码版本问题,引用的是64位dll,点击“配置管理器”--添加一个X64的运行程序,如下,再编译使用

出现秘钥报错
在使用代码运行时发现,有一步需要将私钥转为xml的方法一直报错,方法名称为:PrivateKeyPemToXml,如下图

解决方法是换一个函数,用这个方法替换掉
点击查看代码
public static string ConvertToXmlPrivateKey(string privateJavaKey)
{
RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateJavaKey));
return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>",
Convert.ToBase64String(privateKeyParam.Modulus.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.PublicExponent.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.P.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.Q.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.DP.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.DQ.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.QInv.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.Exponent.ToByteArrayUnsigned()));
}
同时在使用私钥时,去掉----BEGIN PRIVATE KEY-----

再运行即可
调用方法
点击查看代码
string corpid = "XXXXXXXX"; //企业微信ID
string secret = "XXXXXXXXXXXXXXXXX"; //会话内容存档 secret
string token = "XXXXXXXXXXX";
int seq = 0;
string privateKey1 ="xxxxxx";
string privateKey2 ="xxxxxx";
string privateKey3 ="xxxxxx";
Dictionary<int, string> verKey = new Dictionary<int, string>();
verKey.Add(1, privateKey1);
verKey.Add(2, privateKey2);
verKey.Add(3, privateKey3);
var client = new FinanceHelper(corpid, secret, verKey);
//同步方法
// var result = client.GetChatList(seq);
//异步方法
var result = await client.GetChatListAsync(seq);
List<IMsgBase> msgList = result.Item1; //企业微信 会话内容 列表
List<FileData> fileList = result.Item2; //媒体内容 列表


浙公网安备 33010602011771号