123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- 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<ServiceResponse> 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<businessunitinfo>().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<configuration>().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<configuration>().AppendData(Message).ExecuteAffrows();
- }
- return ServiceResponse.Ok(bu);
- }
- public async Task<ServiceResponse> 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<miniprogramusers>().Where(_ => _.OpenId == userSession.openid).First();
- var site = _fsql.Select<businessunitinfo>().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<ServiceResponse> GetSiteInformationAndConfiguration()
- {
- Guid Buid = HttpRequestReader.GetCurrentBuId(); //站点id
- var site = _fsql.Select<businessunitinfo>().ToList();
- var payinfo = _fsql.Select<configuration>().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<ServiceResponse> GetAppidSecret(string Code)
- {
- Guid Buid = HttpRequestReader.GetCurrentBuId(); //站点id
- var site = _fsql.Select<businessunitinfo>().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);
- }
- /// <summary>
- /// 微信小程序登录
- /// </summary>
- /// <param name="jsCode"></param>
- /// <param name="AppId"></param>
- /// <param name="AppSecret"></param>
- /// <returns></returns>
- public static async Task<WechatUserSessionResponse> 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<WechatUserSessionResponse>(responseContent);
- return userSession;
- }
- else
- {
- return null;
- }
- }
- /// <summary>
- /// 添加小程序用户
- /// </summary>
- /// <param name="type">1:新增,2:更新</param>
- /// <param name="UserName"></param>
- /// <param name="UserAvatarUrl"></param>
- /// <param name="UserPhoneNumber"></param>
- /// <param name="Address"></param>
- /// <returns></returns>
- public async Task<ServiceResponse> 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<miniprogramusers>().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<miniprogramusers>().AppendData(user).ExecuteAffrows();
- if (affectedRows <= 0)
- {
- return ServiceResponse.Error("用户信息插入失败");
- }
- return ServiceResponse.Ok(user);
- }
- private string GenerateThirdSessionKey()
- {
- var thirdSessionKey = Guid.NewGuid();
- return thirdSessionKey.ToString();
- }
- }
- }
|