|
|
|
@ -25,9 +25,9 @@ namespace Tiobon.Core.Services |
|
|
|
|
{ |
|
|
|
|
this._unitOfWorkManage = unitOfWorkManage; |
|
|
|
|
this._logger = logger; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
public async Task<ServiceResult<WeChatApiDto>> GetToken(string publicAccount) |
|
|
|
|
{ |
|
|
|
|
{ |
|
|
|
|
var config = await this.QueryById(publicAccount); |
|
|
|
|
if (config == null) ServiceResult<string>.OprateSuccess($"公众号{publicAccount}未维护至系统");//还没过期,直接返回 |
|
|
|
|
if (config.tokenExpiration > DateTime.Now) |
|
|
|
@ -44,11 +44,11 @@ namespace Tiobon.Core.Services |
|
|
|
|
config.token = data.access_token; |
|
|
|
|
config.tokenExpiration = DateTime.Now.AddSeconds(data.expires_in); |
|
|
|
|
await this.Update(config); |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("",data); |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("", data); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateFailed($"\r\n获取Token失败\r\n错误代码:{data.errcode}\r\n错误信息:{data.errmsg}"); |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateFailed($"\r\n获取Token失败\r\n错误代码:{data.errcode}\r\n错误信息:{data.errmsg}"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
public async Task<ServiceResult<WeChatApiDto>> RefreshToken(string publicAccount) |
|
|
|
@ -72,15 +72,15 @@ namespace Tiobon.Core.Services |
|
|
|
|
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 (!res.Success) return res; |
|
|
|
|
var data = await WeChatHelper.GetTemplate(res.Data.access_token); |
|
|
|
|
if (data.errcode.Equals(0)) |
|
|
|
|
{ |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("", data); |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("", data); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess($"\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> |
|
|
|
@ -91,8 +91,8 @@ namespace Tiobon.Core.Services |
|
|
|
|
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 (!res.Success) return res; |
|
|
|
|
var data = await WeChatHelper.GetMenu(res.Data.access_token); |
|
|
|
|
if (data.errcode.Equals(0)) |
|
|
|
|
{ |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("", data); |
|
|
|
@ -105,14 +105,14 @@ namespace Tiobon.Core.Services |
|
|
|
|
public async Task<ServiceResult<WeChatApiDto>> GetSubUsers(string id) |
|
|
|
|
{ |
|
|
|
|
var res = await GetToken(id); |
|
|
|
|
if (!res.success) return res; |
|
|
|
|
var data = await WeChatHelper.GetUsers(res.response.access_token); |
|
|
|
|
if (!res.Success) return res; |
|
|
|
|
var data = await WeChatHelper.GetUsers(res.Data.access_token); |
|
|
|
|
if (data.errcode.Equals(0)) |
|
|
|
|
{ |
|
|
|
|
data.users = new List<WeChatApiDto>(); |
|
|
|
|
foreach (var openid in data.data.openid) |
|
|
|
|
{ |
|
|
|
|
data.users.Add(await WeChatHelper.GetUserInfo(res.response.access_token, openid)); |
|
|
|
|
data.users.Add(await WeChatHelper.GetUserInfo(res.Data.access_token, openid)); |
|
|
|
|
} |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("", data); |
|
|
|
|
} |
|
|
|
@ -121,11 +121,11 @@ namespace Tiobon.Core.Services |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess($"\r\n获取订阅用户失败\r\n错误代码:{data.errcode}\r\n错误信息:{data.errmsg}", data); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
public async Task<ServiceResult<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); |
|
|
|
|
var res = await GetToken(id); |
|
|
|
|
if (!res.Success) return res; |
|
|
|
|
var data = await WeChatHelper.GetUserInfo(res.Data.access_token, openid); |
|
|
|
|
if (data.errcode.Equals(0)) |
|
|
|
|
{ |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("", data); |
|
|
|
@ -135,8 +135,8 @@ namespace Tiobon.Core.Services |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess($"\r\n获取订阅用户失败\r\n错误代码:{data.errcode}\r\n错误信息:{data.errmsg}", data); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
public async Task<string> Valid(WeChatValidDto validDto,string body) |
|
|
|
|
{ |
|
|
|
|
public async Task<string> Valid(WeChatValidDto validDto, string body) |
|
|
|
|
{ |
|
|
|
|
WeChatXMLDto weChatData = null; |
|
|
|
|
string objReturn = null; |
|
|
|
|
try |
|
|
|
@ -204,9 +204,9 @@ namespace Tiobon.Core.Services |
|
|
|
|
return objReturn; |
|
|
|
|
} |
|
|
|
|
public async Task<ServiceResult<WeChatResponseUserInfo>> GetQRBind(WeChatUserInfo info) |
|
|
|
|
{ |
|
|
|
|
{ |
|
|
|
|
var res = await GetToken(info?.id); |
|
|
|
|
if (!res.success) return ServiceResult<WeChatResponseUserInfo>.OprateFailed(res.msg); |
|
|
|
|
if (!res.Success) return ServiceResult<WeChatResponseUserInfo>.OprateFailed(res.Message); |
|
|
|
|
var push = new WeChatQRDto |
|
|
|
|
{ |
|
|
|
|
expire_seconds = 604800, |
|
|
|
@ -223,7 +223,7 @@ namespace Tiobon.Core.Services |
|
|
|
|
reData.companyCode = info.companyCode; |
|
|
|
|
reData.id = info.id; |
|
|
|
|
var pushJosn = JsonHelper.GetJSON<WeChatQRDto>(push); |
|
|
|
|
var data = await WeChatHelper.GetQRCode(res.response.access_token, pushJosn); |
|
|
|
|
var data = await WeChatHelper.GetQRCode(res.Data.access_token, pushJosn); |
|
|
|
|
WeChatQR weChatQR = new WeChatQR |
|
|
|
|
{ |
|
|
|
|
QRbindCompanyID = info.companyCode, |
|
|
|
@ -232,23 +232,23 @@ namespace Tiobon.Core.Services |
|
|
|
|
QRcrateTime = DateTime.Now, |
|
|
|
|
QRpublicAccount = info.id, |
|
|
|
|
QRticket = data.ticket |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
data.id = info.userID; |
|
|
|
|
await this.BaseDal.Db.Insertable<WeChatQR>(weChatQR).ExecuteCommandAsync(); |
|
|
|
|
reData.usersData= data; |
|
|
|
|
reData.usersData = data; |
|
|
|
|
return ServiceResult<WeChatResponseUserInfo>.OprateSuccess("获取二维码成功", reData); |
|
|
|
|
} |
|
|
|
|
public async Task<ServiceResult<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 ServiceResult<WeChatResponseUserInfo>.OprateFailed("用户不存在或者已经解绑!"); |
|
|
|
|
var res = await GetToken(msg?.info?.id); |
|
|
|
|
if(!res.success) |
|
|
|
|
return ServiceResult<WeChatResponseUserInfo>.OprateFailed(res.msg); |
|
|
|
|
if (!res.Success) |
|
|
|
|
return ServiceResult<WeChatResponseUserInfo>.OprateFailed(res.Message); |
|
|
|
|
WeChatResponseUserInfo reData = new WeChatResponseUserInfo(); |
|
|
|
|
reData.companyCode = msg.info.companyCode; |
|
|
|
|
reData.id = msg.info.id; |
|
|
|
|
reData.id = msg.info.id; |
|
|
|
|
try |
|
|
|
|
{ |
|
|
|
|
var pushData = new WeChatPushCardMsgDto |
|
|
|
@ -296,7 +296,7 @@ namespace Tiobon.Core.Services |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
var pushJson = JsonHelper.GetJSON<WeChatPushCardMsgDto>(pushData); |
|
|
|
|
var data = await WeChatHelper.SendCardMsg(res.response.access_token, pushJson); |
|
|
|
|
var data = await WeChatHelper.SendCardMsg(res.Data.access_token, pushJson); |
|
|
|
|
reData.usersData = data; |
|
|
|
|
try |
|
|
|
|
{ |
|
|
|
@ -327,27 +327,28 @@ namespace Tiobon.Core.Services |
|
|
|
|
{ |
|
|
|
|
return ServiceResult<WeChatResponseUserInfo>.OprateSuccess("卡片消息推送失败", reData); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
catch (Exception ex) |
|
|
|
|
{ |
|
|
|
|
return ServiceResult<WeChatResponseUserInfo>.OprateSuccess($"卡片消息推送错误=>{ex.Message}", reData); |
|
|
|
|
{ |
|
|
|
|
return ServiceResult<WeChatResponseUserInfo>.OprateSuccess($"卡片消息推送错误=>{ex.Message}", reData); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public async Task<ServiceResult<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; |
|
|
|
|
if (!res.Success) return res; |
|
|
|
|
var token = res.Data.access_token; |
|
|
|
|
if (msg.selectBindOrSub.Equals("sub")) |
|
|
|
|
{ |
|
|
|
|
{ |
|
|
|
|
return await PushText(token, msg); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
ServiceResult<WeChatApiDto> messageModel = new ServiceResult<WeChatApiDto>(); |
|
|
|
|
messageModel.success = true; |
|
|
|
|
messageModel.Success = true; |
|
|
|
|
//绑定用户 |
|
|
|
|
if (msg.selectOperate.Equals("one")) |
|
|
|
|
{ |
|
|
|
@ -357,11 +358,11 @@ namespace Tiobon.Core.Services |
|
|
|
|
{ |
|
|
|
|
msg.selectUser = item.SubUserOpenID; |
|
|
|
|
var info = await PushText(token, msg); |
|
|
|
|
if (!info.success) |
|
|
|
|
if (!info.Success) |
|
|
|
|
{ |
|
|
|
|
messageModel.success = false; |
|
|
|
|
messageModel.Success = false; |
|
|
|
|
} |
|
|
|
|
messageModel.msg += info.msg; |
|
|
|
|
messageModel.Message += info.Message; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
@ -372,18 +373,19 @@ namespace Tiobon.Core.Services |
|
|
|
|
{ |
|
|
|
|
msg.selectUser = item.SubUserOpenID; |
|
|
|
|
var info = await PushText(token, msg); |
|
|
|
|
if (!info.success) |
|
|
|
|
if (!info.Success) |
|
|
|
|
{ |
|
|
|
|
messageModel.success = false; |
|
|
|
|
messageModel.Success = false; |
|
|
|
|
} |
|
|
|
|
messageModel.msg += info.msg; |
|
|
|
|
messageModel.Message += info.Message; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return messageModel; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
public async Task<ServiceResult<WeChatApiDto>> PushText(string token,WeChatPushTestDto msg) { |
|
|
|
|
public async Task<ServiceResult<WeChatApiDto>> PushText(string token, WeChatPushTestDto msg) |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
object data = null; ; |
|
|
|
|
WeChatApiDto pushres = null; ; |
|
|
|
@ -514,25 +516,25 @@ namespace Tiobon.Core.Services |
|
|
|
|
{ |
|
|
|
|
WeChatHelper.ConverMenuButtonForEvent(menu); |
|
|
|
|
var res = await GetToken(menu.id); |
|
|
|
|
if (!res.success) return res; |
|
|
|
|
var data = await WeChatHelper.SetMenu(res.response.access_token, JsonHelper.ObjToJson(menu.menu)); |
|
|
|
|
if (!res.Success) return res; |
|
|
|
|
var data = await WeChatHelper.SetMenu(res.Data.access_token, JsonHelper.ObjToJson(menu.menu)); |
|
|
|
|
if (data.errcode.Equals(0)) |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("更新成功", data); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
{ |
|
|
|
|
return ServiceResult<WeChatApiDto>.OprateSuccess("更新失败", data); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
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(); |
|
|
|
|
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 ServiceResult<WeChatResponseUserInfo>.OprateFailed("用户不存在或者已经解绑!"); |
|
|
|
|
var res = await GetToken(info.id); |
|
|
|
|
if(!res.success) return ServiceResult<WeChatResponseUserInfo>.OprateFailed(res.msg); |
|
|
|
|
var token = res.response.access_token; |
|
|
|
|
if (!res.Success) return ServiceResult<WeChatResponseUserInfo>.OprateFailed(res.Message); |
|
|
|
|
var token = res.Data.access_token; |
|
|
|
|
WeChatResponseUserInfo reData = new WeChatResponseUserInfo(); |
|
|
|
|
reData.companyCode = info.companyCode; |
|
|
|
|
reData.id = info.id; |
|
|
|
@ -545,18 +547,18 @@ namespace Tiobon.Core.Services |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
return ServiceResult<WeChatResponseUserInfo>.OprateFailed("用户信息获取失败", reData); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
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(); |
|
|
|
|
{ |
|
|
|
|
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 ServiceResult<WeChatResponseUserInfo>.OprateFailed("用户不存在或者已经解绑!"); |
|
|
|
|
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(); |
|
|
|
|
await BaseDal.Db.Updateable<WeChatSub>(bindUser).UpdateColumns(t => new { t.IsUnBind, t.SubUserRefTime }).ExecuteCommandAsync(); |
|
|
|
|
return ServiceResult<WeChatResponseUserInfo>.OprateSuccess("用户解绑成功", reData); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -792,7 +794,7 @@ namespace Tiobon.Core.Services |
|
|
|
|
/// <returns></returns> |
|
|
|
|
|
|
|
|
|
private async Task<string> QRBind(WeChatXMLDto weChat) |
|
|
|
|
{ |
|
|
|
|
{ |
|
|
|
|
var ticket = await BaseDal.Db.Queryable<WeChatQR>().InSingleAsync(weChat.Ticket); |
|
|
|
|
if (ticket == null) throw new Exception("ticket未找到"); |
|
|
|
|
if (ticket.QRisUsed) throw new Exception("ticket已被使用"); |
|
|
|
@ -800,7 +802,7 @@ namespace Tiobon.Core.Services |
|
|
|
|
|
|
|
|
|
var bindUser = await BaseDal.Db.Queryable<WeChatSub>().Where(t => t.SubFromPublicAccount == ticket.QRpublicAccount && t.CompanyID == ticket.QRbindCompanyID && t.SubJobID == ticket.QRbindJobID).SingleAsync(); |
|
|
|
|
bool isNewBind; |
|
|
|
|
if (bindUser == null ) |
|
|
|
|
if (bindUser == null) |
|
|
|
|
{ |
|
|
|
|
isNewBind = true; |
|
|
|
|
bindUser = new WeChatSub |
|
|
|
|