zoukankan      html  css  js  c++  java
  • 盛派微信Sdk .Net Core 初始化注册服务信息

    public class Startup
        {
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
            }
    
            public IConfiguration Configuration { get; }
    
            // This method gets called by the runtime. Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
                services.Configure<CookiePolicyOptions>(options =>
                {
                    // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                    options.CheckConsentNeeded = context => true;
                    options.MinimumSameSitePolicy = SameSiteMode.None;
                });
    
    
                services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    
                services.AddSenparcGlobalServices(Configuration)//Senparc.CO2NET 全局注册
                     .AddSenparcWeixinServices(Configuration);//Senparc.Weixin 注册
                services.Configure<SenparcWeixinSetting>(Configuration.GetSection("SenparcWeixinSetting"));
                services.AddTransient<IWeChatApplyCodeService, WeChatApplyCodeService>();
                services.AddMemoryCache();
                services.AddSingleton<IMemoryCache>(factory =>
                {
                    var cache = new MemoryCache(new MemoryCacheOptions());
                    return cache;
                });
                services.AddSingleton<ICacheService, MemoryCacheService>();
    
                services.AddCors(options =>
                {
                    options.AddPolicy("any", builder =>
                    {
                        builder.AllowAnyOrigin() //允许任何来源的主机访问
                        //builder.WithOrigins("http://localhost:8080") ////允许http://localhost:8080的主机访问
                        .AllowAnyMethod()
                        .AllowAnyHeader()
                        .AllowCredentials();//指定处理cookie
                    });
                });
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IHostingEnvironment env, IOptions<SenparcSetting> senparcSetting, IOptions<SenparcWeixinSetting> senparcWeixinSetting)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    app.UseExceptionHandler("/Home/Error");
                    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                    app.UseHsts();
                }
                app.UseCors(builder => builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());//跨域支持
                app.UseHttpsRedirection();
                app.UseStaticFiles();
                app.UseCookiePolicy();
    
                app.UseMvc(routes =>
                {
                    routes.MapRoute(
                        name: "default",
                        template: "{controller=Home}/{action=Index}/{id?}");
                });
    
    
                IRegisterService register = RegisterService.Start(env, senparcSetting.Value).UseSenparcGlobal();// 启动 CO2NET 全局注册,必须!
                register.UseSenparcWeixin(senparcWeixinSetting.Value, senparcSetting.Value);//微信全局注册,必须!
                //定义ComponentVerifyTicketFunc
                Func<string, string> getComponentVerifyTicketFunc = componentAppId =>
                {
                    var dir = Path.Combine(Environment.CurrentDirectory + @"/App_Data/OpenTicket");
                    if (!Directory.Exists(dir))
                    {
                        Directory.CreateDirectory(dir);
                    }
                    var file = Path.Combine(dir, string.Format("{0}.txt", componentAppId));
                    using (var fs = new FileStream(file, FileMode.Open))
                    {
                        using (var sr = new StreamReader(fs))
                        {
                            var ticket = sr.ReadToEnd();
                            return ticket;
                        }
                    }
                };
    
                //定义getAuthorizerRefreshTokenFunc
                Func<string,string, string> getAuthorizerRefreshTokenFunc = (componentAppId, auhtorizerId) =>
                {
                    var dir = Path.Combine(Environment.CurrentDirectory + @"/App_Data/AuthorizerInfo/"+ componentAppId);
                    if (!Directory.Exists(dir))
                    {
                        Directory.CreateDirectory(dir);
                    }
                    var file = Path.Combine(dir, string.Format("{0}.bin", auhtorizerId));
                    if (!File.Exists(file))
                    {
                        return null;
                    }
                    using (Stream fs = new FileStream(file, FileMode.Open))
                    {
                        var binFormat = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                        var result = (RefreshAuthorizerTokenResult)binFormat.Deserialize(fs);
                        return result.authorizer_refresh_token;
                    }
                };
                //定义authorizerTokenRefreshedFunc
                Action<string, string, RefreshAuthorizerTokenResult> authorizerTokenRefreshedFunc = (componentAppId, auhtorizerId, refreshResult) =>
                {
                    var dir = Path.Combine(Environment.CurrentDirectory + @"/App_Data/AuthorizerInfo/" + componentAppId);
                    if (!Directory.Exists(dir))
                    {
                        Directory.CreateDirectory(dir);
                    }
                    var file = Path.Combine(dir, string.Format("{0}.bin", auhtorizerId));
                    using (Stream fs = new FileStream(file, FileMode.Create))
                    {
                        //这里存了整个对象,实际上只存RefreshToken也可以,有了RefreshToken就能刷新到最新的AccessToken
                        var binFormat = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                        binFormat.Serialize(fs, refreshResult);
                        fs.Flush();
                    }
                };
                //全局只需注册一次
                ComponentContainer.Register(senparcWeixinSetting.Value.Component_Appid, senparcWeixinSetting.Value.Component_Secret, getComponentVerifyTicketFunc, getAuthorizerRefreshTokenFunc, authorizerTokenRefreshedFunc);
            }
        }
  • 相关阅读:
    jquery $.post specification
    鸟语2010.5.5
    不使用ubuntu代理
    how to check network's stablity?
    python float decimal issue
    how to check network's stablity?
    session的作用是什么?
    bottle json issure
    我强烈建议,不要想念komdo的ctrl+r
    how to count files in directory
  • 原文地址:https://www.cnblogs.com/SmilePastaLi/p/11078327.html
Copyright © 2011-2022 走看看