Giter Club home page Giter Club logo

wechatmanagement's Introduction

WeChatManagement

ABP version NuGet NuGet Download Discord online GitHub stars

基于EasyAbp.Abp.WeChat模块实现微信登录、微信用户信息存储、微信服务器管理、微信第三方平台等高级功能的Abp应用模块组

Installation

Usage

MiniProgram UserInfo

Roadmap

  • 公众号模块
  • 企业微信模块
  • 第三方平台模块

wechatmanagement's People

Contributors

blackwins avatar gdlcf88 avatar indexlang avatar slarkerino avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wechatmanagement's Issues

微信公众号模块

模块命名:Official (或者OfficialAccount?)。

开发计划:

  • 公众号登录页
  • 公众号用户页
  • 发送模板消息

第三方平台回调时间处理接口与实际不符

https://domain/api/wechat-management/third-party-platforms/event-handling/notify/app/$APPID$?
signature=588d8b5f47658fcb36c2e143e303d66583ccf49c
&timestamp=1695372310
&nonce=1179673720
&openid=ozy4qt5QUADNXORxCVipKMV9dss0
&encrypt_type=aes
&msg_signature=274ed747d4ddc30493602e830f176592bf41ed9b

https://domain/api/wechat-management/third-party-platforms/event-handling/notify/auth?
signature=7bb0b928177a90b46b25ebd88c6d08b21e7df66e
&timestamp=1695372335
&nonce=487417731
&encrypt_type=aes
&msg_signature=89587578ebc2f40804e8c7acae755f42d5b9fd05

image

在MVC UI的登录页面通过小程序扫码登录

实现方式:

  1. 制作一个用于微信小程序扫码授权PC登录的widget
  2. widget上需生成带参数的小程序码(可配置默认的AppId和HandlePage),参数为一个Guid的Token,于此同时以每3秒一次的频率携带Token轮询A接口
  3. 使用微信扫码后进入到小程序,确保小程序用户已登录,小程序以当前用户的身份携带Token访问B接口,从而将Token和UserId写入缓存(写入缓存的频率限制每分钟5次)
  4. 登录页轮询的A接口检测到缓存中匹配到了所携带的Token,于是登入并跳转,至此登录完成

实现IMiniProgramStore和IMiniProgramUserStore

作为带缓存的数据提供者

其他任务:

  • 使用Store替换一部分直接使用仓储的代码

  • IMiniProgramUserStore 增加便利方法 GetCurrentSessionKeyAsync(),用于获取当前用户的session key,其中appid的过去途径为claims。

微信绑定现有账号实现探讨

思路:pc生成绑定码->小程序扫码授权上传绑定相应数据->pc获取授权数据->pc确认操作,绑定结束

image

1.pc获取二维码

GetbindACodeAsync(){
return BindAcodeOutput(){ACode,Token}
}

2.微信扫码获取code上传信息预热(匿名方法)

PcBindingPreHeatingAsync(PreHeatingCreateDto){
Cache.GetAsync(Token)!=null?//已存在预热信息直接return true,防止多次重复写入缓存
Cache.SetAsync(Token,UserProfile); //临时缓存数据
return true;
}
PreHeatingCreateDto:LoginInput{
Token,//必填
AvatarUrl,NickName//选填
}

3.pc轮询获取预热状态

GetBindingPreHeatingStatusAsync(Token){
PreHeatingInfo=Cache.GetAsync(Token);
return PcPreHeatingDto{AvatarUrl,NickName};
}
PcPreHeatingDto{
IsReady,AvatarUrl,NickName
}

4.pc确认关联

PcBindingConfirm(Token,FroceBinding){
PreHeatingInfo=Cache.GetAsync(Token);
BindAsync(PreHeatingInfo,FroceBinding)
}

用Tiered分层解决方案报Cannot resolve parameter Microsoft.AspNetCore.Identity.SignInManager

