MeiRiYiCheng_1_old/YBDevice.NApi/Controllers/Api/WxOpenController.cs

232 lines
8.3 KiB
C#

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
{
/// <summary>
/// 小程序管理
/// </summary>
[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;
}
/// <summary>
/// wx.login登陆成功之后发送的请求
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
public async Task<ResultInfo> OnLoginAsync([FromBody] WXOpenLoginSubmitModel model)
{
return await _wxOpenService.OnLoginAsync(model);
}
/// <summary>
/// 检查登录状态是否已失效
/// </summary>
/// <param name="sessionId">sessionid</param>
/// <returns></returns>
[HttpGet]
public async Task<ResultInfo> CheckStatusAsync(string sessionId = "")
{
return await _wxOpenService.CheckStatusAsync(sessionId);
}
/// <summary>
/// 签名测试
/// </summary>
/// <param name="sessionId"></param>
/// <param name="rawData"></param>
/// <param name="signature"></param>
/// <returns></returns>
[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 ? "签名校验成功" : "签名校验失败");
}
/// <summary>
/// 解密用户数据
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
public async Task<ResultInfo> DecodeEncryptedDataAsync([FromBody] WxOpenDecryptSubmitModel model)
{
return await _wxOpenService.DecryptDataAsync(model);
}
/// <summary>
/// 解密用户资料
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
[ApiAuthorizeFilter]
public async Task<ResultInfo> DecryptUserInfoAsync([FromBody] WxOpenDecryptSubmitModel model)
{
return await _wxOpenService.DecryptUserInfoAsync(model);
}
/// <summary>
/// 手机号授权登录注册
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
public async Task<ResultInfo> DecryptPhoneAsync([FromBody] WxOpenDecryptSubmitModel model)
{
return await _wxOpenService.DecryptPhoneAsync(model);
}
/// <summary>
/// 发送短信验证码
/// </summary>
/// <param name="phone"></param>
/// <returns></returns>
[HttpGet]
public async Task<ResultInfo> 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<string>(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<SMSMODEL>();
//记录日志
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, "短信发送失败");
}
}
/// <summary>
/// 输入手机号进行注册
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
public async Task<ResultInfo> RegisterAsync([FromBody] RegModel model)
{
return await _wxOpenService.RegisterAsync(model);
}
/// <summary>
/// 意见反馈
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
public async Task<ResultInfo> SubmitAdviceAsync([FromBody] YB_Advice model)
{
return await _userService.SubmitAdviceAsync(model);
}
/// <summary>
/// 解密用户资料,V2-20211126
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
public async Task<ResultInfo> DeUserInfoAsync(WxOpenDecryptSubmitModel model)
{
return await _wxOpenService.DeUserInfoAsync(model);
}
/// <summary>
/// 解密手机号,V2-20211126
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
public async Task<ResultInfo> DeUserPhone(WxOpenDecryptSubmitModel model)
{
return await _wxOpenService.DecryptPhoneAsync(model);
// return await _wxOpenService.DeUserPhone(model);已弃用
}
/// <summary>
/// 根据手机号进行注册,V2-20211126
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
public async Task<ResultInfo> DeRegisterAsync(RegModel model)
{
return await _wxOpenService.RegisterAsync(model);
//return await _wxOpenService.DeRegisterAsync(model);已弃用
}
/// <summary>
/// 获取小程序升级信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<ResultInfo> UpgradeAsync(WxOpenUpgradeC2SDto input)
{
return await _wxOpenService.UpgradeAsync(input);
}
}
}