{"id":13487241,"url":"https://github.com/Authing/authing-wxapp-sdk","last_synced_at":"2025-03-27T21:32:10.970Z","repository":{"id":42524151,"uuid":"136260758","full_name":"Authing/authing-wxapp-sdk","owner":"Authing","description":"Authing SDK for wechat mini program（wxapp）","archived":true,"fork":false,"pushed_at":"2023-02-26T10:01:44.000Z","size":524,"stargazers_count":48,"open_issues_count":0,"forks_count":13,"subscribers_count":16,"default_branch":"master","last_synced_at":"2024-10-30T22:39:58.106Z","etag":null,"topics":["authing","identity-management","mini-programs","wechat-mini-program","wechat-weapp","wxapp"],"latest_commit_sha":null,"homepage":"https://docs.authing.cn/v3/reference/sdk/miniapp/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Authing.png","metadata":{"files":{"readme":"README-zh_CN.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-06-06T02:31:29.000Z","updated_at":"2024-08-19T16:33:14.000Z","dependencies_parsed_at":"2024-01-07T00:08:31.935Z","dependency_job_id":null,"html_url":"https://github.com/Authing/authing-wxapp-sdk","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Authing%2Fauthing-wxapp-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Authing%2Fauthing-wxapp-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Authing%2Fauthing-wxapp-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Authing%2Fauthing-wxapp-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Authing","download_url":"https://codeload.github.com/Authing/authing-wxapp-sdk/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245927372,"owners_count":20695224,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["authing","identity-management","mini-programs","wechat-mini-program","wechat-weapp","wxapp"],"created_at":"2024-07-31T18:00:56.978Z","updated_at":"2025-03-27T21:32:10.591Z","avatar_url":"https://github.com/Authing.png","language":"JavaScript","funding_links":[],"categories":["工具","UI模板"],"sub_categories":["3、小程序模板"],"readme":"# 此仓库不再维护, 请移步 [authing-js-sdk](https://github.com/authing/authing-js-sdk)\n\n\u003cdiv align=center\u003e\n  \u003cimg width=\"250\" src=\"https://files.authing.co/authing-console/authing-logo-new-20210924.svg\" /\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://badge.fury.io/js/authing-wxapp-sdk\"\u003e\u003cimg src=\"https://badge.fury.io/js/authing-wxapp-sdk.svg\" alt=\"npm version\" height=\"18\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://npmcharts.com/compare/authing-wxapp-sdk\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/authing-wxapp-sdk\" alt=\"download\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://standardjs.com\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/code_style-standard-brightgreen.svg\" alt=\"standardjs\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/authing-wxapp-sdk\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/l/vue.svg\" alt=\"License\"\u003e\u003c/a\u003e\n  \u003ca href=\"javascript:;\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/node-%3E=12-green.svg\" alt=\"Node\"\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n\u003cbr /\u003e\n\n简体中文 | [English](./README.md)\n\nAuthing 小程序 SDK （`authing-wxapp-sdk`） 适用于在微信小程序环境下使用，以 [authing-js-sdk](https://github.com/authing/authing.js) 为基础，对微信小程序环境做了适配。你可以使用 `authing-js-sdk` [AuthenticationClient](https://docs.authing.cn/v2/reference/sdk-for-node/authentication/AuthenticationClient.html) 中的所有方法，如获取、修改用户资料，添加用户自定义字段等。同时专门在小程序环境下使用的 **通过微信授权获取用户手机号**、 **使用微信授权登录**、**使用微信授权的手机号登录** 等方法。\n\n## 在 Authing 中配置小程序登录\n\n为了在小程序中使用 Authing 小程序 SDK，你需要先在[微信开放平台](https://mp.weixin.qq.com/)申请一个小程序，同时在 [Authing 控制台](https://console.authing.cn/console/userpool)内填入该小程序的配置。\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e配置小程序登录\u003c/strong\u003e\u003c/summary\u003e\n\n1. 前先前往[微信开放平台](https://mp.weixin.qq.com/)注册一个微信小程序开发账号\n\n- **如果你需要获取用户手机号，需要通过微信认证。**\n- 将 `core.authing.cn` 加入微信的 **request 合法域名**:\n\n![](https://cdn.authing.cn/blog/20201112142753.png)\n\n2. 在 [Authing 控制台](https://console.authing.cn/console/userpool)开启微信小程序社会化登录。\n\n- 获取微信小程序 AppId 和 AppSecret\n\n![](https://cdn.authing.cn/blog/20201112143117.png)\n\n- 前往 [Authing 控制台](https://console.authing.cn/console/userpool) **连接身份源** - **社会化登录** - **小程序内登录**:\n\n![](https://cdn.authing.cn/blog/20201112143302.png)\n\n- 填入小程序 AppId 和 AppSecret，点击保存即可。\n\n![](https://cdn.authing.cn/blog/20201112143351.png)\n\n\u003c/details\u003e\n\n## 安装\n\n从小程序基础库版本 2.2.1 或以上、及开发者工具 1.02.1808300 或以上开始，小程序支持使用 npm 安装第三方包，详情请见: [npm 支持 | 微信开放文档](https://developers.weixin.qq.com/miniprogram/dev/devtools/npm.html) 。\n\n### 安装 npm 包\n\n使用 npm:\n\n```\nnpm install authing-wxapp-sdk\n```\n\n使用 yarn:\n\n```\nyarn add authing-wxapp-sdk\n```\n\n### 在小程序开发者工具中构建 npm\n\n点击开发者工具中的菜单栏：工具 --\u003e 构建 npm:\n\n\u003cimg src=\"https://cdn.authing.cn/blog/20201112141931.png\" height=\"400px\"\u003e\u003c/img\u003e\n\n勾选 **使用 npm 模块** 选项：\n\n![](https://cdn.authing.cn/blog/20201112142118.png)\n\n## 初始化\n\n`AuthenticationClient` 初始化需要传入`AppId` （应用 ID）：\n\n\u003e 你可以在控制台的 **应用** 中查看自己的应用列表。\n\n```js\nconst { AuthenticationClient } = require(\"authing-wxapp-sdk\");\n\nconst authing = new AuthenticationClient({\n  appId: \"YOUR_APP_ID\",\n});\n```\n\n完整参数列表如下:\n\n- `appId`: Authing 应用 ID（必填）；\n- `accessToken`: 通过用户的 token 初始化 SDK（可选，你可以在前端 localStorage 中缓存用户 token，实现记住登录的目的） 。\n- `timeout`: 请求超时时间，单位为毫秒，默认为 10000 （10 秒）。\n- `onError`: 错误处理函数，你可以用其来全局捕捉 Authing 客户端请求的所有异常。函数定义为：\n\n```js\n(code: number, message: string, data: any) =\u003e void\n```\n\n\u003e 完整的错误代码请见[此文档](https://docs.authing.cn/v2/reference/error-code.html)。\n\n- `host`: Authing 服务器地址。如果你使用的是公有云版本，请忽略请参数。如果你使用的是私有化部署的版本，此参数必填。格式如下: `https://authing-api.mydomain.com`，最后不带 `/`。\n\n## 使用方法\n\n在用户完成登录之后，SDK 会将用户的 `token` 写入到微信的 Storage 中，后续请求会自动携带 `token` 访问。\n\n![](https://cdn.authing.cn/blog/20201112165637.png)\n\n```js\nconst { code } = await wx.login();\n// 无需用户授权\nconst user = await authing.loginByCode(code); // 成功登录，将 token 写入微信 Storage\n\n// 登录之后可以进行此操作\nawait authing.updateProfile((nickname: \"Bob\"));\n```\n\n后续用户再次打开小程序，如果小程序的 Storage 中保存有用户的 token，访问 authing 的请求将会自动带上该 token。\n\n```javascript\n// 该请求可以成功，因为该用户出于登录状态。\nawait authing.updateProfile((nickname: \"Mick\"));\n```\n\n## API Reference\n\n\u003e 你可以使用 `authing-js-sdk` [AuthenticationClient](https://docs.authing.cn/v2/reference/sdk-for-node/) 中的所有方法，调用方法和 `authing-js-sdk` 完全一致。\n\n### loginByCode\n\n\u003e 使用微信授权的方式登录。\n\n- 如果用户第一次在小程序中登录，且用户没有使用和该小程序绑定同一主体的微信应用登录过，将会创建一个新账号。\n- 如果用户第一次在小程序中登录，但是该用户使用和该小程序绑定同一主体的微信应用登录过，将会返回对应的微信账号。\n\n#### 参数\n\n- `code`: 调用 [wx.login()](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html) 获取的 `code`，不需要用户授权。必填。\n- `options`: 选填。\n- `options.iv`: `open-type` 为 `getUserInfo` 的[微信 Button 组件](https://developers.weixin.qq.com/miniprogram/dev/component/button.html) 点击事件返回的 `iv`。`iv` 和 `encryptedData` 必须同时传递，Authing Server 会尝试从 `iv` 和 `encryptedData` 中加密出用户资料。第一次需要用户手动授权。选填。\n- `options.encryptedData`: `open-type` 为 `getUserInfo` 的[微信 Button 组件](https://developers.weixin.qq.com/miniprogram/dev/component/button.html) 点击事件返回的 `encryptedData`。`iv` 和 `encryptedData` 必须同时传递，Authing Server 会尝试从 `iv` 和 `encryptedData` 中加密出用户资料。第一次需要用户手动授权。选填。\n- `options.rawData`: `open-type` 为 `getUserInfo` 的[微信 Button 组件](https://developers.weixin.qq.com/miniprogram/dev/component/button.html) 点击事件返回的 `rawData`。和 `iv` + `encryptedData` 二选一，如果传了 `rawData`, Authing Server 会直接使用该数据作为用户的 profile。第一次需要用户手动授权。选填。\n\n#### 示例\n\n1. 静默授权\n\n首次注册的用户的 profile 中的 nickname, avatar 将为空，因为没有获取到用户的头像和昵称。\n\n```javascript\nconst { code } = await wx.login();\nconst data = await authing.loginByCode(code);\n```\n\n2. 用户手动授权获取昵称头像\n\n\u003e 仅第一次需要授权，用户授权之后可以使用 `wx.getUserInfo` 直接获取头像昵称。\n\n- 第一次请求用户手动授权\n\n```html\n\u003cbutton open-type=\"getUserInfo\" bindgetuserinfo=\"getUserInfo\"\u003e\n  获取头像昵称\n\u003c/button\u003e\n```\n\n```javascript\ngetUserInfo: async function (e) {\n  const { code } = await wx.login()\n  const { rawData } = e.detail\n  const user = await authing.loginByCode(code, { rawData })\n\n  // 或者传 iv encryptedData\n  // const { iv, encryptedData } = e.detail\n  // const user = await authing.loginByCode(code, { iv, encryptedData })\n\n  console.log(user)\n}\n```\n\n- 之后可以通过 `wx.getUserInfo` 自动获取\n\n```javascript\nconst { rawData } = await wx.getUserInfo();\nconst user = await authing.loginByCode(code, { rawData });\n// 或者传 iv encryptedData\n// const { iv, encryptedData } = e.detail\n// const user = await authing.loginByCode(code, { iv, encryptedData })\n```\n\n### loginByPhone\n\n\u003e 通过微信手机号授权的方式登录。每次调用都需要用户手动授权。\n\n- 如果该手机号第一次注册，该会把该手机号与该微信账号绑定（不存在会创建）。\n- 如果该手机号之前注册过，将会返回该手机号对应的账号，并且将该手机号与当前微信账号绑定。\n\n#### 参数\n\n- `code`: 调用 [wx.login()](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html) 获取的 `code`，不需要用户授权。必填。\n- `iv`: `open-type` 为 `getPhoneNumber` 的[微信 Button 组件](https://developers.weixin.qq.com/miniprogram/dev/component/button.html) 点击事件返回的 `iv`。必填.\n- `encryptedData`: `open-type` 为 `getPhoneNumber` 的[微信 Button 组件](https://developers.weixin.qq.com/miniprogram/dev/component/button.html) 点击事件返回的 `encryptedData`。必填.\n\n#### 示例\n\n```html\n\u003cbutton open-type=\"getPhoneNumber\" bindgetphonenumber=\"getPhone\"\u003e\n  获取手机号\n\u003c/button\u003e\n```\n\n```javascript\ngetPhone: async function(e) {\n  const { code } = await wx.login()\n  const { iv, encryptedData } = e.detail\n  const data = await authing.loginByPhone(code, iv, encryptedData)\n  console.log(data)\n}\n```\n\n### getPhone\n\n\u003e 获取当前用户的手机号（不会使用该手机号注册或绑定账号）\n\n#### 参数\n\n- `code`: 调用 [wx.login()](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html) 获取的 `code`，不需要用户授权。必填。\n- `iv`: `open-type` 为 `getPhoneNumber` 的[微信 Button 组件](https://developers.weixin.qq.com/miniprogram/dev/component/button.html) 点击事件返回的 `iv`。必填.\n- `encryptedData`: `open-type` 为 `getPhoneNumber` 的[微信 Button 组件](https://developers.weixin.qq.com/miniprogram/dev/component/button.html) 点击事件返回的 `encryptedData`。必填.\n\n#### 示例\n\n```html\n\u003cbutton open-type=\"getPhoneNumber\" bindgetphonenumber=\"getPhone\"\u003e\n  获取手机号\n\u003c/button\u003e\n```\n\n```javascript\ngetPhone: async function(e) {\n  const { code } = await wx.login()\n  const { iv, encryptedData } = e.detail\n  const data = await authing.getPhone(code, iv, encryptedData)\n  console.log(data)\n}\n```\n\n返回的数据示例：\n\n```json\n{\n  \"countryCode\": \"86\",\n  \"phoneNumber\": \"176xxxx6754\",\n  \"purePhoneNumber\": \"176xxxx6754\",\n  \"openid\": \"o1p9H4wAgb9uTqpxG5Z1g0pIr3FE\",\n  \"unionid\": \"o0pqE6Fbr5M-exSu_PeL_sjwN44U\"\n}\n```\n\n### updateAvatar\n\n\u003e 更新用户头像，该方法会自动调用 `wx.chooseImage` 获取图片并上传到 Authing 的 cdn，仅需一行代码调用。\n\n#### 示例\n\n```javascript\nconst { photo } = await authing.updateAvatar();\nconsole.log(photo);\n```\n\n## 最佳实践\n\n我们推荐用户第一次使用小程序的时候，使用 `loginByCode` 获取该小程序账号对应的 Authing 账号，如果该账号之前绑定了手机号，就无须再次请求用户授权手机号。如果该账号没有绑定手机号，再调用 `loginByPhone` 方法请求用户授权手机号。\n\n用户登录之后，`authing-wxapp-sdk` 会将 `token` 写入小程序的 `Storage`，你可以调用 `authing.checkLoginStatus()` 判断该用户的 token 是否有效，当 token 失效的时候再重新登录。\n\n## 错误处理\n\n你可以使用 `try catch` 进行错误处理:\n\n```js\ntry {\n  const user = await authing.loginByEmail(\"test@example.com\", \"passw0rd\");\n} catch (error) {\n  console.log(error.code); // 2004\n  console.log(error.message); // 用户不存在\n}\n```\n\n\u003e 完整的错误代码请见[此文档](https://docs.authing.cn/v2/reference/error-code.html)。\n\n你还可以指定 `onError` 统一捕捉所有 Authing 请求异常，如使用 `wx.showModal` 等微信组件显示错误提示。\n\n```js\nconst authing = new AuthenticationClient({\n  userPoolId,\n  onError: (code, message) =\u003e {\n    wx.showModal({\n      content: message,\n      showCancel: false,\n    });\n  },\n});\n```\n\n## 参与贡献\n- Fork 此仓库\n- 创建自己的 git 分支 (git checkout -b my-new-feature)\n- 提交你的修改 (git commit -am 'Add some feature')\n- 将修改内容推送到远程分支 (git push -u origin my-new-feature)\n- 创建一个 Pull Request\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAuthing%2Fauthing-wxapp-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAuthing%2Fauthing-wxapp-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAuthing%2Fauthing-wxapp-sdk/lists"}