1、所需信息
CorpID:企业ID
AgentID:应用ID ;Secret:应用密钥
要进入【管理企业】,然后回跳入企业微信网页,在【应用管理】中创建应用,创建成功后,即可获取到 AgentID和Secret
2、功能实现
参考内容:企业微信-发送应用消息
public static class QYWXHelper
{
//唯一的企业ID
static string corpid = System.Configuration.ConfigurationManager.AppSettings["corpid"].ToString();
//应用密钥
static string corpsecret = System.Configuration.ConfigurationManager.AppSettings["secret"].ToString();
//消息推送URI
static string messageSendURI = System.Configuration.ConfigurationManager.AppSettings["messageSendURI"].ToString();
/// <summary>
/// 获取企业微信的accessToken
/// </summary>
/// <param name="corpid">企业微信ID</param>
/// <param name="corpsecret">管理组密钥</param>
/// <returns></returns>
public static string GetQYAccessToken(string corpid, string corpsecret)
{
string getAccessTokenUrl = System.Configuration.ConfigurationManager.AppSettings["getAccessTokenUrl"].ToString();
string accessToken = "";
string respText = "";
//获取josn数据
string url = string.Format(getAccessTokenUrl, corpid, corpsecret);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (Stream resStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(resStream, Encoding.Default);
respText = reader.ReadToEnd();
resStream.Close();
}
try
{
JavaScriptSerializer Jss = new JavaScriptSerializer();
Dictionary<string, object> respDic = (Dictionary<string, object>)Jss.DeserializeObject(respText);
//通过键access_token获取值
accessToken = respDic["access_token"].ToString();
}
catch (Exception ex)
{
throw ex;
}
return accessToken;
}
/// <summary>
/// Post数据接口
/// </summary>
/// <param name="postUrl">接口地址</param>
/// <param name="paramData">提交json数据</param>
/// <param name="dataEncode">编码方式</param>
/// <returns></returns>
public static string PostWebRequest(string postUrl, string paramData, Encoding dataEncode)
{
string ret = string.Empty;
try
{
byte[] byteArray = dataEncode.GetBytes(paramData); //转化
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
webReq.Method = "POST";
webReq.ContentType = "application/x-www-form-urlencoded";
webReq.ContentLength = byteArray.Length;
Stream newStream = webReq.GetRequestStream();
newStream.Write(byteArray, 0, byteArray.Length);//写入参数
newStream.Close();
HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.Default);
ret = sr.ReadToEnd();
sr.Close();
response.Close();
newStream.Close();
}
catch (Exception ex)
{
return ex.Message;
}
return ret;
}
/// <summary>
/// 推送信息
/// </summary>
/// <param name="corpid">企业微信ID</param>
/// <param name="corpsecret">管理组密钥</param>
/// <param name="paramData">提交的数据json</param>
/// <param name="dataEncode">编码方式</param>
/// <returns></returns>
public static void SendMessage(string userCode, string message)
{
string accessToken = string.Empty;
string postUrl = string.Empty;
string param = string.Empty;
string postResult = string.Empty;
accessToken = GetQYAccessToken(corpid, corpsecret);
postUrl = string.Format(messageSendURI, accessToken);
WxSendEntity entity = new WxSendEntity(message);
foreach (string item in userCode.Split('|'))
{
//paramData.touser = GetOAUserId(item);//在实际应用中需要判断接收消息的成员是否在系统账号中存在。
entity.touser = item;
param = JsonConvert.SerializeObject(entity);
if (entity.touser != null)
{
//{"errcode":0,"errmsg":"ok","invaliduser":""}
postResult = PostWebRequest(postUrl, param, Encoding.UTF8);
}
else
{
postResult = $"账号{entity.touser}不存在!";
}
}
}
}
/// <summary>
/// 企业微信发送消息的基础消息内容
/// </summary>
public class WxSendEntity
{
/// <summary>
/// 指定接收消息的成员,成员ID列表(多个接收者用‘|’分隔,最多支持1000个)。
/// 特殊情况:指定为”@all”,则向该企业应用的全部成员发送
/// </summary>
public string touser { get; set; }
/// <summary>
/// 指定接收消息的部门,部门ID列表,多个接收者用‘|’分隔,最多支持100个。
///当touser为”@all”时忽略本参数
/// </summary>
public string toparty { get; set; }
/// <summary>
/// 指定接收消息的标签,标签ID列表,多个接收者用‘|’分隔,最多支持100个。
///当touser为”@all”时忽略本参数
/// </summary>
public string totag { get; set; }
/// <summary>
/// 消息类型,此时固定为:text
/// </summary>
public string msgtype { get; set; }
/// <summary>
/// 企业应用的id,整型
/// </summary>
public string agentid { get; set; }
/// <summary>
/// 表示是否是保密消息,0表示否,1表示是,默认0
/// </summary>
public string safe { get; set; }
/// <summary>
/// 发送内容
/// </summary>
public Text text { get; set; }
/// <summary>
/// 构造函数
/// </summary>
/// <param name="message"></param>
public WxSendEntity(string message)
{
this.agentid = System.Configuration.ConfigurationManager.AppSettings["corpSendBaseAgentID"].ToString();
this.safe = "0";
this.msgtype = "text";
this.text = new Text(message);
}
}
/// <summary>
/// 内容类
/// </summary>
public class Text
{
public string content { get; set; }
public Text(string message)
{
this.content = message;
}
}
3、方法调用
/// <summary>
/// 企业微信发送
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_wx_Click(object sender, EventArgs e)
{
try
{
string touser = this.txt_qywx_user.Text;
if (!string.IsNullOrEmpty(touser))
{
string result = QYWXHelper.SendMessage(touser, this.txt_content.Text);
writeMsg(1, result);
}
}
catch (Exception ex)
{
writeMsg(1, ex.Message);
throw ex;
}
}
private void writeMsg(int type, string msg)
{
StringBuilder builder = new StringBuilder();
if(type == 1)
{
builder.Append($"【企业微信 -- {DateTime.Now}】");
}
else
{
builder.Append($"【邮件方式 -- {DateTime.Now}】");
}
builder.AppendLine(msg);
this.txt_msg.AppendText(builder.ToString());
}