---
order: 7
---
# 微信登录

为了方便用户在微信上访问SuccBI的页面时，直接使用微信账号的身份来进行访问，跳过繁杂的登录步骤，SuccBI提供了绑定[微信公众号服务号](https://kf.qq.com/faq/120911VrYVrA150918fMZ77R.html?scene_id=kf3386)的方式来提供单点登录服务。需要注意的是：微信公众号需要为`服务号`，[关于微信公众号服务号和订阅号的说明](https://kf.qq.com/faq/170815aUZjeQ170815mU7bI7.html)。

\[\[toc]]

:::warning 重要说明
一个公众号请务必保证仅在一个系统中使用。

原因：[获取access\_token调用频率有上限](https://developers.weixin.qq.com/doc/offiaccount/Message_Management/API_Call_Limits.html)，并且重复调用access\_token获取接口将上次获取的access\_token失效，可能会因为多个环境中频繁使用微信相关功能，导致access\_token获取受限制，微信功能当天也就不能使用了。

:::

## 微信公众号的配置{#oa-settings}

1. 完成微信认证： **设置**>**微信认证**，否则公众号没有权限去获取微信的用户信息。
   ![认证](./images/wxoa-settings-auth.png)
2. 修改微信公众号网页授权信获取用户基本行为当前部署系统的域名地址：**设置**>**公众号设置**>**功能设置**>**网页授权域名**。
   ![授权](./images/wxoa-settings-domain.png)\
   考虑到微信中其他功能的使用，建议也将js接口安全域名也配置上：**设置**>**公众号设置**>**功能设置**>**js接口安全域名**。
3. 获取公众号开发者信息，并将部署系统的服务器对外IP地址配置到IP白名单中：**设置**>**开发**>**基本配置**\
   `AppID` 和 `AppSecret`要被配置到[系统设置](#sys-settings)
   ![信息](./images/wxoa-dev-info.png)

## 系统设置{#oa-syssettings}

需要在**系统设置**>**安全**>**单点登录**中添加一个微信单点登录方式，基础单点登录设置请参考：[单点登录方案设置](../../sys-settings/security/sso.md#common-settings)，公众号特征设置说明：
![系统设置](./images/syssettings-sso-wechat-oa.png)

1. `应用类型`： 选择`公众号服务号`。
2. `appId`：见[微信公众号配置](#oa-settings)获取公众号开发者中的`AppId`。
3. `appSecret`：见[微信公众号配置](#oa-settings)获取公众号开发者中的`AppSecret`。
4. `启用扫码登录`： 若是要在登录界面展示使用微信扫码登录电脑端的二维码，请勾选上。

### 用户匹配规则设置{#oa-syssettings-match}

![用户匹配设置](./images/syssettings-sso-wechat-match.png)

1. 请在`用户匹配字段1`中填写`微信公众号用户唯一ID`(对应物理字段为`WECHAT_OPENID`)。
2. 这个微信公众号绑定了[微信开放平台](https://open.weixin.qq.com/)账号，并且希望通过这个开放平台绑定的小程序、公众号等方式登录本系统时共享同一个账号信息，请在对应的系统或者外部用户表模型中添加一个字段`微信开放平台唯一ID`（物理字段请命名为`WECHAT_UNIONID`），并将这个字段设置为`匹配用户依据1`。如果是之前使用了`微信公众号用户唯一ID`字段作为`匹配用户依据1`，现在选择绑定微信开放平台的时候，请将`微信公众号用户唯一ID`作为`匹配用户依据2`。

::: tip
若是有需求让一个系统用户绑定到多个微信公众号的账号中，并且期望通过不同的微信公众号进入项目的时候使用同一账号：

- 建议注册一个[微信开放平台](https://open.weixin.qq.com/)用于将多个微信公众号绑定到一起，具体详见[微信Unionid机制](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html)，并且在对应的系统或者外部用户表模型中添加一个字段`微信开放平台唯一ID`（物理字段请命名为`WECHAT_UNIONID`），并将这个字段设置为`匹配用户依据1`。

- 若是不选择注册微信开放平台账号，建议在系统用户表或者外部用户表中这对模型分别为各种单点登录方式都添加一个字段，物理字段分别命名为`ssoid + "_OPENID"`（比如ssoid是"wx1"，物理字段命名为`WX1_OPENID`）作为`匹配用户依据1`，建议也添加上`ssoid + "_NICKNAME"`（同前）用于存储从第三方系统获取到的用户昵称，便于区分从使用的是哪个微信账号。
  :::

## 扫码登录PC{#oa-qrcode}

当完成[系统设置](#oa-syssettings)，并且设置了启用扫码登录当有单点登录方式支持使用扫码登录的时候，默认的登录界面将会展示二维码供用户使用app来进行扫码。具体说明请参考：[扫码登录](../../dev/integrate/qrcode.md#)。

扫码效果展示如下：

- 使用微信扫码二维码会展示如下界面:

<!-- 大小给 250的宽度，不会糊 -->

   <div align="center" style="padding-top: 10px"><img width="250" src="./images/qrcode-auth-wechat.png"/></div>

这个界面是微信内置的授权界面，若是微信用户选择了授权SuccBI使用微信身份登录，将会跳转到授权PC登录的提示界面。

- 授权PC登录的提示界面：

   <div align="center" style="padding-top: 10px"><img width="250" src="./images/qrcode-auth.png"/></div>

  个性化授权提示页面存放的元数据地址为：`/sysdata/public/sso/auth-{ssoid}.html`，其中为小程序单点登录配置的`登录方案ID`，比如说ID为`wx`，个性化页面的html命名为`auth-wx.html`。确认登录按钮所触发的事件请调用[API接口confirmQRCodeLogin](../../dev/references/web-api/auth/confirmQRCodeLogin.md)。

- 完成授权后，对于微信登录将会尝试关闭页面，如果没办法关闭页面会跳转到授权登录成功提示页面：

   <div align="center" style="padding-top: 10px"><img width="250" src="./images/qrcode-auth-success.png"/></div>

  个性化授权成功提示页面存放的元数据地址为：`/sysdata/public/sso/auth-success.html`。

- 如果使用支付宝等其他app来扫码二维码，会展示提示界面

   <div align="center" style="padding-top: 10px"><img width="250" src="./images/qrcode-auth-tips.png"/></div>

  个性化授权提示页面存放的元数据地址为：`/sysdata/public/sso/auth-tips.html`。

- 如果扫码的时候二维码已经过期了，会展示提示界面：

    <div align="center" style="padding-top: 10px"><img width="250" src="./images/qrcode-expired.png"/></div>

  个性化提示界面存放的元数据地址为：`/sysdata/public/sso/auth-expired.html`

## 微信打开链接中获取微信登录用户身份认证登录{#oa-mobile-auth}

开发中...