An exception was thrown while activating EasyAbp.WeChatManagement.MiniPrograms.Login.LoginController -> EasyAbp.WeChatManagement.MiniPrograms.Login.LoginAppService.
Autofac.Core.DependencyResolutionException: An exception was thrown while activating EasyAbp.WeChatManagement.MiniPrograms.Login.LoginController -> EasyAbp.WeChatManagement.MiniPrograms.Login.LoginAppService.
---> Autofac.Core.DependencyResolutionException: None of the constructors found with 'Volo.Abp.Autofac.AbpAutofacConstructorFinder' on type 'EasyAbp.WeChatManagement.MiniPrograms.Login.LoginAppService' can be invoked with the available services and parameters:
Cannot resolve parameter 'Microsoft.AspNetCore.Identity.SignInManager1[Volo.Abp.Identity.IdentityUser] signInManager' of constructor 'Void .ctor(EasyAbp.Abp.WeChat.MiniProgram.Services.Login.LoginService, EasyAbp.Abp.WeChat.MiniProgram.Services.ACode.ACodeService, EasyAbp.Abp.WeChat.MiniProgram.Infrastructure.SignatureChecker, Microsoft.AspNetCore.Identity.SignInManager1[Volo.Abp.Identity.IdentityUser], Volo.Abp.Data.IDataFilter, Microsoft.Extensions.Configuration.IConfiguration, System.Net.Http.IHttpClientFactory, EasyAbp.WeChatManagement.MiniPrograms.UserInfos.IUserInfoRepository, Volo.Abp.Json.IJsonSerializer, EasyAbp.Abp.WeChat.IWeChatMiniProgramAsyncLocal, EasyAbp.WeChatManagement.MiniPrograms.MiniProgramUsers.IMiniProgramUserRepository, EasyAbp.WeChatManagement.MiniPrograms.IMiniProgramLoginNewUserCreator, EasyAbp.WeChatManagement.MiniPrograms.IMiniProgramLoginProviderProvider, Volo.Abp.Caching.IDistributedCache1[EasyAbp.WeChatManagement.MiniPrograms.Login.MiniProgramPcLoginAuthorizationCacheItem], Volo.Abp.Caching.IDistributedCache1[EasyAbp.WeChatManagement.MiniPrograms.Login.MiniProgramPcLoginUserLimitCacheItem], Microsoft.Extensions.Options.IOptions`1[Microsoft.AspNetCore.Identity.IdentityOptions], Volo.Abp.Identity.IdentityUserManager,

About custom repositories,MiniProgramRepository,MiniProgramUserRepository,UserInfoRepository.

In custom repository files:MiniProgramRepository,MiniProgramUserRepository,UserInfoRepository.Use interface IMiniProgramsDbContext instead of MiniProgramsDbContext. Then I can configure my custom DbContext in abp module replace MiniProgramsDbContext.
use case in my EntityFrameCoreModule:
context.Services.AddAbpDbContext<MemsMiniProgramsDbContext>(options => { options.ReplaceDbContext<IMiniProgramsDbContext>(); });

适配:小程序登录、用户信息相关接口调整

https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801

变更后的情况:

  1. userinfo以后只能靠前端上传
  2. 后端应对匿名数据做鉴别,不应用匿名数据覆盖真实数据
  3. 前端应提供一个用户主动刷新userinfo的途径

后端适配:

  1. 如果数据库中已有userinfo,则不用解析的匿名数据覆盖原数据
  2. 登录接口考虑不再要求前端上传userinfo(否决,需要用于签名校验)
  3. 增加一个前端上传userinfo的独立接口(/api/wechat-management/mini-programs/user-info)

前端适配:

  1. wx.getUserInfo接口不再要求点击按钮授权,可以直接发起,但只能获得假用户信息和openid/unionid
  2. 新的wx.getUserProfile接口必然每次发起都会弹窗要求用户授权,所以仅在用户第一次使用时获取一次(比如绑定手机号时),并且提供用户主动“同步微信信息”的入口,并使用接口主动上传用户信息

abp 7.3.0 版本看起来不能用

用这个创建的工程:
abp new XXX -u blazor-server -dbms PostgreSQL -m react-native --tiered -csf --no-random-port --with-public-website -v 7.3.0
按Readme描述操作,其中:
选了 EasyAbp.WeChatManagement.MiniPrograms.Domain.OpenIddict
EasyAbp.WeChatManagement.MiniPrograms.Web 加入 XXX.Blazor
Login.cshtml Login.cshtml.cs 也加入 XXX.Blazor

