MeiRiYiCheng_1_old/YBDevice.WX/Startup.cs

220 lines
8.9 KiB
C#
Raw Normal View History

2025-07-16 17:14:38 +08:00
using Furion;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Newtonsoft.Json.Serialization;
using Nirvana.Common;
using Senparc.CO2NET;
using Senparc.CO2NET.AspNet;
using Senparc.Weixin;
using Senparc.Weixin.Cache.CsRedis;
using Senparc.Weixin.Entities;
using Senparc.Weixin.MP;
using Senparc.Weixin.Open;
using Senparc.Weixin.RegisterServices;
using Senparc.Weixin.TenPay;
using Serilog;
using System.Text;
using YBDevice.Core;
using YBDevice.WXApplication.WXInfo;
namespace YBDevice.WX
{
public class Startup : AppStartup
{
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
var Configuration = App.Configuration;
services.AddControllersWithViews()
.AddInjectWithUnifyResult<RESTfulResultProvider>()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; //<2F><><EFBFBD>ڸ<EFBFBD>ʽ<EFBFBD><CABD>
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
// Add CookieTempDataProvider after AddMvc and include ViewFeatures.
services.AddSingleton<ITempDataProvider, CookieTempDataProvider>();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IIS<49>ϣ<EFBFBD><CFA3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
services.Configure<IISServerOptions>(options => options.AllowSynchronousIO = true);
#region ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡIP
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
MyHttpContext.serviceCollection = services;
#endregion
services.AddSenparcWeixinServices(Configuration);//Senparc.Weixin ע<><EFBFBD><E1A3A8><EFBFBD>
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,
IOptions<SenparcSetting> senparcSetting, IOptions<SenparcWeixinSetting> senparcWeixinSetting)
{
// <20><><EFBFBD>ӹ淶<D3B9><E6B7B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><EFBFBD><EBA3AC>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>
app.UseUnifyResultStatusCodes();
//<2F><><EFBFBD><EFBFBD> GB2312<31><32><EFBFBD><EFBFBD><EFBFBD>
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
app.UseHttpsRedirection();
//<2F><><EFBFBD><EFBFBD>body<64><79><EFBFBD><EFBFBD>
app.Use(next => context =>
{
context.Request.EnableBuffering();
return next(context);
});
app.UseStaticFiles();
app.UseSerilogRequestLogging(opts => {
opts.EnrichDiagnosticContext = LoggerHelper.EnrichFromRequest;
}); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UseStaticFiles <20><> UseRouting ֮<><D6AE>,<2C><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
app.UseRouting();
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CO2NET ȫ<EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>
var registerService = app.UseSenparcGlobal(env, senparcSetting.Value, globalRegister =>
{
//#region CO2NET ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
////<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>ʹ<EFBFBD><CAB9>Redis<69><73><EFBFBD><EFBFBD><E6A3A8><EFBFBD><EFBFBD><E8A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
string redisConfigurationStr = UseRedis(senparcSetting.Value);
/* ˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* 1<EFBFBD><EFBFBD>Redis <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Config.SenparcSetting.Cache_Redis_Configuration <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>޸ģ<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD>
/* 2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><EFBFBD>޸ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD>·<EFBFBD> SetConfigurationOption <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Redis <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
*/
Senparc.CO2NET.Cache.CsRedis.Register.SetConfigurationOption(redisConfigurationStr);
//<2F><><EFBFBD>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ Redis
Senparc.CO2NET.Cache.CsRedis.Register.UseKeyValueRedisNow();//<2F><>ֵ<EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//#endregion
#region ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
globalRegister.RegisterTraceLog(ConfigTraceLog);//<2F><><EFBFBD><EFBFBD>TraceLog
#endregion
}, true)
//ʹ<><CAB9> Senparc.Weixin SDK
.UseSenparcWeixin(senparcWeixinSetting.Value, (weixinRegister,_) =>
{
#region ΢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/* ΢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ʼ
*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>һλ<EFBFBD><EFBFBD>
*/
#region ΢<EFBFBD>Ż<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
//ע<><EFBFBD><E2A3BA><EFBFBD><EFBFBD>ʹ<EFBFBD>÷DZ<C3B7><C7B1>ػ<EFBFBD><D8BB><EFBFBD><E6A3AC><EFBFBD><EFBFBD>ִ<EFBFBD>б<EFBFBD><D0B1><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>н<EFBFBD><D0BD><EFBFBD>ע<EFBFBD><EFBFBD><E1A1B1><EFBFBD>
//΢<>ŵ<EFBFBD> Redis <20><><EFBFBD><EFBFBD><E6A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>ע<EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>뱣֤<EBB1A3><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״<EFBFBD><D7B4><EFBFBD>
weixinRegister.UseSenparcWeixinCacheCsRedis();//CsRedis
#endregion
#region ע<EFBFBD><EFBFBD>ںŻ<EFBFBD>С<EFBFBD><EFBFBD><EFBFBD>򣨰<EFBFBD><EFBFBD>
weixinRegister
#region ע<EFBFBD><EFBFBD>ںţ<EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
.RegisterMpAccount(senparcWeixinSetting.Value, "ybhdmob")// DPBMARK_END
//.RegisterMpAccount(senparcWeixinSetting.Value.Items["bygzh"], "ybhdmob1")// DPBMARK_END
#endregion
//#region ע<><D7A2>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
// .RegisterWxOpenAccount(senparcWeixinSetting.Value, "ybhdmobwxopen")
//#endregion
#region ע<EFBFBD><EFBFBD>΢<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>
.RegisterTenpayV3(senparcWeixinSetting.Value, "ybhdmob")
#endregion
#region ע<EFBFBD><EFBFBD><EFBFBD>ƽ̨
.RegisterOpenComponent(senparcWeixinSetting.Value,
//getComponentVerifyTicketFunc
async componentAppId =>
{
var confservice = App.GetService<IWXService>();
var component = await confservice.GetOpenTicketAsync(componentAppId);
return component;
},
//getAuthorizerRefreshTokenFunc
async (componentAppId, auhtorizerId) =>
{
var confservice = App.GetService<IWXService>();
return await confservice.GetRefreshToken(auhtorizerId, componentAppId);
},
//authorizerTokenRefreshedFunc
async (componentAppId, auhtorizerId, refreshResult) =>
{
var confservice = App.GetService<IWXService>();
await confservice.InsertOrUpdateAuthorizerTokenAsync(refreshResult, auhtorizerId, componentAppId);
}, "ybhdmobopen")
#endregion
#endregion
;
/* ΢<><CEA2><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD> */
#endregion
});
#endregion
app.UseAuthorization();
app.UseInject();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}"
);
endpoints.MapControllerRoute(
name: "OpenOAuth",
pattern: "{controller=OpenOAuth}/{action=JumpToMpOAuth}/{businessid}/{type?}",
defaults: new { controller = "OpenOAuth", action = "JumpToMpOAuth" }
);
});
}
/// <summary>
/// <20>жϵ<D0B6>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> Redis<69><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>Ѿ<EFBFBD><D1BE>޸<EFBFBD><DEB8><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>жϣ<D0B6>
/// </summary>
/// <param name="senparcSetting"></param>
/// <param name="redisConfigurationStr"></param>
/// <returns></returns>
private string UseRedis(SenparcSetting senparcSetting)
{
string redisConfigurationStr = senparcSetting.Cache_Redis_Configuration;
return redisConfigurationStr;
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>΢<EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private void ConfigTraceLog()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪDebug״̬ʱ<CCAC><CAB1>/App_Data/WeixinTraceLog/Ŀ¼<C4BF>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>е<EFBFBD>API<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>
Senparc.CO2NET.Config.IsDebug = true;
//<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD>ֵ<EFBFBD>IsDebug<75><67>Senparc.CO2NET.Config.IsDebug<75><67>Ϊfalse<73><65><EFBFBD>˴<EFBFBD><CBB4><EFBFBD><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>true<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>Ϊtrue
Senparc.CO2NET.Trace.SenparcTrace.SendCustomLog("ϵͳ<CFB5><CDB3>־", "ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>");//ֻ<><D6BB>Senparc.Weixin.Config.IsDebug = true<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
//ȫ<><C8AB><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>¼<EFBFBD>ص<EFBFBD>
Senparc.CO2NET.Trace.SenparcTrace.OnLogFunc = () =>
{
};
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WeixinException<6F><6E><EFBFBD>쳣ʱ<ECB3A3><CAB1><EFBFBD><EFBFBD>
WeixinTrace.OnWeixinExceptionFunc = async ex =>
{
//<2F><><EFBFBD><EFBFBD>ÿ<EFBFBD>δ<EFBFBD><CEB4><EFBFBD>WeixinExceptionLog<6F><67><EFBFBD><EFBFBD>Ҫִ<D2AA>еĴ<D0B5><C4B4><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա -- DPBMARK Redis
var eventService = new EventService();
await eventService.ConfigOnWeixinExceptionFunc(ex); // DPBMARK_END
};
}
}
}