基于EasyAbp.Abp.WeChat模块实现微信登录、微信用户信息存储、微信服务器管理、微信第三方平台等高级功能的Abp应用模块组
- 安装小程序模块
- 安装公众号模块
- 安装企业微信模块
- 安装第三方平台模块
- 使用小程序模块
- 使用公众号模块
- 使用企业微信模块
- 使用第三方平台模块
- 公众号模块
- 企业微信模块
- 第三方平台模块
基于EasyAbp.Abp.WeChat模块实现微信登录、微信用户信息存储、微信服务器管理、微信第三方平台等高级功能的Abp应用模块组
License: MIT License
基于EasyAbp.Abp.WeChat模块实现微信登录、微信用户信息存储、微信服务器管理、微信第三方平台等高级功能的Abp应用模块组
https://domain/api/wechat-management/third-party-platforms/event-handling/notify/app/$APPID$?
signature=588d8b5f47658fcb36c2e143e303d66583ccf49c
×tamp=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
×tamp=1695372335
&nonce=487417731
&encrypt_type=aes
&msg_signature=89587578ebc2f40804e8c7acae755f42d5b9fd05
请问一下,UserInfoModel中包含的微信用户信息需要通过解密后才能获取到,
但是在WeChatManagement中也没有提供相关的解密接口
那么LoginAppService接口的LoginAsync参数中的UserInfoModel是如何获取到解密后的微信用户信息的呢
与问题 #5 类似错误,删除示例中的modules文件夹,仅保留samples,将samples项目引用改到nuget引用
https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801
变更后的情况:
后端适配:
前端适配:
Wechat Bind phone number API should be updated to use new target url, currently it is outdated.
See
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
移除LoginInput中的属性:UserInfo、RawData、Signature、EncryptedData、Iv
相关:#20
用这个创建的工程:
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)
在domain项目中添加[DependsOn(WeChatManagementMiniProgramsDomainOpenIddictModule)]模块,使用swagger ui调用接口出现:403未授权
什么时候能支持7.0.0
作为带缓存的数据提供者
其他任务:
使用Store替换一部分直接使用仓储的代码
IMiniProgramUserStore 增加便利方法 GetCurrentSessionKeyAsync()
,用于获取当前用户的session key,其中appid的过去途径为claims。
前置:
后端程序:WeChatManagementSample
步骤:
问题:
在 步骤3 请求接口授权pc端登录遇到302错误并重定向至登录页,请问我操作上是否少了什么步骤,以下是小程序端相关methods代码:
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);
}
})
}
}
微信管理示例打不开
思路:pc生成绑定码->小程序扫码授权上传绑定相应数据->pc获取授权数据->pc确认操作,绑定结束
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)
}
我在domain层中使用EasyAbp.Abp.WeChat.Common.SharedCache.StackExchangeRedis,模块也注入了,但没有数据存入到redis中,在appsetting的settings中也配置了redis
Method not found: 'System.Collections.Generic.IDictionary2<System.String,System.String> IdentityModel.Client.ProtocolRequest.get_Parameters()'. System.MissingMethodException: Method not found: 'System.Collections.Generic.IDictionary
2<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.CastleAsyncAbpInterceptorAdapter
1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue
1.ProceedAsync()
at Volo.Abp.Auditing.AuditingInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func
3 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.CastleAsyncAbpInterceptorAdapter
1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue
1.ProceedAsync()
at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func
3 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)
还有微信登录的时候 有时候报签名错误 过一会又会好掉
是否支持第三方平台代码管理呢,自动提交审核、发布等。
绑定或登录报EasyAbp.Abp.WeChat.Common.Exceptions.SignatureInvalidException:
进入Login页面报错
微信 API 返回的内容为:{"errcode":40013,"errmsg":"invalid appid rid: @60baeab1-5b56bca1-4664e8c5"}',这是因为什么呢?
@gdlcf88 求教下
在小程序端用wx.login获取的code传入/miniPrograms/login/login后code2SessionResponse方法返回"errcode":40163,"errmsg":"code been used,
小程序APP表中有多个相同的APPID,不同租户时,登陆异常
经过多次测试和尝试在ids的数据表中完善配置,始终无法通过/api/wechat-management/mini-programs/login/login登录获取到givename,而在我们项目中givename有比较重要的作用, 想确认一下是因为配置的问题还是项目本身不支持呢
在本地开发环境下可以正常登录,但是发布到服务器上就一直报错。
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.CastleAsyncAbpInterceptorAdapter
1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue
1.ProceedAsync()
at Volo.Abp.Auditing.AuditingInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func
3 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.CastleAsyncAbpInterceptorAdapter
1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue
1.ProceedAsync()
at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func
3 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
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.SignInManager
1[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.IDistributedCache
1[EasyAbp.WeChatManagement.MiniPrograms.Login.MiniProgramPcLoginUserLimitCacheItem], Microsoft.Extensions.Options.IOptions`1[Microsoft.AspNetCore.Identity.IdentityOptions], Volo.Abp.Identity.IdentityUserManager,
实现方式:
有没有小程序端的示例代码呢
文档地址:https://easyabp.io/modules/WeChatManagement/MiniPrograms/#installation
1.演示地址无法访问。
2.Add DependsOn(typeof(WeChatManagementMiniProgramsXxxModule)) attribute to configure the module dependencies. (see how)无法访问。
模块命名:Official
(或者OfficialAccount
?)。
开发计划:
由于疏忽导致线上线下的配置不同,本地执行的正常,线上也是一片200,但是执行结果不符合预期。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.