ASP.NET Core 是开发微信小程序后端的推荐选择,需正确实现 code2Session、access_token 获取及手机号解密,并严格遵循 HTTPS、JWT 独立密钥、session_key 安全缓存等规范。

微信小程序后端用 ASP.NET Core 完全可行,且是推荐选择
微信小程序本身不绑定任何后端语言,只要能提供符合规范的 HTTPS 接口、正确处理签名与加密逻辑,C# 完全胜任。ASP.NET Core 6+ 是当前最稳妥的选择——它轻量、跨平台、原生支持 JWT 和 OAuth2 流程,也方便对接微信的 code2Session、getAccessToken 等接口。
必须处理的三个微信关键接口:login、access_token、解密手机号
小程序登录流程不是“发个 token 就完事”,而是有明确时序依赖。漏掉任一环,前端就会卡在 wx.login 后拿不到用户身份。
-
code2Session必须由后端调用微信服务端接口(https://api.weixin.qq.com/sns/jscode2session),不能让前端直接请求——否则会暴露appid和appsecret - 获取到的
openid要和数据库关联;session_key必须安全存储(建议内存缓存 + 过期策略,**绝不写库**) - 解密手机号等敏感字段时,必须用原始
session_key+encryptedData+iv三者调用Aes128CbcDecrypt,.NET 中推荐用Aes.Create()配合PaddingMode.PKCS7,别手写 Base64 或 IV 拼接逻辑
HTTPS、域名、合法 TLS 证书是硬门槛,本地调试要绕过但不能忽略
微信开发者工具和真机都强制校验 HTTPS,且要求证书由受信 CA 签发(Let’s Encrypt 可用,自签名证书不行)。开发阶段常有人用 localhost:5001 直连,结果真机测试全失败。
- 本地联调可用
ngrok或localtunnel映射公网地址,确保微信后台配置的「request 合法域名」包含该地址 - ASP.NET Core 中启用 HTTPS 重定向时,检查
app.UseHttpsRedirection()是否在UseRouting()之后,否则反向代理(如 Nginx)下可能 307 循环 - 微信服务器回调(如订阅消息推送)要求 443 端口响应,若部署在内网,需确保防火墙或云平台安全组放行
JWT Token 设计要避开微信 session_key 生命周期陷阱
很多人把微信返回的 session_key 直接当 JWT 的密钥用,这是错的。session_key 有效期约 2 小时且不可刷新,而业务 token 应该独立生命周期管理。
- 建议用独立密钥(如
Configuration["Jwt:Key"])签发 JWT,payload 中只存openid和必要字段 - 不要在 JWT 中塞
session_key,需要解密时再查缓存或 DB 关联 - 前端每次请求带
Authorization: Bearer xxx,后端用AddJwtBearer验证,别自己手写中间件解析 token - 注意微信用户可能换设备导致
session_key失效,此时解密失败应返回明确错误(如"errcode": 40001),而不是抛 500
微信的加密逻辑和会话管理比表面看起来更脆弱,尤其 session_key 复用、时间漂移、IV 错位这些细节,一出问题就难定位。宁可多打几行日志,也别省掉对 encryptedData 长度、Base64 格式、PKCS7 填充的校验。



















