00 / 00

微信登录:能不碰就不碰

微信登录方式多、坑多、成本不透明。先搞清楚什么情况必须用它,什么情况应该绕开。

微信登录的麻烦不在技术——每一套方案单看都不难。麻烦的是有六七种方案,各自适用场景、资质要求、年费都不一样。选错了一个月后发现走不通,得回头重来。

默认选择:手机号验证码登录

除非确定必须走微信,否则从手机号+验证码开始。通用性最强:

  • 用户只要有一部手机
  • 不限平台、不限浏览器
  • 不需要申请任何资质
  • 小程序、网站、App 全端通用
  • 一个手机号就能把各端用户统一

很多场景里,微信登录是开发者比用户麻烦得多。用户端无非多输一次验证码,开发者要配开放平台、等审核、处理兼容问题。


方案一:小程序内 wx.login() 原生登录

项目说明
费用免费
资质有小程序账号即可(个人主体也能用)
体验最好,静默授权或弹窗确认
接入一天内可完成
结论推荐使用

调用 wx.login() 获取 code,传给后端换 openid。需要绑定手机号就用 <button open-type="getPhoneNumber">

唯一前提:你得有小程序。

方案二:小程序码统一登录(网站/H5/App → 小程序确认)

网站和 App 也要接微信登录时,大部分人第一反应是去申请开放平台。但有一替代方案:用小程序作为统一入口

网站或 App 展示小程序码 → 用户扫码 → 打开小程序确认页 → 点"确认登录" → 网站登录成功。所有外部平台的微信登录都跳转到小程序完成。

项目说明
费用免费
资质非个人主体小程序(企业/个体户)
体验中等,需要扫码后跳转小程序确认
接入1 周左右
跨端能力网站/H5/App 全支持
结论跨平台微信登录的首选方案

流程:

网站展示小程序码 → 用户微信扫码 → 打开小程序确认页
→ 用户点击"确认登录" → 小程序上报服务端 → 网站轮询到结果 → 登录成功

后端生成登录 ticket,调 wxacode.getUnlimited 把 ticket 编入 scene:

POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN
Body: { "scene": "login_ticket_abc123", "page": "pages/login/confirm" }

scene 最长 32 字节。小程序端在 onLaunch / onShow 中读取:

App({
  onLaunch(options) {
    const scene = decodeURIComponent(options.query.scene || '')
  }
})

移动端 H5 可以用 URL Link 省掉扫码:

https://wxaurl.cn/TICKET?cq=CUSTOM_PARAMS

点击直接拉起微信打开小程序确认页。每天生成上限 50 万次、打开上限 600 万次。需要非个人主体小程序。

方案三:开放平台网站扫码登录(传统方案)

项目说明
费用300 元/年(开放平台认证费)
资质微信开放平台 + 网站应用审核
体验一般,用户需要掏出手机扫码
接入1-2 周
需要 ICP 备案
结论不推荐,除非需要 UNIONID 打通

网页展示微信二维码,用户扫码确认。需要微信开放平台账号,每年 300 元,网站应用还要 ICP 备案号。早期项目很可能没有备案。

功能上方案二(小程序码登录)等价且免费、免备案。

方案四:服务号 H5 授权登录

项目说明
费用300 元/年(服务号认证费)
资质微信服务号(订阅号不行,要认证)
体验好,微信内点击→跳转授权页→确认→跳回
适用范围仅限微信浏览器内
结论只适用于在微信群里传播的 H5

流程:微信内打开 H5 → 点"微信登录" → 跳 OAuth 授权页 → 用户同意 → 微信带 code 跳回 → 后端换 access_token。

在微信内体验顺畅,出了微信浏览器就废。

方案五:App 微信登录

项目说明
费用300 元/年(开放平台认证费,和网站应用各自独立
资质微信开放平台 + 移动应用单独审核
体验好,拉起微信 App 授权
接入1-2 周(含审核)
结论绕不开,需要就老实申请

开放平台下网站应用移动应用是独立的应用类型,各自注册、各自审核、各自缴费。

应用类型用于是否独立审核
网站应用PC 网页微信扫码登录是,需要 ICP 备案
移动应用iOS/Android App 微信登录是,需要软著或应用商店截图
小程序不需要通过开放平台注册走小程序自己的流程
公众号不需要通过开放平台注册走公众号自己的流程

URL Scheme 拉起小程序绕过开放平台的方式不太可靠:

  • 判断用户是否装了微信仍需要 WeChat SDK
  • 只用 URL Scheme 仍需要在开放平台注册移动应用拿 AppID
  • 各厂商对 URL Scheme 的限制越来越多

App 接微信登录基本绕不开开放平台。

接入方式

方式一:小程序原生 + 小程序码统一登录(推荐)

方案一和方案二的组合:

  • 小程序内wx.login() → code → openid
  • 网站/PC:展示小程序码,用户扫码进小程序确认
  • H5 移动端:URL Link 直接跳小程序
  • App 内:WebView 展示小程序码,用户截图到微信扫码

后端四个接口:

  1. POST /api/auth/miniprogram-login — 小程序 code 换 openid
  2. POST /api/auth/create-ticket — 生成登录 ticket,返回小程序码图片
  3. POST /api/auth/confirm-login — 小程序确认页调用来标记 ticket 已认证
  4. GET /api/auth/poll-login?ticket=xxx — 网站轮询 ticket 状态

方式二:腾讯云开发(CloudBase)集成

封装了 OAuth 跳转、AccessToken 管理、用户身份映射:

import cloudbase from '@cloudbase/js-sdk';
const app = cloudbase.init({ env: 'your-env-id' });
const auth = app.auth();
const { data, error } = await auth.signInWithOAuth({ provider: 'wechat' });

SDK 自动判断环境——微信浏览器内跳授权页,普通浏览器降级为扫码。

注意:底层仍需要开放平台配置,资质门槛没少。只封装了前端交互。

方式三:原生微信 API

直接接微信官方 API,要自己处理 AccessToken 刷新、code 换 session_key、session 管理。

  • 小程序wx.login() → code → 后端调 code2Session 换 openid
  • 网站:开放平台 OAuth 2.0,构造 https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=...

UNIONID

小程序和网站(或 App)要识别出同一用户,需要 UNIONID。前提是各应用在微信开放平台绑定在同一账号下。

没绑定的话,同一用户在不同端会有不同的 OPENID。MVP 阶段不需要纠结,上线后补都来得及。

两个常见误区

误区一:能接微信登录 = 能开通微信支付

两套体系。微信支付商户需要企业资质或个体工商户,另有一套申请流程。

误区二:小程序登录不需要开放平台

小程序登录本身不需要。但要打通小程序和网站的用户数据(UNIONID),就需要开放平台绑定应用。

总结

需求推荐方案年费复杂度
只要小程序wx.login() 原生登录免费
网站/H5 也要微信登录小程序码统一登录免费
App 要微信登录开放平台移动应用注册 + 小程序码兜底300元
微信内 H5 页面服务号网页授权300元
需要 UNIONID 打通开放平台绑定所有应用 + 小程序码登录300元起
还没想清楚手机号验证码登录最低最低

MVP 阶段路径:手机号验证码登录 → 用户量上来后补微信登录(小程序码方案)→ 再往后才考虑 UNIONID 打通

微信支付看这篇:支付接入。技术栈选择:技术栈选择指南

这篇文档有问题?