using Senparc.Weixin.MP;
using Senparc.Weixin.MP.AdvancedAPIs;
using Senparc.Weixin.MP.AdvancedAPIs.TemplateMessage;
using Senparc.Weixin.MP.AdvancedAPIs.User;
using Senparc.Weixin.MP.Containers;
namespace JNPF.Extras.Thirdparty.WeChat;
///
/// 微信公众号.
///
public class WeChatMPUtil
{
///
/// 访问令牌.
///
public string accessToken { get; private set; }
///
/// 构造函数.
///
public WeChatMPUtil() { }
///
/// 构造函数.
///
public WeChatMPUtil(string appId, string appSecret)
{
try
{
accessToken = AccessTokenContainer.TryGetAccessToken(appId, appSecret);
}
catch (Exception ex)
{
}
}
///
/// 微信后台验证地址.
///
/// 签名.
/// 时间戳.
/// nonce.
/// 算出的值.
///
public bool CheckToken(string signature, string timestamp, string nonce)
{
var token = "WEIXINJNPF";
return CheckSignature.Check(signature, timestamp, nonce, token);
}
///
/// 根据OpenId进行群发.
///
/// 消息类型.
/// 群发媒体文件时传入mediaId,群发文本消息时传入content,群发卡券时传入cardId.
/// 开发者侧群发msgid,长度限制64字节,如不填,则后台默认以群发范围和群发内容的摘要值做为clientmsgid.
/// openId字符串数组.
/// 代理请求超时时间(毫秒).
///
public bool SendGroupMessageByOpenId(int type, string value, string[] openIds, string clientmsgid = null, int timeOut = 10000)
{
try
{
GroupMessageType messageType = new GroupMessageType();
switch (type)
{
case 1://文本
messageType = GroupMessageType.text;
break;
case 2://图片
messageType = GroupMessageType.image;
break;
case 3://语音
messageType = GroupMessageType.voice;
break;
case 4://视频
messageType = GroupMessageType.video;
break;
case 5://图文
messageType = GroupMessageType.mpnews;
break;
case 6:// 卡券
messageType = GroupMessageType.wxcard;
break;
default:
break;
}
var result = GroupMessageApi.SendGroupMessageByOpenId(accessToken, messageType, value, clientmsgid, timeOut, openIds);
return result.errcode == 0;
}
catch (Exception ex)
{
return false;
}
}
///
/// 根据OpenId发送模板消息.
///
///
///
///
///
///
public void SendTemplateMessage(string openId, string templateId, string url, object data, TemplateModel_MiniProgram miniProgram = null)
{
var result = TemplateApi.SendTemplateMessage(accessToken, openId, templateId, url, data, miniProgram);
if (result.errcode != 0)
{
throw new Exception(result.errmsg);
}
}
///
/// 根据OpenId发送模板消息.
///
///
///
///
///
///
public string GetTemplateMp(string templateId)
{
try
{
var result = TemplateApi.GetPrivateTemplate(accessToken);
if (result.errcode == 0)
{
var data = result.template_list.Find(x => x.template_id == templateId);
return data.content;
}
return string.Empty;
}
catch (Exception ex)
{
return string.Empty;
}
}
///
/// 通过openId获取用户信息.
///
///
///
public UserInfoJson GetWeChatUserInfo(string openId)
{
return UserApi.Info(accessToken, openId);
}
}