You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
2.9 KiB
C#

using DS.Module.Core;
using DS.WMS.Core.WxModule.Interface;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NLog;
using Senparc.Weixin.MP;
using LogLevel = NLog.LogLevel;
namespace DS.WMS.WebApi.Controllers;
/// <summary>
/// 微信公众号模块
/// </summary>
[Route("api/[controller]")]
public class WebAuthController : Controller
{
static readonly Logger Logger = LogManager.GetCurrentClassLogger();
// //微信公众号的APPid
// private string AppId = "wx63325af0c60e64e4";
//
// //微信公众号的配置的Secret
// private string Secret = "e71ef689becd58b5e2d3ec345ba5a23e";
//
// //授权成功返回主页
// private string indexUrl = "http://60.209.125.238:9998/#/pages/index/index?TenantId=1595354960864874496";
private string Token = "gumang896";
private readonly IWxPublicConfigService _invokeService;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="invokeService"></param>
public WebAuthController(IWxPublicConfigService invokeService)
{
_invokeService = invokeService;
}
/// 验签
/// </summary>
/// <param name="signature"></param>
/// <param name="timestamp"></param>
/// <param name="nonce"></param>
/// <param name="echostr"></param>
/// <returns></returns>
[HttpGet]
[Route("index")]
public ActionResult Get(string signature, string timestamp, string nonce, string echostr)
{
// 验证成功返回echostr,否则返回空字符串
return Content(!CheckSignature.Check(signature, timestamp, nonce, Token) ? "" : echostr);
}
/// <summary>
///
/// </summary>
/// <param name="code"></param>
/// <param name="state"></param>
/// <param name="configId"></param>
/// <returns></returns>
[HttpGet]
[Route("callback")]
public ActionResult Post(string code, string state, string configId)
{
DataResult data = new DataResult();
string ReturnUrl = String.Empty;
Logger.Log(LogLevel.Info, "获取state成功:" + state);
Logger.Log(LogLevel.Info, "获取授权码成功:" + code);
var config = _invokeService.GetWxConfig(state);
string res = WxWebHelper.GetAccess_token(config.Appid, config.Secret, code);
Logger.Log(LogLevel.Info, "获取Token信息:" + res);
if (res.Contains("access_token"))
{
JObject token = JObject.Parse(res);
data.Code = ResultCode.Success;
data.Message = "授权成功!";
ReturnUrl = config.IndexUrl + "&OpenId=" + token["openid"].ToString();
}
else
{
data.Code = ResultCode.Fail;
data.Message = "授权失败!";
Logger.Log(LogLevel.Info, "获取网页Token失败:" + res);
ReturnUrl = config.IndexUrl;
}
return Redirect(ReturnUrl);
}
}