BundleController.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Mvc;
  6. using Microsoft.Extensions.Options;
  7. using Winsoft.GOV.XF.WebApi.WXCore.Services;
  8. using Senparc.Weixin.Entities;
  9. using Microsoft.Extensions.Logging;
  10. using Winsoft.GOV.XF.WebApi.WXCore.Models;
  11. using Senparc.Weixin.MP.CoreMvcExtension;
  12. using Winsoft.GOV.XF.WebApi.WXCore.Filters;
  13. using Winsoft.GOV.XF.WebApi.WXCore.Helpers;
  14. using System.Net.Http.Headers;
  15. using System.IO;
  16. using Microsoft.AspNetCore.Http;
  17. using Newtonsoft.Json;
  18. using System.Text.RegularExpressions;
  19. // For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
  20. namespace Winsoft.GOV.XF.WebApi.WXCore.Controllers
  21. {
  22. [Route("api/[controller]")]
  23. public class BundleController : BaseController
  24. {
  25. UsersService _usersService;
  26. BundlesService _bundlesService;
  27. AssetsService _assetsService;
  28. ImagesService _imagesService;
  29. XFApiService _xfApiService;
  30. public BundleController(IOptions<SenparcWeixinSetting> senparcWeixinSetting,
  31. ILoggerFactory loggerFactory, UsersService usersService,
  32. BundlesService bundlesService, AssetsService assetsService,
  33. ImagesService imagesService, XFApiService xfApiService) : base(senparcWeixinSetting, loggerFactory)
  34. {
  35. _usersService = usersService;
  36. _bundlesService = bundlesService;
  37. _assetsService = assetsService;
  38. _imagesService = imagesService;
  39. _xfApiService = xfApiService;
  40. }
  41. // GET: api/values
  42. [HttpGet("{id}")]
  43. [Produces(typeof(Bundle))]
  44. [WeixinInternalRequest("访问被拒绝,请通过微信客户端访问!", "nofilter")]
  45. [WXOAuthCheck(appId: null, oauthCallbackUrl: "api/Auth")]
  46. public async Task<IActionResult> Get(string id)
  47. {
  48. Bundle b = await _bundlesService.Get(id);
  49. if (b == null)
  50. return BadRequest();
  51. return Ok(b);
  52. }
  53. [HttpGet("detail/{id}")]
  54. [Produces(typeof(Bundle))]
  55. [WeixinInternalRequest("访问被拒绝,请通过微信客户端访问!", "nofilter")]
  56. [WXOAuthCheck(appId: null, oauthCallbackUrl: "api/Auth")]
  57. public async Task<IActionResult> GetDetail(string id)
  58. {
  59. Bundle b = await _bundlesService.GetDetail(id);
  60. if (b == null)
  61. return BadRequest();
  62. return Ok(b);
  63. }
  64. [HttpGet("all")]
  65. [Produces(typeof(IEnumerable<Bundle>))]
  66. [WeixinInternalRequest("访问被拒绝,请通过微信客户端访问!", "nofilter")]
  67. [WXOAuthCheck(appId: null, oauthCallbackUrl: "api/Auth")]
  68. public async Task<IActionResult> GetAll()
  69. {
  70. IEnumerable<Bundle> list ;
  71. WXUser u = await _usersService.GetUser(HttpContext.Session.GetString("OpenId"));
  72. if (u != null)
  73. {
  74. list = await _bundlesService.GetByUserId(u.Id);
  75. if (list != null)
  76. return Ok(list);
  77. }
  78. return Ok(new List<Bundle>());
  79. }
  80. [HttpGet("generate/{id}/{ciphertext}")]
  81. [Produces(typeof(string))]
  82. public async Task<IActionResult> GenerateShareURL(string id, string ciphertext)
  83. {
  84. Bundle b = await _bundlesService.Get(id);
  85. if (b == null)
  86. return BadRequest("非法请求");
  87. string data = ciphertext.AESEncrypt(b.Key);
  88. BundleAccessToken a = JsonConvert.DeserializeObject<BundleAccessToken>(data);
  89. if (a == null)
  90. return BadRequest("非法请求");
  91. string multimediaURL = _bundlesService.GenerateShareURL(b, a, HttpContext.Request.Cookies["BaseUrl"]);
  92. if (!String.IsNullOrEmpty(multimediaURL))
  93. return Ok(multimediaURL);
  94. return BadRequest("无权限发布");
  95. }
  96. [HttpGet("getShareInfo/{id}/{ciphertext}")]
  97. public async Task<IActionResult> GetShareInfo(string id, string ciphertext)
  98. {
  99. Bundle b = await _bundlesService.GetDetail(id);
  100. if (b == null)
  101. return BadRequest("非法请求");
  102. string data = ciphertext.AESDecrypt(b.Key);
  103. BundleAccessToken a = JsonConvert.DeserializeObject<BundleAccessToken>(data);
  104. if (a == null)
  105. return BadRequest("非法请求");
  106. if (a.Expire != -1)
  107. {
  108. if (a.Expire < DateTime.Now.ToTimeStamp())
  109. return BadRequest("已过期");
  110. }
  111. return Ok(b);
  112. }
  113. // POST api/values
  114. [HttpPost]
  115. [Produces(typeof(string))]
  116. [WeixinInternalRequest("访问被拒绝,请通过微信客户端访问!", "nofilter")]
  117. [WXOAuthCheck(appId: null, oauthCallbackUrl: "api/Auth")]
  118. public async Task<IActionResult> Post([FromBody] Bundle value)
  119. {
  120. foreach(Asset a in value.Assets)
  121. {
  122. if (a.AssetType == AssetType.Image)
  123. {
  124. if (!_imagesService.SaveToDisk(a))
  125. return BadRequest("不是有效的图片格式");
  126. }
  127. //else if (a.AssetType == AssetType.Positon)
  128. // await _assetsService.Add(a);
  129. }
  130. string failsMessage = "";
  131. value.County_id = "004038694b4540c4b218cb22d011e10e";
  132. value.Unit_id = "2014101416995276299";
  133. value.OpenID = HttpContext.Session.GetString("OpenId");
  134. await _bundlesService.Add(value);
  135. if (await _xfApiService.PostLetter(value, HttpContext.Request.Cookies["BaseUrl"], e => failsMessage = e))
  136. {
  137. return Ok();
  138. }
  139. await _bundlesService.Delete(value);
  140. return BadRequest(failsMessage);
  141. }
  142. // PUT api/values/5
  143. [HttpPut("{id}")]
  144. public void Put(int id, [FromBody]string value)
  145. {
  146. }
  147. // DELETE api/values/5
  148. [HttpDelete("{id}")]
  149. public void Delete(int id)
  150. {
  151. }
  152. }
  153. }