接入文档 V0.1.0

10 分钟接完:最小可用链路

目标:在你的站点里做出「微信内一键登录」。全程只需要 3 个东西:站点短码、接入密钥、4 行代码。

第 0 步:确认前置条件

条件怎么确认
你的站点是 https,且域名已备案浏览器直接打开 https://你的域名/ 不报证书错误
中台已登记你的站点请中台管理员在「接入站点」里加一条,或自己加(入口)
中台入口域名已配成网页授权域名mp 后台 → 功能设置 → 网页授权域名 = wx.onzx.cn
本机出口 IP 在开发者平台白名单里微信账号页顶部会显示出口 IP

第 1 步:把登录按钮指到中台

<a href="https://wx.onzx.cn/oauth/entry?site=你的短码&scope=snsapi_userinfo&return=/me">
  微信授权登录
</a>

三个参数:

第 2 步:站点接收票据并兑换身份

跳回时 URL 形如:/me?hub_ticket=xxxx&hub_site=你的短码&hub_scope=snsapi_base。

<?php
// 站点侧:只用一次,兑换完立刻建自己的会话
require 'hub-client.php';                       // 从 https://wx.onzx.cn/docs/download 下载
$hub = new HubClient('你的短码', getenv('WXHUB_SECRET'));

if (isset($_GET['hub_ticket'])) {
    $id = $hub->exchange($_GET['hub_ticket']);   // 失败会抛 HubException,带 code
    // $id = ['openid'=>…, 'unionid'=>…, 'nickname'=>…, 'is_followed'=>true, …]
    $user = find_or_create_user($id['unionid'] ?: $id['openid'], $id);
    $_SESSION['uid'] = $user['id'];
    header('Location: /me');                     // 把 ticket 从地址栏清掉
    exit;
}
不要用 GET 参数里的 openid 建会话。票据是一次性、60 秒、绑定站点的, 偷到别人的 ticket 也换不到身份(需要你的接入密钥签名)。这是这套链路的核心防线。

第 3 步:验证链路

  1. 命令行先验签名:把 诊断台 里生成的 curl 拷到服务器上跑,返回 ok:true 说明密钥与时钟都对。
  2. 微信里打开你站点的页面,点授权按钮,走完回到 /me 并且站点日志里有一条 exchange 成功。
  3. 在后台「接口日志」按 in 方向筛选你的站点,能看到这两次调用。

接下来

本页内容随代码一起版本化(V0.1.0)。发现文档与实际行为不一致,请当缺陷报告。