还没用二维码登录,使用密码登录就出现这个异常:
[22:25:37 WRN] ---------- RemoteServiceErrorInfo ----------
{
"code": null,
"message": "Your request is not valid!",
"details": "The following errors were detected during validation.\r\n - The MiniProgramName field is required.\r\n",
"data": {},
"validationErrors": [
{
"message": "The MiniProgramName field is required.",
"members": [
"miniProgramName"
]
}
]
}
[22:25:37 WRN] ModelState is not valid! See ValidationErrors for details.
Volo.Abp.Validation.AbpValidationException: ModelState is not valid! See ValidationErrors for details.
at Volo.Abp.AspNetCore.Mvc.Validation.ModelStateValidator.Validate(ModelStateDictionary modelState)
at Volo.Abp.AspNetCore.Mvc.UI.RazorPages.AbpPageModel.ValidateModel()
at Volo.Abp.Account.Web.Pages.Account.LoginModel.OnPostAsync(String action)
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ExecutorFactory.GenericTaskHandlerMethod.Convert[T](Object taskAsObject)
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ExecutorFactory.GenericTaskHandlerMethod.Execute(Object receiver, Object[] arguments)
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeHandlerMethodAsync()
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeNextPageFilterAsync()
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.Rethrow(PageHandlerExecutedContext context)
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeInnerFilterAsync()
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
[22:25:37 WRN] There are 1 validation errors:
The MiniProgramName field is required. (MiniProgramName)
[22:25:37 INF] Executed page /Account/Login in 358.1014ms
[22:25:37 INF] Executed endpoint '/Account/Login'
[22:25:38 ERR] An unhandled exception has occurred while executing the request.
Volo.Abp.Validation.AbpValidationException: ModelState is not valid! See ValidationErrors for details.
at Volo.Abp.AspNetCore.Mvc.Validation.ModelStateValidator.Validate(ModelStateDictionary modelState)
at Volo.Abp.AspNetCore.Mvc.UI.RazorPages.AbpPageModel.ValidateModel()
at Volo.Abp.Account.Web.Pages.Account.LoginModel.OnPostAsync(String action)
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ExecutorFactory.GenericTaskHandlerMethod.Convert[T](Object taskAsObject)
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ExecutorFactory.GenericTaskHandlerMethod.Execute(Object receiver, Object[] arguments)
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeHandlerMethodAsync()
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeNextPageFilterAsync()
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.Rethrow(PageHandlerExecutedContext context)
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeInnerFilterAsync()
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ExceptionContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Logged|17_1(ResourceInvoker invoker)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Logged|17_1(ResourceInvoker invoker)
at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
at Volo.Abp.AspNetCore.Serilog.AbpSerilogMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)
at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass6_1.<b__1>d.MoveNext()
--- End of stack trace from previous location ---
at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
at Volo.Abp.AspNetCore.MultiTenancy.MultiTenancyMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)
at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass6_1.<b__1>d.MoveNext()
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
at Volo.Abp.AspNetCore.Tracing.AbpCorrelationIdMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)
at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass6_1.<b__1>d.MoveNext()
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Localization.RequestLocalizationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.RequestLocalization.AbpRequestLocalizationMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)
at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass6_1.<b__1>d.MoveNext()
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)

实体 UserInfo 不存在

当我准备使用UserInfo获取用户信息时,但我得到了实体不存在的错误,确定引用包是没有问题的,因为我可以成功使用微信小程序登录;
我的环境如下
Net Core:6.0
Abp Client:5.1.4
WeChatManagement:1.3.1
下面是我调用的截图实例
image

小程序登录报错

绑定或登录报EasyAbp.Abp.WeChat.Common.Exceptions.SignatureInvalidException:

请问UserInfoModel信息如何获取到的

请问一下,UserInfoModel中包含的微信用户信息需要通过解密后才能获取到,
但是在WeChatManagement中也没有提供相关的解密接口
那么LoginAppService接口的LoginAsync参数中的UserInfoModel是如何获取到解密后的微信用户信息的呢

小程序授权PC登录返回 302 错误

前置:
后端程序:WeChatManagementSample

步骤:

  1. 扫码PC端登录小程序码
  2. 小程序发起登录请求,存储接口返回数据:/api/wechat-management/mini-programs/login/login
  3. 小程序确认登录PC端,把步骤 2.)的结果填充请求头 :/api/wechat-management/mini-programs/login/authorize-pc

