c# 开发微信小程序后台

来源:这里教程网 时间:2026-02-21 17:42:28 作者:

微信小程序后台用 C# 完全可行,但要注意:微信官方 SDK 只提供 Java、Node.js、PHP 和 Python 版本,

没有官方 C# SDK
。你得自己封装接口,或用社区维护的第三方库(如
Senparc.Weixin
),否则容易在签名、解密、模板消息等环节翻车。

用 Senparc.Weixin 快速接入微信开放接口

这是目前最成熟的 C# 微信 SDK,支持公众号、小程序、开放平台,且持续更新。它把

code2Session
getPhoneNumber
sendTemplateMessage
等高频接口都做了封装,也处理了 AES-128-CBC 解密、SHA256 签名等底层细节。

实操建议:

通过 NuGet 安装
Senparc.Weixin.MP
(小程序用这个包,不是
.SDK
初始化时必须设置
AppId
AppSecret
Token
(后者仅用于消息服务器校验,小程序后台通常不用)
调用
WxOpenApi.GetSessionInfoAsync()
换取
openid
session_key
,注意传入的
code
是前端
wx.login()
返回的一次性临时码
别直接存
session_key
—— 它有效期约 2 小时,且微信不允许多次使用;解密用户数据(如手机号、加密字段)后应立即用完丢弃

解密微信用户敏感数据(如手机号)的坑

前端调用

wx.getPhoneNumber()
后拿到
encryptedData
iv
,后端需用
session_key
解密。C# 默认的
AesCryptoServiceProvider
容易出错,因为微信要求:

填充模式必须是
PKCS7
(不是
None
PKCS5
块大小必须是
128
位(即 16 字节)
iv
是 base64 编码字符串,解密前要先
Convert.FromBase64String()
session_key
本身也是 base64 编码,且长度固定为 24 字节(对应 192 位密钥)

Senparc.Weixin
DecryptHelper.DecryptPhoneData()
可绕过这些细节;自己写的话,务必核对
Aes.Mode = CipherMode.CBC
Aes.Padding = PaddingMode.PKCS7

HTTPS + 域名备案是硬门槛,本地调试得绕过

微信小程序强制要求所有后台接口走 HTTPS,且域名必须在「小程序后台 → 开发管理 → 服务器域名」中配置,且该域名需完成 ICP 备案(个人主体只能备案一个域名)。这意味着:

localhost / 127.0.0.1 / 内网 IP 全部无法直连,
request:fail net::ERR_CONNECTION_REFUSED
是常见报错
开发阶段可用
ngrok
localtunnel
映射本地端口到 HTTPS 地址(如
https://xxx.ngrok.io
),再填进小程序后台
正式部署时,IIS 要绑定 SSL 证书,且确保
web.config
中未禁用 TLS 1.2(微信服务器只支持 TLS 1.2+)
C# Web API 若用 Kestrel,默认不支持 HTTPS 重定向,需在
Startup.Configure()
app.UseHttpsRedirection()

模板消息已废弃,用订阅消息替代

微信在 2022 年全面下线模板消息接口(

sendTemplateMessage
),现在统一用「订阅消息」,规则更严格:

用户必须主动点击按钮触发
openSetting
requestSubscribeMessage
,才能获得一次授权
后端调用的是新接口
https://api.weixin.qq.com/cgi-bin/message/subscribe/send
,参数结构不同(比如用
template_id
替代
template_id_short
Senparc.Weixin
v6.9.0+ 已支持
WxOpenApi.SendSubscribeMessageAsync()
,但要注意返回的
errcode
:-1 是系统繁忙,43101 是用户拒订,41028 是参数缺失
测试时用体验版无法触发订阅弹窗,必须用真机扫码「线上版本」或「开发版」

真正难的不是写代码,而是微信那些隐性规则:比如

session_key
不能复用、解密失败不报具体错误、域名备案卡两周、订阅消息授权链路断一环就全白搭。留好日志,尤其记录
encryptedData
iv
session_key
和时间戳,出问题时才有依据比对。

相关推荐