|
|
|
@ -26,16 +26,16 @@ namespace Tiobon.Core.Services |
|
|
|
|
this._unitOfWorkManage = unitOfWorkManage; |
|
|
|
|
this._logger = logger; |
|
|
|
|
} |
|
|
|
|
public async Task<MessageModel<WeChatApiDto>> GetToken(string publicAccount) |
|
|
|
|
public async Task<ServiceResult<WeChatApiDto>> GetToken(string publicAccount) |
|
|
|
|
{ |
|
|
|
|
var config = await this.QueryById(publicAccount); |
|
|
|
|
if (config == null) MessageModel<string>.Success($"公众号{publicAccount}未维护至系统");//还没过期,直接返回 |
|
|
|
|
if (config == null) ServiceResult<string>.OprateSuccess($"公众号{publicAccount}未维护至系统");//还没过期,直接返回 |
|
|
|
|
if (config.tokenExpiration > DateTime.Now) |
|
|
|
|
{ |
|
|
|
|
//再次判断token在微信服务器是否正确 |
|
|
|
|
var wechatIP = await WeChatHelper.GetWechatIP(config.token); |
|
|
|
|
if (wechatIP.errcode == 0) |
|
|
|
|
MessageModel<WeChatApiDto>.Success("", new WeChatApiDto { access_token = config.token });//还没过期,直接返回 |
|
|
|
|
ServiceResult<WeChatApiDto>.OprateSuccess("", new WeChatApiDto { access_token = config.token });//还没过期,直接返回 |
|
|
|
|
} |
|
|
|
|
//过期了,重新获取 |
|
|
|
|
var data = await WeChatHelper.GetToken(config.appid, config.appsecret); |
|
|
|
@ -44,17 +44,17 @@ namespace Tiobon.Core.Services |
|
|
|
|
config.token = data.access_token; |
|
|
|
|
config.tokenExpiration = DateTime.Now.AddSeconds(data.expires_in); |
|
|
|
|
await this.Update(config); |
|
|
|
|
return MessageModel<WeChatApiDto>.Success("",data); |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("",data); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
return MessageModel<WeChatApiDto>.Fail($"\r\n获取Token失败\r\n错误代码:{data.errcode}\r\n错误信息:{data.errmsg}"); |
|
|
|
|
return ServiceResult<WeChatApiDto>.Fail($"\r\n获取Token失败\r\n错误代码:{data.errcode}\r\n错误信息:{data.errmsg}"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
public async Task<MessageModel<WeChatApiDto>> RefreshToken(string publicAccount) |
|
|
|
|
public async Task<ServiceResult<WeChatApiDto>> RefreshToken(string publicAccount) |
|
|
|
|
{ |
|
|
|
|
var config = await this.QueryById(publicAccount); |
|
|
|
|
if (config == null) MessageModel<string>.Success($"公众号{publicAccount}未维护至系统");//还没过期,直接返回 |
|
|
|
|
if (config == null) ServiceResult<string>.OprateSuccess($"公众号{publicAccount}未维护至系统");//还没过期,直接返回 |
|
|
|
|
//过期了,重新获取 |
|
|
|
|
var data = await WeChatHelper.GetToken(config.appid, config.appsecret); |
|
|
|
|
if (data.errcode.Equals(0)) |
|
|
|
@ -62,25 +62,25 @@ namespace Tiobon.Core.Services |
|
|
|
|
config.token = data.access_token; |
|
|
|
|
config.tokenExpiration = DateTime.Now.AddSeconds(data.expires_in); |
|
|
|
|
await this.Update(config); |
|
|
|
|
return MessageModel<WeChatApiDto>.Success("", data); |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("", data); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
return MessageModel<WeChatApiDto>.Fail($"\r\n获取Token失败\r\n错误代码:{data.errcode}\r\n错误信息:{data.errmsg}"); |
|
|
|
|
return ServiceResult<WeChatApiDto>.Fail($"\r\n获取Token失败\r\n错误代码:{data.errcode}\r\n错误信息:{data.errmsg}"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
public async Task<MessageModel<WeChatApiDto>> GetTemplate(string id) |
|
|
|
|
public async Task<ServiceResult<WeChatApiDto>> GetTemplate(string id) |
|
|
|
|
{ |
|
|
|
|
var res = await GetToken(id); |
|
|
|
|
if (!res.success) return res; |
|
|
|
|
var data = await WeChatHelper.GetTemplate(res.response.access_token); |
|
|
|
|
if (data.errcode.Equals(0)) |
|
|
|
|
{ |
|
|
|
|
return MessageModel<WeChatApiDto>.Success("", data); |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("", data); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
return MessageModel<WeChatApiDto>.Success($"\r\n获取模板失败\r\n错误代码:{data.errcode}\r\n错误信息:{data.errmsg}", data); |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess($"\r\n获取模板失败\r\n错误代码:{data.errcode}\r\n错误信息:{data.errmsg}", data); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
/// <summary> |
|
|
|
@ -88,21 +88,21 @@ namespace Tiobon.Core.Services |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="id"></param> |
|
|
|
|
/// <returns></returns> |
|
|
|
|
public async Task<MessageModel<WeChatApiDto>> GetMenu(string id) |
|
|
|
|
public async Task<ServiceResult<WeChatApiDto>> GetMenu(string id) |
|
|
|
|
{ |
|
|
|
|
var res = await GetToken(id); |
|
|
|
|
if (!res.success) return res; |
|
|
|
|
var data = await WeChatHelper.GetMenu(res.response.access_token); |
|
|
|
|
if (data.errcode.Equals(0)) |
|
|
|
|
{ |
|
|
|
|
return MessageModel<WeChatApiDto>.Success("", data); |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("", data); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
return MessageModel<WeChatApiDto>.Success($"\r\n获取菜单失败\r\n错误代码:{data.errcode}\r\n错误信息:{data.errmsg}", data); |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess($"\r\n获取菜单失败\r\n错误代码:{data.errcode}\r\n错误信息:{data.errmsg}", data); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
public async Task<MessageModel<WeChatApiDto>> GetSubUsers(string id) |
|
|
|
|
public async Task<ServiceResult<WeChatApiDto>> GetSubUsers(string id) |
|
|
|
|
{ |
|
|
|
|
var res = await GetToken(id); |
|
|
|
|
if (!res.success) return res; |
|
|
|
@ -114,25 +114,25 @@ namespace Tiobon.Core.Services |
|
|
|
|
{ |
|
|
|
|
data.users.Add(await WeChatHelper.GetUserInfo(res.response.access_token, openid)); |
|
|
|
|
} |
|
|
|
|
return MessageModel<WeChatApiDto>.Success("", data); |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("", data); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
return MessageModel<WeChatApiDto>.Success($"\r\n获取订阅用户失败\r\n错误代码:{data.errcode}\r\n错误信息:{data.errmsg}", data); |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess($"\r\n获取订阅用户失败\r\n错误代码:{data.errcode}\r\n错误信息:{data.errmsg}", data); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
public async Task<MessageModel<WeChatApiDto>> GetSubUser(string id,string openid) |
|
|
|
|
public async Task<ServiceResult<WeChatApiDto>> GetSubUser(string id,string openid) |
|
|
|
|
{ |
|
|
|
|
var res = await GetToken(id); |
|
|
|
|
if (!res.success) return res; |
|
|
|
|
var data = await WeChatHelper.GetUserInfo(res.response.access_token,openid); |
|
|
|
|
if (data.errcode.Equals(0)) |
|
|
|
|
{ |
|
|
|
|
return MessageModel<WeChatApiDto>.Success("", data); |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("", data); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
return MessageModel<WeChatApiDto>.Success($"\r\n获取订阅用户失败\r\n错误代码:{data.errcode}\r\n错误信息:{data.errmsg}", data); |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess($"\r\n获取订阅用户失败\r\n错误代码:{data.errcode}\r\n错误信息:{data.errmsg}", data); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
public async Task<string> Valid(WeChatValidDto validDto,string body) |
|
|
|
@ -203,10 +203,10 @@ namespace Tiobon.Core.Services |
|
|
|
|
} |
|
|
|
|
return objReturn; |
|
|
|
|
} |
|
|
|
|
public async Task<MessageModel<WeChatResponseUserInfo>> GetQRBind(WeChatUserInfo info) |
|
|
|
|
public async Task<ServiceResult<WeChatResponseUserInfo>> GetQRBind(WeChatUserInfo info) |
|
|
|
|
{ |
|
|
|
|
var res = await GetToken(info?.id); |
|
|
|
|
if (!res.success) return MessageModel<WeChatResponseUserInfo>.Fail(res.msg); |
|
|
|
|
if (!res.success) return ServiceResult<WeChatResponseUserInfo>.Fail(res.msg); |
|
|
|
|
var push = new WeChatQRDto |
|
|
|
|
{ |
|
|
|
|
expire_seconds = 604800, |
|
|
|
@ -236,16 +236,16 @@ namespace Tiobon.Core.Services |
|
|
|
|
data.id = info.userID; |
|
|
|
|
await this.BaseDal.Db.Insertable<WeChatQR>(weChatQR).ExecuteCommandAsync(); |
|
|
|
|
reData.usersData= data; |
|
|
|
|
return MessageModel<WeChatResponseUserInfo>.Success("获取二维码成功", reData); |
|
|
|
|
return ServiceResult<WeChatResponseUserInfo>.OprateSuccess("获取二维码成功", reData); |
|
|
|
|
} |
|
|
|
|
public async Task<MessageModel<WeChatResponseUserInfo>> PushCardMsg(WeChatCardMsgDataDto msg,string ip) |
|
|
|
|
public async Task<ServiceResult<WeChatResponseUserInfo>> PushCardMsg(WeChatCardMsgDataDto msg,string ip) |
|
|
|
|
{ |
|
|
|
|
var bindUser = await BaseDal.Db.Queryable<WeChatSub>().Where(t => t.SubFromPublicAccount == msg.info.id && t.CompanyID == msg.info.companyCode && t.IsUnBind == false && msg.info.userID.Contains(t.SubJobID)).SingleAsync(); |
|
|
|
|
if (bindUser == null) |
|
|
|
|
return MessageModel<WeChatResponseUserInfo>.Fail("用户不存在或者已经解绑!"); |
|
|
|
|
return ServiceResult<WeChatResponseUserInfo>.Fail("用户不存在或者已经解绑!"); |
|
|
|
|
var res = await GetToken(msg?.info?.id); |
|
|
|
|
if(!res.success) |
|
|
|
|
return MessageModel<WeChatResponseUserInfo>.Fail(res.msg); |
|
|
|
|
return ServiceResult<WeChatResponseUserInfo>.Fail(res.msg); |
|
|
|
|
WeChatResponseUserInfo reData = new WeChatResponseUserInfo(); |
|
|
|
|
reData.companyCode = msg.info.companyCode; |
|
|
|
|
reData.id = msg.info.id; |
|
|
|
@ -321,22 +321,22 @@ namespace Tiobon.Core.Services |
|
|
|
|
} |
|
|
|
|
if (reData.usersData.errcode.Equals(0)) |
|
|
|
|
{ |
|
|
|
|
return MessageModel<WeChatResponseUserInfo>.Success("卡片消息推送成功", reData); |
|
|
|
|
return ServiceResult<WeChatResponseUserInfo>.OprateSuccess("卡片消息推送成功", reData); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
return MessageModel<WeChatResponseUserInfo>.Success("卡片消息推送失败", reData); |
|
|
|
|
return ServiceResult<WeChatResponseUserInfo>.OprateSuccess("卡片消息推送失败", reData); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
catch (Exception ex) |
|
|
|
|
{ |
|
|
|
|
return MessageModel<WeChatResponseUserInfo>.Success($"卡片消息推送错误=>{ex.Message}", reData); |
|
|
|
|
return ServiceResult<WeChatResponseUserInfo>.OprateSuccess($"卡片消息推送错误=>{ex.Message}", reData); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public async Task<MessageModel<WeChatApiDto>> PushTxtMsg(WeChatPushTestDto msg) { |
|
|
|
|
public async Task<ServiceResult<WeChatApiDto>> PushTxtMsg(WeChatPushTestDto msg) { |
|
|
|
|
var res = await GetToken(msg.selectWeChat); |
|
|
|
|
if (!res.success) return res; |
|
|
|
|
var token = res.response.access_token; |
|
|
|
@ -346,7 +346,7 @@ namespace Tiobon.Core.Services |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
MessageModel<WeChatApiDto> messageModel = new MessageModel<WeChatApiDto>(); |
|
|
|
|
ServiceResult<WeChatApiDto> messageModel = new ServiceResult<WeChatApiDto>(); |
|
|
|
|
messageModel.success = true; |
|
|
|
|
//绑定用户 |
|
|
|
|
if (msg.selectOperate.Equals("one")) |
|
|
|
@ -383,7 +383,7 @@ namespace Tiobon.Core.Services |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
public async Task<MessageModel<WeChatApiDto>> PushText(string token,WeChatPushTestDto msg) { |
|
|
|
|
public async Task<ServiceResult<WeChatApiDto>> PushText(string token,WeChatPushTestDto msg) { |
|
|
|
|
|
|
|
|
|
object data = null; ; |
|
|
|
|
WeChatApiDto pushres = null; ; |
|
|
|
@ -502,15 +502,15 @@ namespace Tiobon.Core.Services |
|
|
|
|
} |
|
|
|
|
if (pushres.errcode.Equals(0)) |
|
|
|
|
{ |
|
|
|
|
return MessageModel<WeChatApiDto>.Success("推送成功", pushres); |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("推送成功", pushres); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
return MessageModel<WeChatApiDto>.Fail($"\r\n推送失败\r\n错误代码:{pushres.errcode}\r\n错误信息:{pushres.errmsg}", pushres); |
|
|
|
|
return ServiceResult<WeChatApiDto>.Fail($"\r\n推送失败\r\n错误代码:{pushres.errcode}\r\n错误信息:{pushres.errmsg}", pushres); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
public async Task<MessageModel<WeChatApiDto>> UpdateMenu(WeChatApiDto menu) |
|
|
|
|
public async Task<ServiceResult<WeChatApiDto>> UpdateMenu(WeChatApiDto menu) |
|
|
|
|
{ |
|
|
|
|
WeChatHelper.ConverMenuButtonForEvent(menu); |
|
|
|
|
var res = await GetToken(menu.id); |
|
|
|
@ -519,19 +519,19 @@ namespace Tiobon.Core.Services |
|
|
|
|
if (data.errcode.Equals(0)) |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
return MessageModel<WeChatApiDto>.Success("更新成功", data); |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("更新成功", data); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
return MessageModel<WeChatApiDto>.Success("更新失败", data); |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("更新失败", data); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
public async Task<MessageModel<WeChatResponseUserInfo>> GetBindUserInfo(WeChatUserInfo info) |
|
|
|
|
public async Task<ServiceResult<WeChatResponseUserInfo>> GetBindUserInfo(WeChatUserInfo info) |
|
|
|
|
{ |
|
|
|
|
var bindUser = await BaseDal.Db.Queryable<WeChatSub>().Where(t => t.SubFromPublicAccount == info.id && t.CompanyID == info.companyCode && info.userID.Equals(t.SubJobID) && t.IsUnBind == false ).FirstAsync(); |
|
|
|
|
if (bindUser == null) return MessageModel<WeChatResponseUserInfo>.Fail("用户不存在或者已经解绑!"); |
|
|
|
|
if (bindUser == null) return ServiceResult<WeChatResponseUserInfo>.Fail("用户不存在或者已经解绑!"); |
|
|
|
|
var res = await GetToken(info.id); |
|
|
|
|
if(!res.success) return MessageModel<WeChatResponseUserInfo>.Fail(res.msg); |
|
|
|
|
if(!res.success) return ServiceResult<WeChatResponseUserInfo>.Fail(res.msg); |
|
|
|
|
var token = res.response.access_token; |
|
|
|
|
WeChatResponseUserInfo reData = new WeChatResponseUserInfo(); |
|
|
|
|
reData.companyCode = info.companyCode; |
|
|
|
@ -540,24 +540,24 @@ namespace Tiobon.Core.Services |
|
|
|
|
reData.usersData = data; |
|
|
|
|
if (data.errcode.Equals(0)) |
|
|
|
|
{ |
|
|
|
|
return MessageModel<WeChatResponseUserInfo>.Success("用户信息获取成功", reData); |
|
|
|
|
return ServiceResult<WeChatResponseUserInfo>.OprateSuccess("用户信息获取成功", reData); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
return MessageModel<WeChatResponseUserInfo>.Fail("用户信息获取失败", reData); |
|
|
|
|
return ServiceResult<WeChatResponseUserInfo>.Fail("用户信息获取失败", reData); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
public async Task<MessageModel<WeChatResponseUserInfo>> UnBind(WeChatUserInfo info) |
|
|
|
|
public async Task<ServiceResult<WeChatResponseUserInfo>> UnBind(WeChatUserInfo info) |
|
|
|
|
{ |
|
|
|
|
var bindUser = await BaseDal.Db.Queryable<WeChatSub>().Where(t => t.SubFromPublicAccount == info.id && t.CompanyID == info.companyCode && info.userID.Equals(t.SubJobID) && t.IsUnBind == false ).FirstAsync(); |
|
|
|
|
if (bindUser == null) return MessageModel<WeChatResponseUserInfo>.Fail("用户不存在或者已经解绑!"); |
|
|
|
|
if (bindUser == null) return ServiceResult<WeChatResponseUserInfo>.Fail("用户不存在或者已经解绑!"); |
|
|
|
|
WeChatResponseUserInfo reData = new WeChatResponseUserInfo(); |
|
|
|
|
reData.companyCode = info.companyCode; |
|
|
|
|
reData.id = info.id; |
|
|
|
|
bindUser.IsUnBind = true; |
|
|
|
|
bindUser.SubUserRefTime = DateTime.Now; |
|
|
|
|
await BaseDal.Db.Updateable<WeChatSub>(bindUser).UpdateColumns(t=> new{ t.IsUnBind,t.SubUserRefTime}).ExecuteCommandAsync(); |
|
|
|
|
return MessageModel<WeChatResponseUserInfo>.Success("用户解绑成功", reData); |
|
|
|
|
return ServiceResult<WeChatResponseUserInfo>.OprateSuccess("用户解绑成功", reData); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public async Task<string> HandleWeChat(WeChatXMLDto weChat) |
|
|
|
|