问题:
在 步骤3 请求接口授权pc端登录遇到302错误并重定向至登录页,请问我操作上是否少了什么步骤,以下是小程序端相关methods代码:

  1. login() 进行小程序登录。
  2. auth() 对pc端授权登录。

methods: {

		login(param) {
			var $this = this;
			wx.login({
				success(res) {
					if (res.code) {
						console.log(res.code)
						//发起网络请求
						wx.request({
							method: "POST",
							url: $this.url + '/api/wechat-management/mini-programs/login/login',
							data: {
								appId: $this.appid,
								code: res.code,
								lookupUseRecentlyTenant: true
							},
							success(res) {
								console.log(res.data.rawData)
                        uni.setStorageSync('token', JSON.parse(res.data.rawData));
							}
						})
					} else {
						console.log('登录失败!' + res.errMsg)
					}
				}
			})
		},
		auth() {
			var $this = this;
			var s = uni.getStorageSync('token');
			debugger
			uni.request({
				url: $this.url + '/api/wechat-management/mini-programs/login/authorize-pc',
				method: "POST",
				header: s,
				data: {
					"token": $this.scene,
					"appId": $this.appid
				},
				success(res) {
					// console.log(res.data);
				}
			})
		}

}

微信小程序登录 报错

程序debug 到这个步骤的时候不进去 直接报这个错误~
image

Method not found: 'System.Collections.Generic.IDictionary2<System.String,System.String> IdentityModel.Client.ProtocolRequest.get_Parameters()'. System.MissingMethodException: Method not found: 'System.Collections.Generic.IDictionary2<System.String,System.String> IdentityModel.Client.ProtocolRequest.get_Parameters()'.
at EasyAbp.WeChatManagement.MiniPrograms.Login.LoginAppService.RequestIds4LoginAsync(String appId, String unionId, String openId)
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at EasyAbp.WeChatManagement.MiniPrograms.Login.LoginAppService.RequestIds4LoginAsync(String appId, String unionId, String openId)
at EasyAbp.WeChatManagement.MiniPrograms.Login.LoginAppService.LoginAsync(LoginInput input) in D:\GitProjects\WeChatManagement\modules\MiniPrograms\src\EasyAbp.WeChatManagement.MiniPrograms.Application\EasyAbp\WeChatManagement\MiniPrograms\Login\LoginAppService.cs:line 152
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Authorization.AuthorizationInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync()
at Volo.Abp.Auditing.AuditingInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Validation.ValidationInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync()
at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed)
at lambda_method1726(Closure , Object )
at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)

还有微信登录的时候 有时候报签名错误 过一会又会好掉

微信小程序报signature错误

在本地开发环境下可以正常登录,但是发布到服务器上就一直报错。
image
2021-02-20 17:40:39.263 +08:00 [ERR] Exception of type 'EasyAbp.Abp.WeChat.Common.Exceptions.SignatureInvalidException' was thrown.
EasyAbp.Abp.WeChat.Common.Exceptions.SignatureInvalidException: Exception of type 'EasyAbp.Abp.WeChat.Common.Exceptions.SignatureInvalidException' was thrown.
at EasyAbp.Abp.WeChat.MiniProgram.Infrastructure.SignatureChecker.Check(String rawData, String sessionKey, String signature)
at EasyAbp.WeChatManagement.MiniPrograms.Login.LoginAppService.GetLoginResultAsync(LoginInput input)
at EasyAbp.WeChatManagement.MiniPrograms.Login.LoginAppService.LoginAsync(LoginInput input)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Authorization.AuthorizationInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync()
at Volo.Abp.Auditing.AuditingInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Validation.ValidationInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync()
at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed)
at lambda_method1717(Closure , Object )
at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
2021-02-20 17:40:39.264 +08:00 [INF] Executing ObjectResult, writing value of type 'Volo.Abp.Http.RemoteServiceErrorResponse'.
2021-02-20 17:40:39.265 +08:00 [INF] Executed action EasyAbp.WeChatManagement.MiniPrograms.Login.LoginController.LoginAsync (EasyAbp.WeChatManagement.MiniPrograms.HttpApi) in 159.1997ms

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.