using Fuel.Core; using Fuel.Core.Models; using Fuel.Core.Nozzle.Dto; using Fuel.Core.Transactions.Dto; using Fuel.Core.WechatServer; using FuelServer.Core.Entity; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; using static FreeSql.Internal.GlobalFilter; namespace Fuel.Application.Service { public class SiteService : ISiteService { public readonly IFreeSql _fsql; public SiteService(IFreeSql freeSql) { _fsql = freeSql; } public async Task AddSite(AddSite site) { Guid Buid = Guid.NewGuid(); businessunitinfo bu = new businessunitinfo(); bu.Buid = Buid; bu.Address = site.Address; bu.Name = site.Name; bu.Appid = site.AppId; bu.Secret = site.Secret; bu.GpsCoordinates = site.GpsCoordinates; bu.PaymentMode = site.PaymentMode == "预支付" ? 1 : 2; bu.Phone = site.Phone; int affectedRows = _fsql.Insert().AppendData(bu).ExecuteAffrows(); if (!string.IsNullOrEmpty(site.PayType)) { configuration configuration = new configuration(); configuration.Type = 1; configuration.Value = site.PayTypeConfiguration; configuration.Name = site.PayType; configuration.Buid = Buid; _fsql.Insert().AppendData(configuration).ExecuteAffrows(); } if (!string.IsNullOrEmpty(site.MessageTemplate)) { configuration Message = new configuration(); Message.Type = 2; Message.Value = site.MessageTemplateConfiguration; Message.Name = site.MessageTemplate; Message.Buid = Buid; _fsql.Insert().AppendData(Message).ExecuteAffrows(); } return ServiceResponse.Ok(bu); } public async Task GetSiteInfo() { Guid Buid = HttpRequestReader.GetCurrentBuId(); //站点id string WachatID = HttpRequestReader.GetWachatID(); //用户 var userSession = WechatUserSessionRepo.GetUserSession(WachatID.ToString()); if (userSession == null) { return ServiceResponse.Error(HttpStatusCode.NonAuthoritativeInformation, "未找到用户!"); } var user = _fsql.Select().Where(_ => _.OpenId == userSession.openid).First(); var site = _fsql.Select().Where(_ => _.Buid == Buid).First(); var SiteInfo = new { site = new { Name = site.Name,//站点名称 GpsCoordinates = site.GpsCoordinates,//油站经纬度 PaymentMode = site.PaymentMode,//预支付:1,后支付:2 }, userInfo = new { UserName = user?.UserName,//用户名称 UserAvatarUrl = user?.UserAvatarUrl,//用户头像地址 UserAddress = user?.Address,//用户地址 UserPhoneNumber = user?.UserPhoneNumber//用户手机号 } }; return ServiceResponse.Ok(SiteInfo); } public async Task GetSiteInformationAndConfiguration() { Guid Buid = HttpRequestReader.GetCurrentBuId(); //站点id var site = _fsql.Select().ToList(); var payinfo = _fsql.Select().ToList(); var SiteInfo = new[] { new { Name = "", Address = "", Phone = "", Appid = "", Secret = "", GpsCoordinates = "", paytype = "", PaymentMode = "" } }.ToList(); SiteInfo.Clear(); foreach (var itme in site) { var PaymentMode = itme.PaymentMode == 1 ? "预支付" : "后支付"; string paytype = string.Empty; if (payinfo.Count > 0) { paytype = payinfo.FirstOrDefault(a => a.Buid == Buid && a.Type == 1)?.Name;//获取支付类型 } SiteInfo.Add( new { Name = itme.Name, Address = itme.Address, Phone = itme.Phone, Appid = itme.Appid, Secret = itme.Secret, GpsCoordinates = itme.GpsCoordinates, paytype = paytype, PaymentMode = PaymentMode } ); } return ServiceResponse.Ok(SiteInfo); } public async Task GetAppidSecret(string Code) { Guid Buid = HttpRequestReader.GetCurrentBuId(); //站点id var site = _fsql.Select().Where(_ => _.Buid == Buid).First(); if (site == null) { return ServiceResponse.Error("获取站点小程序appid与Secret失败,BUID:" + Buid); } WechatUserSessionResponse userSession = await WechatLoginCodeToSessionKeyNOpenId(Code, site.Appid, site.Secret); if (userSession == null) { return ServiceResponse.Error("登录失败"); } AccessTokenManager.GetAccessTokenAsync(site.Appid, site.Secret); WechatUserSessionRepo.AddUserSession(userSession.openid, userSession); return ServiceResponse.Ok(userSession.openid); } /// /// 微信小程序登录 /// /// /// /// /// public static async Task WechatLoginCodeToSessionKeyNOpenId(string jsCode, string AppId, string AppSecret) { string url = string.Format(WechatConstants.Jscode2sessionUrl, AppId, AppSecret, jsCode); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = await client.GetAsync(url); if (response.IsSuccessStatusCode) { var responseContent = await response.Content.ReadAsStringAsync(); var userSession = JsonConvert.DeserializeObject(responseContent); return userSession; } else { return null; } } /// /// 添加小程序用户 /// /// 1:新增,2:更新 /// /// /// /// /// public async Task AddMiniprogramUser(string type, AddWechatUser wechatUser) { Guid Buid = HttpRequestReader.GetCurrentBuId(); //站点id string WachatID = HttpRequestReader.GetWachatID(); //用户 var userSession = WechatUserSessionRepo.GetUserSession(WachatID.ToString()); if (userSession == null) { return ServiceResponse.Error(HttpStatusCode.NonAuthoritativeInformation, "未找到用户!"); } var miniprogramusers = _fsql.Select().Where(_ => _.OpenId == userSession.openid).First(); if (miniprogramusers != null) { return ServiceResponse.Ok(miniprogramusers); } string decryptedData = WeChatService.Decrypt(wechatUser.encryptedData, wechatUser.iv, userSession.session_key); JObject jsonObject = JObject.Parse(decryptedData); string phoneNumber = jsonObject["phoneNumber"].ToString(); miniprogramusers user = new miniprogramusers(); user.Buid = Buid; user.UserName = wechatUser.UserName; user.UserAvatarUrl = wechatUser.UserAvatarUrl; user.UserPhoneNumber = phoneNumber; user.Address = wechatUser.Address; user.OpenId = userSession.openid; user.UnionId = userSession.unionid; int affectedRows = _fsql.Insert().AppendData(user).ExecuteAffrows(); if (affectedRows <= 0) { return ServiceResponse.Error("用户信息插入失败"); } return ServiceResponse.Ok(user); } private string GenerateThirdSessionKey() { var thirdSessionKey = Guid.NewGuid(); return thirdSessionKey.ToString(); } } }