SiteService.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. using Fuel.Core;
  2. using Fuel.Core.Models;
  3. using Fuel.Core.Nozzle.Dto;
  4. using Fuel.Core.Transactions.Dto;
  5. using Fuel.Core.WechatServer;
  6. using FuelServer.Core.Entity;
  7. using Newtonsoft.Json;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Net;
  12. using System.Net.Http.Headers;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. namespace Fuel.Application.Service
  16. {
  17. public class SiteService: ISiteService
  18. {
  19. public readonly IFreeSql _fsql;
  20. public SiteService(IFreeSql freeSql)
  21. {
  22. _fsql = freeSql;
  23. }
  24. public async Task<ServiceResponse> GetSiteInfo()
  25. {
  26. Guid Buid = HttpRequestReader.GetCurrentBuId(); //站点id
  27. Guid WachatID = HttpRequestReader.GetWachatID(); //用户
  28. var userSession = WechatUserSessionRepo.GetUserSession(WachatID.ToString());
  29. if (userSession == null)
  30. {
  31. return ServiceResponse.Error(HttpStatusCode.NotAcceptable, "未找到用户!");
  32. }
  33. var user = _fsql.Select<miniprogramusers>().Where(_ => _.UnionId == userSession.unionid).First();
  34. var site = _fsql.Select<businessunitinfo>().Where(_ => _.Buid == Buid ).First();
  35. var SiteInfo = new {
  36. site = new {
  37. Name = site.Name,//站点名称
  38. GpsCoordinates = site.GpsCoordinates,//油站经纬度
  39. PaymentMode = site.PaymentMode,//预支付:1,后支付:2
  40. },
  41. userInfo = new
  42. {
  43. UserName = user.UserName,//用户名称
  44. UserAvatarUrl = user.UserAvatarUrl,//用户头像地址
  45. UserAddress = user.Address,//用户地址
  46. UserPhoneNumber = user.UserPhoneNumber//用户手机号
  47. }
  48. };
  49. return ServiceResponse.Ok(SiteInfo);
  50. }
  51. public async Task<ServiceResponse> GetAppidSecret(string Code)
  52. {
  53. Guid Buid = HttpRequestReader.GetCurrentBuId(); //站点id
  54. var site = _fsql.Select<businessunitinfo>().Where(_ => _.Buid == Buid).First();
  55. if (site == null)
  56. {
  57. return ServiceResponse.Error("获取站点小程序appid与Secret失败,BUID:" + Buid);
  58. }
  59. WechatUserSessionResponse userSession =
  60. await WechatLoginCodeToSessionKeyNOpenId(Code, site.Appid,site.Secret);
  61. AccessTokenManager.GetAccessTokenAsync(site.Appid, site.Secret);
  62. var thirdSessionKey = GenerateThirdSessionKey();
  63. userSession.unionid = userSession.openid;
  64. WechatUserSessionRepo.AddUserSession(thirdSessionKey, userSession);
  65. return ServiceResponse.Ok(thirdSessionKey);
  66. }
  67. /// <summary>
  68. /// 微信小程序登录
  69. /// </summary>
  70. /// <param name="jsCode"></param>
  71. /// <param name="AppId"></param>
  72. /// <param name="AppSecret"></param>
  73. /// <returns></returns>
  74. public static async Task<WechatUserSessionResponse> WechatLoginCodeToSessionKeyNOpenId(string jsCode, string AppId, string AppSecret)
  75. {
  76. string url = string.Format(WechatConstants.Jscode2sessionUrl,
  77. AppId, AppSecret, jsCode);
  78. HttpClient client = new HttpClient();
  79. client.DefaultRequestHeaders.Accept.Clear();
  80. client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
  81. HttpResponseMessage response = await client.GetAsync(url);
  82. if (response.IsSuccessStatusCode)
  83. {
  84. var responseContent = await response.Content.ReadAsStringAsync();
  85. var userSession = JsonConvert.DeserializeObject<WechatUserSessionResponse>(responseContent);
  86. return userSession;
  87. }
  88. else
  89. {
  90. return null;
  91. }
  92. }
  93. /// <summary>
  94. /// 添加小程序用户
  95. /// </summary>
  96. /// <param name="type">1:新增,2:更新</param>
  97. /// <param name="UserName"></param>
  98. /// <param name="UserAvatarUrl"></param>
  99. /// <param name="UserPhoneNumber"></param>
  100. /// <param name="Address"></param>
  101. /// <returns></returns>
  102. public async Task<ServiceResponse> AddMiniprogramUser(string type,
  103. string UserName,
  104. string UserAvatarUrl,
  105. string UserPhoneNumber,
  106. string Address)
  107. {
  108. Guid Buid = HttpRequestReader.GetCurrentBuId(); //站点id
  109. Guid WachatID = HttpRequestReader.GetWachatID(); //用户
  110. var userSession = WechatUserSessionRepo.GetUserSession(WachatID.ToString());
  111. if (userSession == null)
  112. {
  113. return ServiceResponse.Error(HttpStatusCode.NotAcceptable, "未找到用户!");
  114. }
  115. var miniprogramusers = _fsql.Select<miniprogramusers>().Where(_ => _.UnionId == userSession.unionid).First();
  116. if (miniprogramusers != null)
  117. {
  118. return ServiceResponse.Ok(miniprogramusers);
  119. }
  120. miniprogramusers user = new miniprogramusers();
  121. user.Buid = Buid;
  122. user.UserName = UserName;
  123. user.UserAvatarUrl = UserAvatarUrl;
  124. user.UserPhoneNumber = UserPhoneNumber;
  125. user.Address = Address;
  126. user.OpenId = userSession.openid;
  127. user.UnionId = userSession.unionid;
  128. int affectedRows = _fsql.Insert<miniprogramusers>().AppendData(user).ExecuteAffrows();
  129. if (affectedRows <= 0)
  130. {
  131. return ServiceResponse.Error("用户信息插入失败");
  132. }
  133. return ServiceResponse.Ok(user);
  134. }
  135. private string GenerateThirdSessionKey()
  136. {
  137. var thirdSessionKey = Guid.NewGuid();
  138. return thirdSessionKey.ToString();
  139. }
  140. }
  141. }