MeiRiYiCheng_1_old/YBDevice.WX/Startup.cs

220 lines
8.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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"; //日期格式化
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
// Add CookieTempDataProvider after AddMvc and include ViewFeatures.
services.AddSingleton<ITempDataProvider, CookieTempDataProvider>();
//如果部署在IIS上需要加上下面的配置
services.Configure<IISServerOptions>(options => options.AllowSynchronousIO = true);
#region IP
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
MyHttpContext.serviceCollection = services;
#endregion
services.AddSenparcWeixinServices(Configuration);//Senparc.Weixin 注册(必须)
}
// 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)
{
// 添加规范化结果状态码,需要在这里注册
app.UseUnifyResultStatusCodes();
//启用 GB2312按需
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
app.UseHttpsRedirection();
//允许body重用
app.Use(next => context =>
{
context.Request.EnableBuffering();
return next(context);
});
app.UseStaticFiles();
app.UseSerilogRequestLogging(opts => {
opts.EnrichDiagnosticContext = LoggerHelper.EnrichFromRequest;
}); // 必须在 UseStaticFiles 和 UseRouting 之间,记录请求日志
app.UseRouting();
#region CO2NET
var registerService = app.UseSenparcGlobal(env, senparcSetting.Value, globalRegister =>
{
//#region CO2NET 全局配置
////配置全局使用Redis缓存按需独立
string redisConfigurationStr = UseRedis(senparcSetting.Value);
/* 说明:
* 1、Redis 的连接字符串信息会从 Config.SenparcSetting.Cache_Redis_Configuration 自动获取并注册,如不需要修改,下方方法可以忽略
/* 2、如需手动修改可以通过下方 SetConfigurationOption 方法手动设置 Redis 链接信息(仅修改配置,不立即启用)
*/
Senparc.CO2NET.Cache.CsRedis.Register.SetConfigurationOption(redisConfigurationStr);
//以下会立即将全局缓存设置为 Redis
Senparc.CO2NET.Cache.CsRedis.Register.UseKeyValueRedisNow();//键值对缓存策略
//#endregion
#region
globalRegister.RegisterTraceLog(ConfigTraceLog);//配置TraceLog
#endregion
}, true)
//使用 Senparc.Weixin SDK
.UseSenparcWeixin(senparcWeixinSetting.Value, (weixinRegister,_) =>
{
#region
/* 微信配置开始
*
* 建议按照以下顺序进行注册,尤其须将缓存放在第一位!
*/
#region 使
//注意:如果使用非本地缓存,而不执行本块注册代码,将会收到“当前扩展缓存策略没有进行注册”的异常
//微信的 Redis 缓存,如果不使用则注释掉(开启前必须保证配置有效,否则会抛错)
weixinRegister.UseSenparcWeixinCacheCsRedis();//CsRedis
#endregion
#region
weixinRegister
#region
.RegisterMpAccount(senparcWeixinSetting.Value, "ybhdmob")// DPBMARK_END
//.RegisterMpAccount(senparcWeixinSetting.Value.Items["bygzh"], "ybhdmob1")// DPBMARK_END
#endregion
//#region 注册小程序
// .RegisterWxOpenAccount(senparcWeixinSetting.Value, "ybhdmobwxopen")
//#endregion
#region
.RegisterTenpayV3(senparcWeixinSetting.Value, "ybhdmob")
#endregion
#region
.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
;
/* 微信配置结束 */
#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>
/// 判断当前配置是否满足使用 Redis根据是否已经修改了默认配置字符串判断
/// </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>
/// 配置微信跟踪日志(演示,按需)
/// </summary>
private void ConfigTraceLog()
{
//这里设为Debug状态时/App_Data/WeixinTraceLog/目录下会生成日志文件记录所有的API请求日志正式发布版本建议关闭
Senparc.CO2NET.Config.IsDebug = true;
//如果全局的IsDebugSenparc.CO2NET.Config.IsDebug为false此处可以单独设置true否则自动为true
Senparc.CO2NET.Trace.SenparcTrace.SendCustomLog("系统日志", "系统启动");//只在Senparc.Weixin.Config.IsDebug = true的情况下生效
//全局自定义日志记录回调
Senparc.CO2NET.Trace.SenparcTrace.OnLogFunc = () =>
{
};
//当发生基于WeixinException的异常时触发
WeixinTrace.OnWeixinExceptionFunc = async ex =>
{
//加入每次触发WeixinExceptionLog后需要执行的代码
//发送模板消息给管理员 -- DPBMARK Redis
var eventService = new EventService();
await eventService.ConfigOnWeixinExceptionFunc(ex); // DPBMARK_END
};
}
}
}