Skip to content
bitzorcas
中EN

Concept

微信生态连接器与公众号企业微信集成

深入解析 BitzOrcas.Platform.WeChat.Mp 模块:多租户微信公众号/企微配置隔离、带参二维码扫码登录、事件路由分发与模板消息下发。

Last updated

微信生态连接器与公众号企业微信集成 (WeChat Ecosystem Integration)

在中国企业的数字化协同与移动办公中,微信生态(微信服务号、订阅号、企业微信)是连接终端用户、企业员工与法务协同的核心纽带。

BitzOrcas.Platform.WeChat.Mp 模块提供了原生的多租户微信生态接入基础设施。它支持多租户独立 AppId/Secret 配置隔离、带参场景二维码(Scene QR)免密扫码登录、微信服务器回调 SHA1 防伪签名校验、以及异步可靠的模板消息(Template Message)下发管线。


1. 架构拓扑与多租户隔离

系统支持多租户各自绑定专属的微信公众平台账号,平台通过 TenantId 实现配置的物理隔离:

业务与身份领域BitzOrcas.Modern 宿主网关微信公众平台网关 (Tencent Cloud)终端用户 (WeChat Mobile App)扫码事件 / 关注POST XML/JSONHTTPS POST推送消息

微信扫一扫 / 接收服务号通知

api.weixin.qq.com

/api/wechat/mp/callback (回调网关)

SHA1 防伪验签 (Token, Timestamp, Nonce)

微信事件分发器 (WeChatEventDispatcher)

IWeChatTemplateMessageSender (模板消息通道)

Identity (扫码身份绑定与颁发 Token)

Notifications (业务事件下发企微卡片)


2. 微信回调验签算法:安全防伪

来自微信服务器的所有 Webhook 推送必须首先通过 SHA1 字典序签名验证,杜绝任何外部伪造回调:

using System;
using System.Security.Cryptography;
using System.Text;
namespace BitzOrcas.Platform.WeChat.Mp.Infrastructure;
/// <summary>
/// 微信公众平台防伪签名验证器
/// </summary>
public static class WeChatSignatureValidator
{
/// <summary>
/// 校验微信服务器回调请求签名
/// </summary>
/// <param name="token">租户在后台配置的通信 Token</param>
/// <param name="timestamp">请求时间戳</param>
/// <param name="nonce">随机数</param>
/// <param name="signature">微信附带的签名</param>
/// <returns>校验是否通过</returns>
public static bool VerifySignature(string token, string timestamp, string nonce, string signature)
{
if (string.IsNullOrWhiteSpace(token) || string.IsNullOrWhiteSpace(signature))
{
return false;
}
// 1. 将 token、timestamp、nonce 三个参数进行字典序排序
var array = new[] { token, timestamp, nonce };
Array.Sort(array, StringComparer.Ordinal);
// 2. 将三个参数字符串拼接成一个字符串进行 sha1 加密
var combined = string.Concat(array);
var hashBytes = SHA1.HashData(Encoding.UTF8.GetBytes(combined));
var computedSignature = Convert.ToHexString(hashBytes).ToLowerInvariant();
// 3. 恒定时间比较防范定时攻击 (Constant-time comparison)
return CryptographicOperations.FixedTimeEquals(
Encoding.UTF8.GetBytes(computedSignature),
Encoding.UTF8.GetBytes(signature.ToLowerInvariant()));
}
}

3. 带参二维码登录全流程实战

用于 PC 端的“微信扫码一键免密登录”:

  1. 生成临时带参二维码:前端调用 API 生成一个 scene_id(包含雪花登录凭据),调用微信 API 获取临时二维码 Ticket 并渲染给用户;
  2. 移动端扫码与关注:用户使用微信扫码,微信服务器向 BitzOrcas 回调 SCAN 或 SUBSCRIBE 事件;
  3. 身份匹配与换端放行:
    • 系统提取用户 OpenId 与 UnionId;
    • 若已绑定账号,自动在 Redis 中更新该 scene_id 的凭据状态为 Approved 并颁发身份 JWT;
    • 前端通过 SignalR 或轮询捕获到批准信号,无缝完成登录。

100%

滚轮或按钮缩放 · 放大后拖动画面 · 双击切换 100% / 200%