一个回调域,多站共用
把微信授权回调域固定为网关域名,任意业务域名通过 client_id 接入,新增站点无需再改微信后台配置。
不用再为每个站点单独申请微信网站应用,也不用反复调整回调域。
把微信授权回调域固定为网关域名,任意业务域名通过 client_id 接入,新增站点无需再改微信后台配置。
同一开放平台下,所有站点拿到一致的 unionid,用户在一处登录即可识别为同一个人。
业务回调只拿到短效 ticket(默认 300 秒、仅可使用一次),用户资料由业务后端凭密钥换取,不暴露在浏览器。
业务站只需两步:跳转网关发起授权、回调后用 ticket 调一个接口。官方示例覆盖 PHP / Node / Java。
每次扫码记录项目、openid / unionid、昵称、IP 与时间,排查问题、核对用户来源都有据可查。
上传即用:SQLite 自动建表,首次访问初始化管理员,无需安装数据库或额外扩展。
浏览器与后端各司其职,密钥只在服务端流转。
生成 state 并 302 到网关 /oauth/authorize,携带 client_id 与回调地址。
校验项目状态与回调域名白名单,随后跳转微信官方扫码页。
网关用 code 换取用户资料、记录日志,并生成一次性 ticket。
浏览器带 ticket 回到业务站,后端凭 client_secret 调 /api/user/info。
第一步把用户送到网关,第二步在回调里用 ticket 换资料。所有语言的处理方式完全一致。
// 微信授权回调:用 ticket 换取用户资料
$resp = file_get_contents(
'https://login.fps5.cn/api/user/info',
false,
stream_context_create(['http' => [
'method' => 'POST',
'header' => 'Content-Type: application/x-www-form-urlencoded',
'content' => http_build_query([
'client_id' => $clientId,
'client_secret' => $clientSecret,
'code' => $_GET['code'],
]),
]])
);
$json = json_decode($resp, true);
if ($json['code'] === 200) {
// $json['data']['openid'] / unionid / nickname / avatar
}
从部署到上线,需要的东西都在这里。