150 lines
6.7 KiB
C#
150 lines
6.7 KiB
C#
|
|
using Furion;
|
|||
|
|
using Microsoft.AspNetCore.Builder;
|
|||
|
|
using Microsoft.AspNetCore.Hosting;
|
|||
|
|
using Microsoft.Extensions.DependencyInjection;
|
|||
|
|
using Microsoft.Extensions.Options;
|
|||
|
|
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.WxOpen;
|
|||
|
|
using YB.DeviceV2.WeiXin.WXConfig;
|
|||
|
|
|
|||
|
|
namespace YB.DeviceV2.WeiXin
|
|||
|
|
{
|
|||
|
|
public class Startup : AppStartup
|
|||
|
|
{
|
|||
|
|
public void ConfigureServices(IServiceCollection services)
|
|||
|
|
{
|
|||
|
|
services.AddSenparcWeixinServices(App.Configuration);//Senparc.Weixin 注册(必须)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,
|
|||
|
|
IOptions<SenparcSetting> senparcSetting, IOptions<SenparcWeixinSetting> senparcWeixinSetting)
|
|||
|
|
{
|
|||
|
|
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 CO2NET 全局配置
|
|||
|
|
|
|||
|
|
#region 注册日志(按需,建议)
|
|||
|
|
|
|||
|
|
globalRegister.RegisterTraceLog(ConfigTraceLog);//配置TraceLog
|
|||
|
|
|
|||
|
|
#endregion 注册日志(按需,建议)
|
|||
|
|
}, true)
|
|||
|
|
.UseSenparcWeixin(senparcWeixinSetting.Value, (weixinRegister, weixinSetting) =>
|
|||
|
|
{
|
|||
|
|
#region 微信缓存(按需,必须放在配置开头,以确保其他可能依赖到缓存的注册过程使用正确的配置)
|
|||
|
|
|
|||
|
|
//注意:如果使用非本地缓存,而不执行本块注册代码,将会收到“当前扩展缓存策略没有进行注册”的异常
|
|||
|
|
//微信的 Redis 缓存,如果不使用则注释掉(开启前必须保证配置有效,否则会抛错)
|
|||
|
|
weixinRegister.UseSenparcWeixinCacheCsRedis();//CsRedis
|
|||
|
|
weixinRegister
|
|||
|
|
|
|||
|
|
#endregion 微信缓存(按需,必须放在配置开头,以确保其他可能依赖到缓存的注册过程使用正确的配置)
|
|||
|
|
|
|||
|
|
#region 注册公众号
|
|||
|
|
|
|||
|
|
.RegisterMpAccount(senparcWeixinSetting.Value)// DPBMARK_END
|
|||
|
|
|
|||
|
|
#endregion 注册公众号
|
|||
|
|
|
|||
|
|
#region 注册小程序
|
|||
|
|
|
|||
|
|
#region 商户端
|
|||
|
|
|
|||
|
|
.RegisterWxOpenAccount(senparcWeixinSetting.Value)
|
|||
|
|
.RegisterWxOpenAccount(senparcWeixinSetting.Value.Items["bybusinessclient"], "bybusinessclient")
|
|||
|
|
.RegisterWxOpenAccount(senparcWeixinSetting.Value.Items["jtbusinessclient"], "jtbusinessclient")
|
|||
|
|
.RegisterWxOpenAccount(senparcWeixinSetting.Value.Items["xsxebusinessclient"], "xsxebusinessclient")
|
|||
|
|
.RegisterWxOpenAccount(senparcWeixinSetting.Value.Items["abbusinessclient"], "abbusinessclient")
|
|||
|
|
.RegisterWxOpenAccount(senparcWeixinSetting.Value.Items["tsbusinessclient"], "tsbusinessclient")
|
|||
|
|
.RegisterWxOpenAccount(senparcWeixinSetting.Value.Items["hcbusinessclient"], "hcbusinessclient")
|
|||
|
|
.RegisterWxOpenAccount(senparcWeixinSetting.Value.Items["sklmbusinessclient"], "sklmbusinessclient")
|
|||
|
|
|
|||
|
|
#endregion 商户端
|
|||
|
|
|
|||
|
|
#endregion 注册小程序
|
|||
|
|
|
|||
|
|
#region 注册开放平台
|
|||
|
|
|
|||
|
|
.RegisterOpenComponent(senparcWeixinSetting.Value,
|
|||
|
|
//getComponentVerifyTicketFunc
|
|||
|
|
async componentAppId =>
|
|||
|
|
{
|
|||
|
|
var _wxservice = App.GetService<IWXConfigService>();
|
|||
|
|
var component = await _wxservice.GetOpenTicketAsync(componentAppId);
|
|||
|
|
return component;
|
|||
|
|
},
|
|||
|
|
//getAuthorizerRefreshTokenFunc
|
|||
|
|
async (componentAppId, auhtorizerId) =>
|
|||
|
|
{
|
|||
|
|
var _wxservice = App.GetService<IWXConfigService>();
|
|||
|
|
return await _wxservice.GetRefreshToken(auhtorizerId, componentAppId);
|
|||
|
|
},
|
|||
|
|
//authorizerTokenRefreshedFunc
|
|||
|
|
(componentAppId, auhtorizerId, refreshResult) =>
|
|||
|
|
{
|
|||
|
|
}, "ybhdmobopen")
|
|||
|
|
|
|||
|
|
#endregion 注册开放平台
|
|||
|
|
|
|||
|
|
;
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 配置微信跟踪日志
|
|||
|
|
/// </summary>
|
|||
|
|
private void ConfigTraceLog()
|
|||
|
|
{
|
|||
|
|
//这里设为Debug状态时,/App_Data/WeixinTraceLog/目录下会生成日志文件记录所有的API请求日志,正式发布版本建议关闭
|
|||
|
|
|
|||
|
|
//如果全局的IsDebug(Senparc.CO2NET.Config.IsDebug)为false,此处可以单独设置true,否则自动为true
|
|||
|
|
Senparc.CO2NET.Trace.SenparcTrace.SendCustomLog("系统日志", "系统启动");//只在Senparc.Weixin.Config.IsDebug = true的情况下生效
|
|||
|
|
|
|||
|
|
//全局自定义日志记录回调
|
|||
|
|
Senparc.CO2NET.Trace.SenparcTrace.OnLogFunc = () =>
|
|||
|
|
{
|
|||
|
|
};
|
|||
|
|
//当发生基于WeixinException的异常时触发
|
|||
|
|
WeixinTrace.OnWeixinExceptionFunc = ex =>
|
|||
|
|
{
|
|||
|
|
//加入每次触发WeixinExceptionLog后需要执行的代码
|
|||
|
|
|
|||
|
|
//发送模板消息给管理员 -- DPBMARK Redis
|
|||
|
|
var eventService = new EventService();
|
|||
|
|
eventService.ConfigOnWeixinExceptionFunc(ex); // DPBMARK_END
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 判断当前配置是否满足使用 Redis(根据是否已经修改了默认配置字符串判断)
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="senparcSetting"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
private string UseRedis(SenparcSetting senparcSetting)
|
|||
|
|
{
|
|||
|
|
string redisConfigurationStr = senparcSetting.Cache_Redis_Configuration;
|
|||
|
|
return redisConfigurationStr;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|