using Microsoft.AspNetCore.Mvc; using Nirvana.Common; using Nirvana.Common.ApiBase; using System.Text; using System.Web; using YBDevice.Core; using YBDevice.Entity; namespace YBDevice.NApi.Controllers { /// /// 小程序管理 /// [Route("api/[controller]/[action]")] [ApiController] public class WxOpenController : ControllerBase { public static readonly string Component_Token = Senparc.Weixin.Config.SenparcWeixinSetting.Component_Token; public static readonly string Component_EncodingAESKey = Senparc.Weixin.Config.SenparcWeixinSetting.Component_EncodingAESKey; public static readonly string Component_Appid = Senparc.Weixin.Config.SenparcWeixinSetting.Component_Appid; public static readonly string Component_Secret = Senparc.Weixin.Config.SenparcWeixinSetting.Component_Secret; private readonly IHttpClientFactory _clientFactory; private readonly IUserService _userService; private readonly IWxOpenService _wxOpenService; private readonly ILoggerService _loggerService; public WxOpenController(IHttpClientFactory clientFactory, IUserService userService, IWxOpenService wxOpenService, ILoggerService loggerService) { _clientFactory = clientFactory; _userService = userService; _wxOpenService = wxOpenService; _loggerService = loggerService; } /// /// wx.login登陆成功之后发送的请求 /// /// /// [HttpPost] public async Task OnLoginAsync([FromBody] WXOpenLoginSubmitModel model) { return await _wxOpenService.OnLoginAsync(model); } /// /// 检查登录状态是否已失效 /// /// sessionid /// [HttpGet] public async Task CheckStatusAsync(string sessionId = "") { return await _wxOpenService.CheckStatusAsync(sessionId); } /// /// 签名测试 /// /// /// /// /// [HttpPost] public ResultInfo CheckWxOpenSignature(string sessionId, string rawData, string signature) { var checkSuccess = Senparc.Weixin.WxOpen.Helpers.EncryptHelper.CheckSignature(sessionId, rawData, signature); return new ResultInfo(checkSuccess ? ResultState.SUCCESS : ResultState.FAIL, checkSuccess ? "签名校验成功" : "签名校验失败"); } /// /// 解密用户数据 /// /// /// [HttpPost] public async Task DecodeEncryptedDataAsync([FromBody] WxOpenDecryptSubmitModel model) { return await _wxOpenService.DecryptDataAsync(model); } /// /// 解密用户资料 /// /// /// [HttpPost] [ApiAuthorizeFilter] public async Task DecryptUserInfoAsync([FromBody] WxOpenDecryptSubmitModel model) { return await _wxOpenService.DecryptUserInfoAsync(model); } /// /// 手机号授权登录注册 /// /// /// [HttpPost] public async Task DecryptPhoneAsync([FromBody] WxOpenDecryptSubmitModel model) { return await _wxOpenService.DecryptPhoneAsync(model); } /// /// 发送短信验证码 /// /// /// [HttpGet] public async Task SendCodeAsync(string phone) { if (string.IsNullOrEmpty(phone)) { return new ResultInfo(ResultState.FAIL, "手机号不可为空"); } if (!Validate.IsValidMobile(phone)) { return new ResultInfo(ResultState.FAIL, "手机号码不合法"); } Random rd = new Random(); var yzm = rd.Next(100000, 999999); var platform = "小白健康"; var content = $"【{platform}】您好,欢迎使用{platform},您的手机验证码是:{yzm},验证码一分钟内有效,若非本人操作,请忽略!"; var data = new { phone = phone, Content = HttpUtility.UrlEncode(content) }; var par = $"ybdevice_yam_{phone}"; if (!string.IsNullOrEmpty(RedisHelpers.stringGet(par))) { return new ResultInfo(ResultState.FAIL, "请求频繁"); } var url = "http://sms.ybhdmob.com/Message/Send?token=ybhdmob"; var request = new HttpRequestMessage(HttpMethod.Post, url); string body = data.ToJson(); request.Content = new StringContent(body, Encoding.UTF8, "application/json"); var client = _clientFactory.CreateClient(); var response = await client.SendAsync(request); if (response.IsSuccessStatusCode) { var result = await response.Content.ReadAsStringAsync(); var results = result.ToObject(); //记录日志 var msg = $"短信发送:参数:{data.ToJson()}\r\n返回值:{result}"; _loggerService.AddLogger(msg); if (results != null && results.code == 0) { RedisHelpers.Insert(par, yzm.ToString(), 60); } return new ResultInfo(ResultState.SUCCESS, "验证码已发送"); } else { return new ResultInfo(ResultState.FAIL, "短信发送失败"); } } /// /// 输入手机号进行注册 /// /// /// [HttpPost] public async Task RegisterAsync([FromBody] RegModel model) { return await _wxOpenService.RegisterAsync(model); } /// /// 意见反馈 /// /// /// [HttpPost] public async Task SubmitAdviceAsync([FromBody] YB_Advice model) { return await _userService.SubmitAdviceAsync(model); } /// /// 解密用户资料,V2-20211126 /// /// /// [HttpPost] public async Task DeUserInfoAsync(WxOpenDecryptSubmitModel model) { return await _wxOpenService.DeUserInfoAsync(model); } /// /// 解密手机号,V2-20211126 /// /// /// [HttpPost] public async Task DeUserPhone(WxOpenDecryptSubmitModel model) { return await _wxOpenService.DecryptPhoneAsync(model); // return await _wxOpenService.DeUserPhone(model);已弃用 } /// /// 根据手机号进行注册,V2-20211126 /// /// /// [HttpPost] public async Task DeRegisterAsync(RegModel model) { return await _wxOpenService.RegisterAsync(model); //return await _wxOpenService.DeRegisterAsync(model);已弃用 } /// /// 获取小程序升级信息 /// /// /// [HttpPost] public async Task UpgradeAsync(WxOpenUpgradeC2SDto input) { return await _wxOpenService.UpgradeAsync(input); } } }