忽略dll文件git
This commit is contained in:
@@ -1,15 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Hncore.Wx.Open
|
||||
{
|
||||
public class SendResult
|
||||
{
|
||||
public int errcode { get; set; }
|
||||
public string errmsg { get; set; }
|
||||
public long msgid { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,266 +0,0 @@
|
||||
using Hncore.Infrastructure.Common;
|
||||
using Hncore.Infrastructure.Extension;
|
||||
using Hncore.Infrastructure.Serializer;
|
||||
using Hncore.Pass.MsgCenter.Constant;
|
||||
using Hncore.Pass.MsgCenter.Util;
|
||||
using Hncore.Wx.Open.Enums;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Hncore.Wx.Open
|
||||
{
|
||||
public static class TemplateApi
|
||||
{
|
||||
private static IHttpClientFactory _HttpClientFactory;
|
||||
|
||||
public static void Init(IHttpClientFactory HttpClientFactory)
|
||||
{
|
||||
_HttpClientFactory = HttpClientFactory;
|
||||
}
|
||||
private static HttpClient GetHttpClient()
|
||||
{
|
||||
return _HttpClientFactory.CreateClient("WxOpen");
|
||||
}
|
||||
/// <summary>
|
||||
/// 开放平台或者公众平台或者小程序发送模板消息
|
||||
/// </summary>
|
||||
/// <param name="appId">公众号appid</param>
|
||||
/// <param name="templateId">模板id</param>
|
||||
/// <param name="to">openid ,号分割</param>
|
||||
/// <param name="tData">数据</param>
|
||||
/// <returns></returns>
|
||||
public static async Task<SendResult> SendTemplateMessageAsync(string appId, string to, ChannelType chennel, TemplateBaseModel tData)
|
||||
{
|
||||
var wxAppSecret = WxOpenApi.GetWxAppSecret(appId);
|
||||
var access_token = "";
|
||||
if (!string.IsNullOrWhiteSpace(wxAppSecret))//公众平台或者小程序直接发送模板消息
|
||||
{
|
||||
access_token = await WxOpenApi.GetAccessToken(appId, wxAppSecret);
|
||||
}
|
||||
else//开放平台代公众平台发送模板消息
|
||||
{
|
||||
access_token = await WxOpenApi.GetAuthorizerAccessToken(appId);
|
||||
}
|
||||
|
||||
var tplId =await GetTemplateIdAsync(appId, tData.template_id);
|
||||
|
||||
if (string.IsNullOrWhiteSpace(tplId))
|
||||
{
|
||||
LogHelper.Error("没有找到对应的模板Id", $"appid={appId},tpl={tData.template_id}");
|
||||
return new SendResult()
|
||||
{
|
||||
errcode = 10001,
|
||||
errmsg = "没有对应的模板"
|
||||
};
|
||||
}
|
||||
|
||||
tData.template_id = tplId;
|
||||
var userList = to.Split(',');
|
||||
foreach (var touser in userList)
|
||||
{
|
||||
tData.touser = touser;
|
||||
var reqData = tData.ToData();
|
||||
if (chennel == ChannelType.MP)
|
||||
{
|
||||
mp_send(access_token, reqData);
|
||||
}
|
||||
else if (chennel == ChannelType.MiniApp)
|
||||
{
|
||||
miniapp_send(access_token, reqData);
|
||||
}
|
||||
}
|
||||
return new SendResult();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发送小程序订阅消息
|
||||
/// </summary>
|
||||
/// <param name="appId">小程序appid</param>
|
||||
/// <param name="templateId">模板id</param>
|
||||
/// <param name="to">openid ,号分割</param>
|
||||
/// <param name="tData">数据</param>
|
||||
/// <returns></returns>
|
||||
public static async Task<SendResult> SendSubscribeMessageAsync(string appId, string to, TemplateBaseModel tData)
|
||||
{
|
||||
var wxAppSecret = WxOpenApi.GetWxAppSecret(appId);
|
||||
|
||||
var access_token = await WxOpenApi.GetAccessToken(appId, wxAppSecret);
|
||||
|
||||
var userList = to.Split(',');
|
||||
foreach (var touser in userList)
|
||||
{
|
||||
tData.touser = touser;
|
||||
var reqData = tData.ToData();
|
||||
miniapp_subscribe_send(access_token, reqData);
|
||||
}
|
||||
return new SendResult();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 根据短模板编号得到对应的模板id
|
||||
/// </summary>
|
||||
/// <param name="appId"></param>
|
||||
/// <param name="short_tpl_id"></param>
|
||||
/// <returns></returns>
|
||||
public static async Task<string> GetTemplateIdAsync(string appId, string short_tpl_id)
|
||||
{
|
||||
if (!short_tpl_id.StartsWith("OPENTM") && !short_tpl_id.StartsWith("TM")&& !short_tpl_id.StartsWith("ETOR"))
|
||||
{
|
||||
return short_tpl_id;
|
||||
}
|
||||
var key = string.Format(ConstantConfig.Redis_TempleteId_Key, appId, short_tpl_id);
|
||||
var templete_id = await RedisHelper.GetAsync(key);
|
||||
if (!string.IsNullOrWhiteSpace(templete_id))
|
||||
{
|
||||
return templete_id;
|
||||
}
|
||||
|
||||
var access_token = await WxOpenApi.GetAuthorizerAccessToken(appId);
|
||||
var ret = await get_tpl(access_token, short_tpl_id);
|
||||
if (ret.errcode == 0)
|
||||
{
|
||||
await RedisHelper.SetAsync(key, ret.template_id);
|
||||
return ret.template_id;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static async Task<SendResult> mp_send(string access_token, object reqData)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(access_token))
|
||||
{
|
||||
return new SendResult()
|
||||
{
|
||||
errcode = 1000,
|
||||
errmsg = "access_token 不存在"
|
||||
};
|
||||
}
|
||||
string urlFormat = $"cgi-bin/message/template/send?access_token={access_token}";
|
||||
LogHelper.Debug("mp_send_req", reqData.ToJson());
|
||||
var respJson = await GetHttpClient().PostAsJsonGetString(urlFormat, reqData);
|
||||
var response = respJson.FromJsonToOrDefault<SendResult>();
|
||||
if (response.errcode > 0)
|
||||
{
|
||||
LogHelper.Error("mp_send_respJson", respJson);
|
||||
return response;
|
||||
}
|
||||
return response;
|
||||
}
|
||||
public static async Task<SendResult> miniapp_send(string access_token, object reqData)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(access_token))
|
||||
{
|
||||
return new SendResult()
|
||||
{
|
||||
errcode = 1000,
|
||||
errmsg = "access_token 不存在"
|
||||
};
|
||||
}
|
||||
string urlFormat = $"cgi-bin/message/wxopen/template/send?access_token={access_token}";
|
||||
LogHelper.Debug("mp_send_req", reqData.ToJson());
|
||||
var respJson = await GetHttpClient().PostAsJsonGetString(urlFormat, reqData);
|
||||
var response = respJson.FromJsonToOrDefault<SendResult>();
|
||||
if (response.errcode > 0)
|
||||
{
|
||||
LogHelper.Error("miniapp_send_respJson", respJson);
|
||||
return response;
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
//小程序订阅消息
|
||||
public static async Task<SendResult> miniapp_subscribe_send(string access_token, object reqData)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(access_token))
|
||||
{
|
||||
return new SendResult()
|
||||
{
|
||||
errcode = 1000,
|
||||
errmsg = "access_token 不存在"
|
||||
};
|
||||
}
|
||||
string urlFormat = $"cgi-bin/message/subscribe/send?access_token={access_token}";
|
||||
LogHelper.Debug("miniapp_subscribe_send", reqData.ToJson());
|
||||
var respJson = await GetHttpClient().PostAsJsonGetString(urlFormat, reqData);
|
||||
var response = respJson.FromJsonToOrDefault<SendResult>();
|
||||
if (response.errcode > 0)
|
||||
{
|
||||
LogHelper.Error("miniapp_subscribe_send", respJson);
|
||||
return response;
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
public static async Task<SendResult> uniform_send(string access_token, object reqData)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(access_token))
|
||||
{
|
||||
return new SendResult()
|
||||
{
|
||||
errcode = 1000,
|
||||
errmsg = "access_token 不存在"
|
||||
};
|
||||
}
|
||||
|
||||
string urlFormat = $"cgi-bin/message/wxopen/template/uniform_send?access_token={access_token}";
|
||||
LogHelper.Debug("SendTemplateMessageAsync_Req", reqData.ToJson());
|
||||
var respJson = await GetHttpClient().PostAsJsonGetString(urlFormat, reqData);
|
||||
var response = respJson.FromJsonToOrDefault<SendResult>();
|
||||
if (response.errcode > 0)
|
||||
{
|
||||
LogHelper.Debug("SendTemplateMessageAsync_respJson", respJson);
|
||||
return response;
|
||||
}
|
||||
return new SendResult();
|
||||
}
|
||||
|
||||
public static async Task<GetTemplateResponse> get_tpl(string access_token, string short_tpl_id)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(access_token))
|
||||
{
|
||||
return new GetTemplateResponse()
|
||||
{
|
||||
errcode = 1000,
|
||||
errmsg = "access_token 不存在"
|
||||
};
|
||||
}
|
||||
var reqData = new
|
||||
{
|
||||
template_id_short = short_tpl_id
|
||||
};
|
||||
string urlFormat = $"cgi-bin/template/api_add_template?access_token={access_token}";
|
||||
LogHelper.Debug("get_tpl", reqData.ToJson());
|
||||
var respJson = await GetHttpClient().PostAsJsonGetString(urlFormat, reqData);
|
||||
var response = respJson.FromJsonToOrDefault<GetTemplateResponse>();
|
||||
if (response.errcode > 0)
|
||||
{
|
||||
LogHelper.Error("get_tpl_respJson", respJson);
|
||||
return response;
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
private static async Task<GetTempleteListResponse> get_tpl_list(string access_token)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(access_token))
|
||||
{
|
||||
return new GetTempleteListResponse()
|
||||
{
|
||||
errcode = 1000,
|
||||
errmsg = "access_token 不存在"
|
||||
};
|
||||
}
|
||||
string urlFormat = $"cgi-bin/template/get_all_private_template?access_token={access_token}";
|
||||
var respJson = await GetHttpClient().GetStringAsync(urlFormat);
|
||||
var response = respJson.FromJsonToOrDefault<GetTempleteListResponse>();
|
||||
if (response.errcode > 0)
|
||||
{
|
||||
LogHelper.Error("get_tpl_respJson", respJson);
|
||||
return response;
|
||||
}
|
||||
return response;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,129 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Hncore.Wx.Open
|
||||
{
|
||||
public class TemplateBaseModel
|
||||
{
|
||||
public string touser { get; set; }
|
||||
public string template_id { get; set; }
|
||||
public List<TemplateDataItem> Items { get; set; } = new List<TemplateDataItem>();
|
||||
|
||||
//{
|
||||
// "touser":"touser",
|
||||
// "template_id": "TEMPLATE_ID",
|
||||
// "data": {
|
||||
// "keyword1": {
|
||||
// "value": "339208499"
|
||||
// },
|
||||
// "keyword2": {
|
||||
// "value": "2015年01月05日 12:30"
|
||||
// },
|
||||
// "keyword3": {
|
||||
// "value": "腾讯微信总部"
|
||||
// } ,
|
||||
// "keyword4": {
|
||||
// "value": "广州市海珠区新港中路397号"
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
public virtual Dictionary<string, Object> ToData()
|
||||
{
|
||||
var data = new Dictionary<string, Object>() {
|
||||
{ "touser",touser},
|
||||
{"template_id",template_id}
|
||||
};
|
||||
var index = 1;
|
||||
var dataItems = new Dictionary<string, Object>() { };
|
||||
Items.ForEach(m =>
|
||||
{
|
||||
dataItems[$"keyword{index}"] = m;
|
||||
index++;
|
||||
});
|
||||
data["data"] = dataItems;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
public class TemplateMPModel: TemplateBaseModel
|
||||
{
|
||||
public string Url { get; set; }
|
||||
public string MiniAppId { get; set; }
|
||||
public TemplateDataItem first { get; set; }
|
||||
public TemplateDataItem remark { get; set; }
|
||||
public override Dictionary<string, Object> ToData()
|
||||
{
|
||||
var ret = base.ToData();
|
||||
var data = ret ["data"] as Dictionary<string, Object>;
|
||||
if (first != null) data["first"] = first;
|
||||
if (remark != null) data["remark"] = remark;
|
||||
if (!string.IsNullOrWhiteSpace(Url)) ret["url"] = Url;
|
||||
if (!string.IsNullOrWhiteSpace(MiniAppId)) ret["miniprogram"] = new
|
||||
{
|
||||
appid = MiniAppId,
|
||||
pagepath = Url
|
||||
};
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
public class TemplateMiniAppModel : TemplateBaseModel
|
||||
{
|
||||
public string page { get; set; }
|
||||
public string form_id { get; set; }
|
||||
public string emphasis_keyword { get; set; }
|
||||
public override Dictionary<string, Object> ToData()
|
||||
{
|
||||
var ret = base.ToData();
|
||||
if (!string.IsNullOrWhiteSpace(page)) ret["page"] = page;
|
||||
if (!string.IsNullOrWhiteSpace(form_id)) ret["form_id"] = form_id;
|
||||
if (!string.IsNullOrWhiteSpace(emphasis_keyword)) ret["emphasis_keyword"] = emphasis_keyword;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
public class TemplateDataItem
|
||||
{
|
||||
public TemplateDataItem(string v, string c = "#173177")
|
||||
{
|
||||
value = v;
|
||||
color = c;
|
||||
}
|
||||
|
||||
public string name { get; set; }
|
||||
public string value { get; set; }
|
||||
//
|
||||
// 摘要:
|
||||
// 16进制颜色代码,如:#FF0000
|
||||
public string color { get; set; }
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 小程序订阅消息
|
||||
/// </summary>
|
||||
public class SubscribeMiniAppModel : TemplateBaseModel
|
||||
{
|
||||
public string page { get; set; }
|
||||
public override Dictionary<string, Object> ToData()
|
||||
{
|
||||
var ret = base.ToData();
|
||||
|
||||
var data = new Dictionary<string, Object>() {
|
||||
{ "touser",touser},
|
||||
{"template_id",template_id}
|
||||
};
|
||||
var index = 1;
|
||||
var dataItems = new Dictionary<string, Object>() { };
|
||||
Items.ForEach(m =>
|
||||
{
|
||||
var num = index.ToString().PadLeft(2, '0');
|
||||
dataItems[m.name] = new { value = m.value };
|
||||
index++;
|
||||
});
|
||||
data["data"] = dataItems;
|
||||
if (!string.IsNullOrWhiteSpace(page)) ret["page"] = page;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user