Authing 文档文档
快速开始
概念
使用指南
开发集成 V2 arrow
  • V2 文档
  • V3 文档
元数据
应用集成
身份自动化
加入 APN
开发集成
多租户(内测版)
控制台文档
多租户控制台
租户控制台
Saas 应用 Demo
快速开始
概念
使用指南
开发集成 V2 arrow
  • V2 文档
  • V3 文档
元数据
应用集成
身份自动化
加入 APN
开发集成
多租户(内测版)
控制台文档
多租户控制台
租户控制台
Saas 应用 Demo
旧版
开发集成
  • JavaScript SDK 索引
  • 单点登录(SSO)
  • 登录组件 (Guard)

  • 多因素认证组件(MFA)

  • JavaScript / Node.js

  • Java / Kotlin

  • Python

  • C#

  • PHP

  • Go

  • Ruby
  • Delphi
  • Android

  • iOS

    • 快速开始
    • 托管页
    • 超组件

    • APIs

    • 第三方身份源

      • 微信登录
      • 苹果帐号登录
      • 手机号一键登录
      • Google 帐号登录
      • Facebook 登录
      • APP 拉起微信小程序登录
      • QQ 登录
      • 微博登录
      • 百度登录
      • 领英登录
      • Github 登录
      • Gitee 登录
      • GitLab 登录
      • 抖音登录
      • 快手登录
      • 小米登录
      • 企业微信登录
      • 飞书登录
      • 钉钉登录
      • Line 登录
      • Slack 登录
      • 亚马逊登录
    • 典型场景

    • 私有化部署
    • 生物认证
    • iOS Guard 更新日志
    • 返回码对照表
  • Flutter

  • 微信小程序
  • 微信网页授权
  • React Native
  • 框架集成

  • Radius
  • 错误代码

¶ 微信登录

更新时间: 2025-05-14 08:32:28
编辑

¶ 准备工作

在 微信开放平台 (opens new window) 及 Authing 管理控制台 (opens new window) 进行配置请参阅 微信移动端 (opens new window)。


¶ 集成微信登录

¶ 第一步:添加微信登录依赖

  1. 在 swift package 搜索栏输入:https://github.com/Authing/authing-binary 。

  2. 选择 Authing-binary (opens new window)。

Authing-binary (opens new window) 依赖于 Guard-iOS SDK (opens new window)。

  1. 依赖规则选择 Up to Next Major Version 1.0.0 。

  2. Add Package 后勾选 Wechat 。


¶ 第二步:Info.plist 里面添加启动白名单

key: LSApplicationQueriesSchemes

value: weixin, weixinULAPI

注意大小写

也可以通过 Source Code 方式打开 Info.plist,然后复制粘贴下面代码:

<plist version="1.0">
<dict>
    ...
    <key>LSApplicationQueriesSchemes</key>
	<array>
		<string>weixin</string>
		<string>weixinULAPI</string>
	</array>
    ...
</dict>
</plist>

¶ 第三步:设置 Associated Domains:

填入开发者的 Universal Link 对应的 host 。


¶ 第四步:初始化微信登录

import Guard
import Wechat
Authing.start(<#AUTHING_APP_ID#>)
WechatLogin.registerApp(appId: <#your_wechat_appid#>, universalLink: <#your_deep_link#>)

第一个参数为微信应用 ID;第二个参数为 iOS Universal Link (opens new window)


¶ 第五步:处理微信登录回调

微信返回应用后,如果使用了 SceneDelegate,则需要在 SceneDelegate.swift 里面重载下面的函数:

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "wechatLoginOK"), object: userActivity)
}

如果未使用 SceneDelegate,则需要在 AppDelegate 里面重载:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "wechatLoginOK"), object: userActivity)
    return true
}

¶ 第六步:发起微信登录授权

¶ 微信授权登录

func login(viewController: UIViewController, _ context: String? = nil, completion: @escaping Authing.AuthCompletion) -> Void

参数

  • viewController 承载视图的 AuthViewController
  • context 可选参数,请求上下文,这里设置的 context 可以在 pipeline 的 context 中获取到。

示例

WechatLogin.login(viewController: <#ViewController#>) { code, message, userInfo in
    if (code == 200) {
        // 登录成功
        // userInfo
    } else if (code == 1640) {
        // 只允许绑定已有账号
        // userInfo.socialBindingData 中返回 method(登录方式) 以及 key(中间态键)
    } else if (code == 1641) {
        // 允许绑定已有账号,或者创建新账号
        // userInfo.socialBindingData 中返回 method(登录方式) 以及 key(中间态键)
    } else if (code == 2921) {
        // 多账号选择后绑定
        // userInfo.socialBindingData 中返回 accounts(账号列表) 以及 key(中间态键)
    }
}

如果只需获取微信的授权码:

WechatLogin.getAuthCode(viewController: <#ViewController#>) { authCode in
    // authCode:微信授权码
}

如果开发者自己集成微信登录,拿到授权码后,可以调用以下 API 换取 Authing 用户信息:

¶ 通过微信授权码登录

func getDataByWechatlogin(authData: AuthRequest? = nil, code: String, _ context: String? = nil, completion: @escaping(Int, String?, UserInfo?) -> Void)

参数

  • code 微信授权码
  • context 请求上下文,这里设置的 context 可以在 pipeline 的 context 中获取到。

示例

