推荐一个基于 EasyAbp.Abp.WeChat 模块实现微信登录、微信用户信息存储、微信服务器管理、微信第三方平台等高级功能的 Abp 应用模块组 WeChatManagement。
目前实现了 Abp 小程序管理模块,提供小程序登录、用户个人信息记录、小程序微信服务器等功能,自动适应微信开放平台规则,与微信第三方平台模块轻松衔接。
安装
安装依赖
- EasyAbp.WeChatManagement.MiniPrograms.Application
- EasyAbp.WeChatManagement.MiniPrograms.Application.Contracts
- (2 选 1) EasyAbp.WeChatManagement.MiniPrograms.Domain.OpenIddict
- (2 选 1) EasyAbp.WeChatManagement.MiniPrograms.Domain.Ids4
- EasyAbp.WeChatManagement.MiniPrograms.Domain.Shared
- EasyAbp.WeChatManagement.MiniPrograms.EntityFrameworkCore
- EasyAbp.WeChatManagement.MiniPrograms.HttpApi
- EasyAbp.WeChatManagement.MiniPrograms.HttpApi.Client
- (Optional) EasyAbp.WeChatManagement.MiniPrograms.MongoDB
- (Optional) EasyAbp.WeChatManagement.MiniPrograms.Web
- (Optional) EasyAbp.Abp.WeChat.Common.SharedCache.StackExchangeRedis (重要!如果开发/沙盒/线上均使用了相同的微信 AppId,请安装此模块,使用中立缓存共享 AccessToken:)
配置模块依赖项:
DependsOn(typeof(WeChatManagementMiniProgramsXxxModule)))
MyProjectMigrationsDbContext.cs 中添加:
builder.ConfigureWeChatManagementCommon();
builder.ConfigureWeChatManagementMiniPrograms();
OnModelCreating()
添加 EF Core 迁移并更新数据库。
在 Web/Host 项目的 appsettings.json 中增加微信登录授权服务器配置:
{
"WeChatManagement": {
"MiniPrograms": {
"AuthServer": {
"Authority": "https://localhost:44380",
"ClientId": "MyProjectName_WeChatMiniProgram",
"ClientSecret": "1q2w3e*"
}
}
}
}
OpenIddictDataSeedContributor 中增加新的客户端
// WeChat MiniProgram
var weChatMiniProgramClientId =
configurationSection["MyProjectName_WeChatMiniProgram:ClientId"];
if (!weChatMiniProgramClientId.IsNullOrWhiteSpace())
{
await CreateApplicationAsync(
name: weChatMiniProgramClientId,
type: OpenIddictConstants.ClientTypes.Confidential,
consentType: OpenIddictConstants.ConsentTypes.Implicit,
displayName: "WeChat Mini-program",
secret: configurationSection["MyProjectName_WeChatMiniProgram:ClientSecret"] ?? "1q2w3e*",
grantTypes: new List
{
OpenIddictConstants.GrantTypes.RefreshToken,
WeChatMiniProgramConsts.GrantType
},
scopes: commonScopes
);
}
在 OpenIddictDataSeedContributor 中找到
if (grantType == OpenIddictConstants.GrantTypes.ClientCredentials)
{
application.Permissions.Add(OpenIddictConstants.Permissions.GrantTypes.ClientCredentials);
}
在下面增加
if (grantType == WeChatMiniProgramConsts.GrantType)
{
application.Permissions.Add($"gt:{WeChatMiniProgramConsts.GrantType}");
}
在 DbMigrator 项目的 appsettings.json 中增加:
{
"OpenIddict": {
"Applications": {
"WeChatManagementSample_WeChatMiniProgram": {
"ClientId": "MyProjectName_WeChatMiniProgram",
"ClientSecret": "1q2w3e*"
}
}
}
}
运行 DbMigrator 项目,以创建新的授权客户端。
使用
小程序登录
使用 (POST) 接口进行微信登录,留意 LoginInput 的注释说明。/api/wechat-management/mini-programs/login/login
使用 (POST) 接口对 AccessToken 续期。/api/wechat-management/mini-programs/login/refresh
在有需要时,使用 (PUT) 接口对存储的微信用户信息进行更新。(见 #20/api/wechat-management/mini-programs/user-info)
小程序授权 Razor 页面登录
配置用于微信登录的小程序的 Name,默认为,参考本模块设置。Default
重写登录页,在页面中插入 WeChatMiniProgramPcLoginWidget,重写方法参考 官方文档 和 本模块示例。
微信扫码后(默认配置下,会打开小程序首页),确保小程序本身已完成用户登录,小程序需要将扫码获得的 scene 作为 token 参数传入 接口。/api/wechat-management/mini-programs/login/authorize-pc
完成上一步后,Razor 登录页将自动完成登录并跳转。
系统截图
github 地址
https://github.com/EasyAbp/WeChatManagement
来源:DotNet 宝藏库