企业微信(内部开发)
本文档介绍如何通过插件能力自定义企业微信登录流程。
插件 类型
企业微信(内部开发)插件类型:WeComLoginInternal
扩展点说明
目前支持两个扩展点,可以通过插件脚本进行自定义处理:
1. BeforeCreateWeComUser(创建用户前)
触发时机:在创建企业微信用户之前
用途:
- 自定义企业微信用户所属部门
- 自定义用户创建逻辑
可用参数:
| 参数名 | 说明 | 示例值 |
|---|---|---|
| Action | 动作类型 | "BeforeCreateWeComUser" |
| UserId | 用户 ID | "user-001" |
| Name | 用户姓名 | "张三" |
| 用户邮箱 | "zhangsan@example.com" | |
| Phone | 用户手机号 | "13800138000" |
| Number | 用户编号 | "B003" |
| Status | 用户状态 | "Normal" |
| Department | 用户部门 | "技术部" |
| IsDeveloper | 是否开发者 | "true" |
| WeComDepartment | 企业微信部门 ID | "1" |
| ContactAccessToken | 通讯录访问令牌 | "token-string" |
修改参数:
WeComDepartment:设置企业微信目标部门,多个部门用逗号分隔(如 "1,2,3")
2. AfterBindingWeComUser(绑定用户后)
触发时机:在绑定企业微信用户成功之后
用途:
- 自定义绑定后的跳转逻辑
- 执行额外的业务逻辑
可用参数:
| 参数名 | 说明 | 示例值 |
|---|---|---|
| Action | 动作类型 | "AfterBindingWeComUser" |
| UserId | 用户 ID | "user-001" |
| Name | 用户姓名 | "张三" |
| 用户邮箱 | "zhangsan@example.com" | |
| Phone | 用户手机号 | "13800138000" |
| Number | 用户编号 | "B003" |
| Status | 用户状态 | "Normal" |
| Department | 用户部门 | "技术部" |
| IsDeveloper | 是否开发者 | "true" |
| ContactAccessToken | 通讯录访问令牌 | "token-string" |
特殊操作:
- 抛出
ChameleonException异常可以控制跳转行为
插件脚本示例
以下是一个完整的插件脚本示例:
using System;
using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Chameleon.Common;
using Chameleon.Common.Context;
using Chameleon.Common.Exceptions;
using Chameleon.Common.Models;
using Chameleon.Database;
using Chameleon.SDK;
public class ChameleonCSharpScript
{
public async Task<object> ExecuteAsync(ComponentContext context, ChameleonSDK sdk)
{
if (context.DicParam.TryGetValue("Action", out var action))
{
switch (action)
{
case "BeforeCreateWeComUser":
// 创建人员时,设置企业微信目标部门,多个逗号分隔
context.DicParam["WeComDepartment"] = "3";
break;
case "AfterBindingWeComUser":
// 绑定企业微信用户成功后,设置跳转到某个页面
throw new ChameleonException("redirect") {
Action = Chameleon.Common.Enums.ActionEnum.Redirect,
RedirectUrl = "/User/LayoutPage/MetaPage/9f1a2c44-0c30-4160-ba68-0fd518107744"
};
default:
break;
}
}
return null;
}
}
使用场景
1. 自定义用户部门
在创建企业微信用户时,根据业务需求设置不同的部门:
case "BeforeCreateWeComUser":
// 根据用户编号判断部门
var number = context.DicParam["Number"];
if (number.StartsWith("IT"))
{
context.DicParam["WeComDepartment"] = "1,2"; // IT 部门
}
else if (number.StartsWith("HR"))
{
context.DicParam["WeComDepartment"] = "3"; // HR 部门
}
else
{
context.DicParam["WeComDepartment"] = "4"; // 默认部门
}
break;
2. 绑定后跳转
在绑定企业微信用户成功后,跳转到指定页面:
case "AfterBindingWeComUser":
throw new ChameleonException("redirect") {
Action = Chameleon.Common.Enums.ActionEnum.Redirect,
RedirectUrl = "/User/LayoutPage/MetaPage/9f1a2c44-0c30-4160-ba68-0fd518107744"
};
3. 发送通知
在绑定成功后,发送欢迎消息或通知:
case "AfterBindingWeComUser":
var userId = context.DicParam["UserId"];
var name = context.DicParam["Name"];
// 发送欢迎消息
await sdk.NotificationHelper.SendSystemMessageAsync(
userId,
"欢迎加入",
$"欢迎 {name} 加入系统!"
);
break;
配置步骤
1. 创建插件
在系统中创建企业微信(内部开发)插件:
- 进入开发工具 > 插件管理
- 点击创建插件
- 选择插件类型:
WeComLoginInternal - 填写插件名称和描述
- 编写插件脚本
- 启用插件
2. 测试插件
插件创建完成后,测试插件功能:
- 访问企业微信登录页面
- 完成登录或绑定流程
- 检查插件是否按预期执行
注意事项
-
插件执行顺序
- 如果启用了多个同类型插件,只有第一个插件会生效
- 建议只启用一个企业微 信(内部开发)插件
-
错误处理
- 插件脚本中的错误不会影响正常流程
- 建议在脚本中添加错误处理逻辑
-
性能影响
- 插件执行会增加登录流程的时间
- 建议优化脚本逻辑,减少不必要的操作
-
安全性
- 插件脚本可以访问用户敏感信息
- 请确保脚本的安全性