AuthClient().getDataByWechatlogin(code: "Wechat auth code") { code, message, userInfo in
    if (code == 200) {
        // 登录成功
        // userInfo
    } else if (code == 1640) {
        // 只允许绑定已有账号
        // userInfo.socialBindingData 中返回 method(登录方式) 以及 key(中间态键)
    } else if (code == 1641) {
        // 允许绑定已有账号,或者创建新账号
        // userInfo.socialBindingData 中返回 method(登录方式) 以及 key(中间态键)
    } else if (code == 2921) {
        // 多账号选择后绑定
        // userInfo.socialBindingData 中返回 accounts(账号列表) 以及 key(中间态键)
    }
}

¶ 询问绑定 API

如果你想在微信账号登录的时候绑定实现询问是否绑定已有账号,可以在 Authing Console 控制台 (opens new window)中开启询问绑定功能,

身份源管理 -> 社会化身份源 -> 微信 -> 微信移动端 -> 账号绑定:

如果使用我们的 AuthFlow 托管页,开启了账号绑定后,托管页中处理了相关业务流程。

如果已经选择了登录模式,并且开启了账号绑定功能,通过如下 API 构建后续业务流程:

¶ 注册新账号绑定微信

如果登录模式选择了可用于登录注册,并且开启了账号绑定,在调用微信登录接口时会返回 1641 状态码以及 key,这个时候可以调用此接口直接创建账号。

func bindWechatWithRegister(key: String, completion: @escaping(Int, String?, UserInfo?) -> Void)

参数

  • key 中间态键,通过微信授权登录返回

示例

AuthClient().bindWechatWithRegister(key: "key") { code, message, userInfo in
}

¶ 通过账号密码绑定微信

如果开启了账号绑定,在调用微信登录接口时会返回 1640 状态码、支持的绑定方式以及 key,如果支持的绑定方式包含username-password、phone-password、email-password,这个时候可以调用此接口绑定已有账号。

func bindWechatByAccount(account: String, password: String, key: String, completion: @escaping(Int, String?, UserInfo?) -> Void)

参数

  • account 账号
  • password 密码
  • key 中间态键,通过微信授权登录返回

示例

AuthClient().bindWechatByAccount(account: "account", password: "password", key: "key") { code, message, userInfo in
}

¶ 通过手机验证码绑定微信

如果开启了账号绑定,在调用微信登录接口时会返回 1640 状态码、支持的绑定方式以及 key,如果支持的绑定方式包含phone-code,这个时候可以调用此接口绑定已有账号。

func bindWechatByPhoneCode(phoneCountryCode: String? = nil, phone: String, code: String, key: String, completion: @escaping(Int, String?, UserInfo?) -> Void)

参数

  • phone 手机号
  • code 验证码
  • key 中间态键,通过微信授权登录返回

示例

AuthClient().bindWechatByPhoneCode(phone: "188xxxx8888", code: "1234", key: "key") { code, message, userInfo in
}

¶ 通过邮箱验证码绑定微信

如果开启了账号绑定,在调用微信登录接口时会返回 1640 状态码、支持的绑定方式以及 key,如果支持的绑定方式包含email-code,这个时候可以调用此接口绑定已有账号。

func bindWechatByEmailCode(email: String, code: String, key: String, completion: @escaping(Int, String?, UserInfo?) -> Void)

参数

  • email 邮箱
  • code 验证码
  • key 中间态键,通过微信授权登录返回

示例

AuthClient().bindWechatByEmailCode(email: "test@example.com", code: "1234", key: "key") { code, message, userInfo in
}

¶ 通过 accounts 列表的账号 ID 绑定微信

如果开启了账号绑定,在调用微信登录接口时会返回 2921 状态码、支持的绑定的账号数据以及 key。

注意此 API 只能绑定 getDataByWechatlogin 返回的 accounts 中的账号,只针对同一微信身份源对应了多个 Authing 账号的场景。如果想直接调用绑定 API 无特殊场景处理,查看此 API :通过账号 ID 绑定微信。

func bindWechatBySelectedAccountId(accountId: String, key: String, completion: @escaping(Int, String?, UserInfo?) -> Void)

参数

  • accountId 账号 id
  • key 中间态键,通过微信授权登录返回

示例

AuthClient().bindWechatBySelectedAccountId(accountId: "AUTHING_ACCOUNT_ID", key: "key") { code, message, userInfo in
}

¶ 通过账号 ID 绑定微信

如果开启了账号绑定,调用此接口可绑定用户池中已有账号。

func bindWechatByAccountId(accountId: String, key: String, completion: @escaping(Int, String?, UserInfo?) -> Void)

参数

  • accountId 账号 id
  • key 中间态键,通过微信授权登录返回

示例

AuthClient().bindWechatByAccountId(accountId: "AUTHING_ACCOUNT_ID", key: "key") { code, message, userInfo in
}

上一篇: 第三方身份源 下一篇: 苹果帐号登录
  • 准备工作
  • 集成微信登录
  • 询问绑定 API

用户身份管理

集成第三方登录
手机号闪验 (opens new window)
通用登录表单组件
自定义认证流程

企业内部管理

单点登录
多因素认证
权限管理

开发者

开发文档
框架集成
博客 (opens new window)
GitHub (opens new window)
社区用户中心 (opens new window)

公司

400 888 2106
sales@authing.cn
北京市朝阳区北辰世纪中心 B 座 16 层(总)
成都市高新区天府五街 200 号 1 号楼 B 区 4 楼 406 室(分)

京ICP备19051205号

beian京公网安备 11010802035968号

© 北京蒸汽记忆科技有限公司