/// <summary>
/// 微信公众号发送消息
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public async Task<bool> WxSendMsg(PushMsgData data)
{
// 设置HTTP请求相关参数
var appId = "appId ";
var appSecret = "appSecret ";
var accessToken = GetAccessToken(appId, appSecret); // 获取访问令牌
var url = $"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={accessToken}";
var client = new HttpClient();
// var sqlcategoryId = string.Join("','", data.openId);
var sqlcategoryId = data.openId;
// 设置请求消息体
var requestBody = new
{
touser = sqlcategoryId, // 目标用户的OpenID
template_id = "template_id", // 消息模板ID
topcolor = "#FF0000",
url = "https://www.baidu.com/",//详情需要跳转的网页,需要设置JS接口安全域名
data = new
{
//模板对应字段
first = new
{
value = "发货成功!",
//颜色代码
color = "#000000"
},
keyword1 = new
{
value = "沙发",
//颜色代码
color = "#000000"
},
keyword2 = new
{
value = "京东物流",
//颜色代码
color = "#000000"
},
keyword3 = new
{
value = DateTime.Now.ToString("F"),
//颜色代码
color = "#000000"
},
remark = new
{
value = "备注信息",
//颜色代码
color = "#000000"
}
}
};
var jsonBody = JsonConvert.SerializeObject(requestBody);
var content = new StringContent(jsonBody, Encoding.UTF8, "application/json");
// 发送HTTP请求并接收响应
var response = await client.PostAsync(url, content);
var responseContent = await response.Content.ReadAsStringAsync();
// 解析响应并提取所需的数据
var responseObject = JsonConvert.DeserializeObject<ResponseMsgModel>(responseContent);
//var errorCode = responseObject.GetValue("errcode");
//var errorMessage = responseObject.GetValue("errmsg");
// 处理响应结果
if (responseObject.errcode.ToString() == "0" && responseObject != null)
{
return true;
}
else
{
return false;
}
}
// 获取访问令牌
public string GetAccessToken(string appId, string appSecret)
{
//优先获取redis缓存 如果没有再去拉取微信数据
var token = _cache.Get($"WxAccessToken:Token");
if (string.IsNullOrEmpty(token))
{
var url = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appId}&secret={appSecret}";
using (HttpClient client = new HttpClient())
{
var response = client.GetAsync(url).Result;
var responseContent = response.Content.ReadAsStringAsync().Result;
var accessToken = JsonConvert.DeserializeObject<ResponseMsgModel>(responseContent);
//因为微信toen的失效时间是两个小时 这里暂时设置为100分钟
_cache.Set($"WxAccessToken:Token", accessToken.access_token, 100);
return accessToken.access_token;
}
}
else
{
return token;
}
}