578 lines
11 KiB
Markdown
578 lines
11 KiB
Markdown
|
# uni-open-bridge
|
|||
|
|
|||
|
`uni-open-bridge`
|
|||
|
|
|||
|
|
|||
|
## config.json
|
|||
|
|
|||
|
```json
|
|||
|
{
|
|||
|
"schedule": {
|
|||
|
"__UNI__xxxxxx": {
|
|||
|
"enable": true,
|
|||
|
"mp-weixin": {
|
|||
|
"enable": true,
|
|||
|
"tasks": ["accessToken"]
|
|||
|
},
|
|||
|
"h5-weixin": {
|
|||
|
"enable": false,
|
|||
|
"tasks": ["ticket"]
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
"ipWhitelist": ["0.0.0.0"]
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## http 调用
|
|||
|
|
|||
|
请求类型 `POST`, 需要配置IP白名单字段 `ipWhitelist`,参见 `config.json`
|
|||
|
|
|||
|
### getAccessToken
|
|||
|
|
|||
|
Url
|
|||
|
|
|||
|
```
|
|||
|
https://xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx.bspapp.com/uni-open-bridge/getAccessToken
|
|||
|
```
|
|||
|
|
|||
|
参数
|
|||
|
|
|||
|
```json
|
|||
|
{
|
|||
|
"dcloudAppid": "__UNI__xxx",
|
|||
|
"platform": "mp-weixin"
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### setAccessToken
|
|||
|
|
|||
|
Url
|
|||
|
|
|||
|
```
|
|||
|
https://xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx.bspapp.com/uni-open-bridge/setAccessToken
|
|||
|
```
|
|||
|
|
|||
|
```json
|
|||
|
{
|
|||
|
"dcloudAppid": "__UNI__xxx",
|
|||
|
"platform": "mp-weixin",
|
|||
|
"value": {
|
|||
|
"access_token": ""
|
|||
|
},
|
|||
|
"expiresIn": 7200
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### removeAccessToken
|
|||
|
|
|||
|
Url
|
|||
|
|
|||
|
```
|
|||
|
https://xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx.bspapp.com/uni-open-bridge/removeAccessToken
|
|||
|
```
|
|||
|
|
|||
|
参数
|
|||
|
|
|||
|
```json
|
|||
|
{
|
|||
|
"dcloudAppid": "__UNI__xxx",
|
|||
|
"platform": "mp-weixin"
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### getUserKey
|
|||
|
|
|||
|
Url
|
|||
|
|
|||
|
```
|
|||
|
https://xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx.bspapp.com/uni-open-bridge/getUserKey
|
|||
|
```
|
|||
|
|
|||
|
参数
|
|||
|
|
|||
|
```json
|
|||
|
{
|
|||
|
"dcloudAppid": "__UNI__xxx",
|
|||
|
"platform": "mp-weixin",
|
|||
|
"openid": ""
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### setUserKey
|
|||
|
|
|||
|
Url
|
|||
|
|
|||
|
```
|
|||
|
https://xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx.bspapp.com/uni-open-bridge/setUserKey
|
|||
|
```
|
|||
|
|
|||
|
参数
|
|||
|
|
|||
|
```json
|
|||
|
{
|
|||
|
"dcloudAppid": "__UNI__xxx",
|
|||
|
"platform": "mp-weixin",
|
|||
|
"openid": "",
|
|||
|
"value": {
|
|||
|
"session_key": ""
|
|||
|
},
|
|||
|
"expiresIn": 7200
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### removeUserKey
|
|||
|
|
|||
|
Url
|
|||
|
|
|||
|
```
|
|||
|
https://xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx.bspapp.com/uni-open-bridge/removeUserKey
|
|||
|
```
|
|||
|
|
|||
|
参数
|
|||
|
|
|||
|
```json
|
|||
|
{
|
|||
|
"dcloudAppid": "__UNI__xxx",
|
|||
|
"platform": "mp-weixin",
|
|||
|
"openid": ""
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### getTicket
|
|||
|
|
|||
|
Url
|
|||
|
|
|||
|
```
|
|||
|
https://xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx.bspapp.com/uni-open-bridge/getTicket
|
|||
|
```
|
|||
|
|
|||
|
参数
|
|||
|
|
|||
|
```json
|
|||
|
{
|
|||
|
"dcloudAppid": "__UNI__xxx",
|
|||
|
"platform": "mp-weixin"
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
### setTicket
|
|||
|
|
|||
|
Url
|
|||
|
|
|||
|
```
|
|||
|
https://xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx.bspapp.com/uni-open-bridge/setTicket
|
|||
|
```
|
|||
|
|
|||
|
参数
|
|||
|
|
|||
|
```json
|
|||
|
{
|
|||
|
"dcloudAppid": "__UNI__xxx",
|
|||
|
"platform": "mp-weixin",
|
|||
|
"value": {
|
|||
|
"ticket": ""
|
|||
|
},
|
|||
|
"expiresIn": 7200
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### removeTicket
|
|||
|
|
|||
|
Url
|
|||
|
|
|||
|
```
|
|||
|
https://xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx.bspapp.com/uni-open-bridge/removeTicket
|
|||
|
```
|
|||
|
|
|||
|
参数
|
|||
|
|
|||
|
```json
|
|||
|
{
|
|||
|
"dcloudAppid": "__UNI__xxx",
|
|||
|
"platform": "mp-weixin"
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# uni-open-bridge-common
|
|||
|
|
|||
|
`uni-open-bridge-common` 是 `uni-id` 体系中用于 `开放平台数据` 管理的公共模块。
|
|||
|
|
|||
|
> `云函数公共模块`是不同云函数共享代码的一种方式。如果你不了解什么是`云函数公共模块`,请另读文档[公共模块](https://uniapp.dcloud.io/uniCloud/cf-common)
|
|||
|
|
|||
|
`uni-open-bridge-common` 提供了 `access_token`、`session_key`、`encrypt_key`、`ticket` 的读取、写入、删除操作。
|
|||
|
|
|||
|
`uni-open-bridge-common` 支持多层 读取 / 写入 机制,`redis -> database -> fallback`,优先级如下:
|
|||
|
|
|||
|
如果用户没有开通 `redis` 或者操作失败,透传到 `database`,`database` 失败后,如果用户配置了 `fallback`,继续调用 `fallback` 方法,否则抛出 `Error`
|
|||
|
|
|||
|
`database` 对应的表为: `opendb-open-data`
|
|||
|
|
|||
|
|
|||
|
## access_token
|
|||
|
|
|||
|
`access_token` 是微信小程序全局唯一后台接口调用凭据,调用绝大多数后台接口时都需使用。开发者可以通过 getAccessToken 接口获取并进行妥善保存。[详情](https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/backend-api.html#access_token)
|
|||
|
|
|||
|
|
|||
|
### getAccessToken(key: Object)
|
|||
|
|
|||
|
读取 access_token
|
|||
|
|
|||
|
|
|||
|
### setAccessToken(key: Object, value: Object, expiresIn: Number)
|
|||
|
|
|||
|
写入 access_token
|
|||
|
|
|||
|
|
|||
|
### removeAccessToken(key: Object)
|
|||
|
|
|||
|
删除 access_token
|
|||
|
|
|||
|
|
|||
|
### key 属性
|
|||
|
|
|||
|
|参数 |类型 |必填 |描述 |
|
|||
|
|:-: |:-: |:-: |:-: |
|
|||
|
|dcloudAppid|String |是 |DCloud应用appid。[详情](https://ask.dcloud.net.cn/article/35907) |
|
|||
|
|platform |String |是 |[详情](#platform) |
|
|||
|
|fallback |Function |否 |[详情](#fallback) |
|
|||
|
|
|||
|
### value 属性
|
|||
|
|
|||
|
|参数 |类型 |描述 |
|
|||
|
|:-: |:-: |:-: |
|
|||
|
|access_token |String | |
|
|||
|
|
|||
|
### expiresIn
|
|||
|
|
|||
|
有效时间(秒)
|
|||
|
|
|||
|
|
|||
|
### 示例代码
|
|||
|
|
|||
|
```js
|
|||
|
'use strict';
|
|||
|
|
|||
|
const {
|
|||
|
getAccessToken,
|
|||
|
setAccessToken,
|
|||
|
removeAccessToken
|
|||
|
} = require('uni-open-bridge-common')
|
|||
|
|
|||
|
exports.main = async (event, context) => {
|
|||
|
const key = {
|
|||
|
dcloudAppid: '',
|
|||
|
platform: ''
|
|||
|
}
|
|||
|
const value = {
|
|||
|
access_token: ''
|
|||
|
}
|
|||
|
const expiresIn = 7200
|
|||
|
|
|||
|
// 写入 (redis / 数据库)
|
|||
|
await setAccessToken(key, value, expiresIn)
|
|||
|
|
|||
|
// 读取 (redis / 数据库)
|
|||
|
let result1 = await getAccessToken(key)
|
|||
|
|
|||
|
// 删除
|
|||
|
await removeAccessToken(key)
|
|||
|
|
|||
|
|
|||
|
// 删除后读取, 返回 null
|
|||
|
let result2 = await getAccessToken(key)
|
|||
|
console.log(result2) // null
|
|||
|
|
|||
|
return null
|
|||
|
};
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
## user_key
|
|||
|
|
|||
|
平台对应的值
|
|||
|
|
|||
|
|平台 |值 |描述 |
|
|||
|
|:-: |:-: |:-: |
|
|||
|
|微信小程序 |session_key|微信小程序会话密钥。[详情](https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html) |
|
|||
|
|
|||
|
|
|||
|
### getUserKey(key: Object)
|
|||
|
|
|||
|
读取 user_key
|
|||
|
|
|||
|
|
|||
|
### setUserKey(key: Object, value: Object, expiresIn: Number)
|
|||
|
|
|||
|
写入 user_key
|
|||
|
|
|||
|
|
|||
|
### removeUserKey(key: Object)
|
|||
|
|
|||
|
删除 user_key
|
|||
|
|
|||
|
|
|||
|
### key 属性
|
|||
|
|
|||
|
|参数 |类型 |必填 |描述 |
|
|||
|
|:-: |:-: |:-: |:-: |
|
|||
|
|dcloudAppid|String |是 |DCloud应用appid。[详情](https://ask.dcloud.net.cn/article/35907) |
|
|||
|
|platform |String |是 |[详情](#platform) |
|
|||
|
|openid |String |是 | |
|
|||
|
|fallback |Function |否 |[详情](#fallback) |
|
|||
|
|
|||
|
### value 属性
|
|||
|
|
|||
|
|参数 |类型 |描述 |
|
|||
|
|:-: |:-: |:-: |
|
|||
|
|session_key|String |微信小程序会话密钥 |
|
|||
|
|
|||
|
### expiresIn
|
|||
|
|
|||
|
有效时间(秒)
|
|||
|
|
|||
|
|
|||
|
### 示例代码
|
|||
|
|
|||
|
```js
|
|||
|
'use strict';
|
|||
|
|
|||
|
const {
|
|||
|
getUserKey,
|
|||
|
setUserKey,
|
|||
|
removeUserKey,
|
|||
|
} = require('uni-open-bridge-common')
|
|||
|
|
|||
|
exports.main = async (event, context) => {
|
|||
|
const key = {
|
|||
|
dcloudAppid: '',
|
|||
|
platform: '',
|
|||
|
openid: ''
|
|||
|
}
|
|||
|
const value = {
|
|||
|
'session_key': ''
|
|||
|
}
|
|||
|
const expiresIn = 7200
|
|||
|
|
|||
|
// 写入 (redis / 数据库)
|
|||
|
await setUserKey(key, value, expiresIn)
|
|||
|
|
|||
|
// 读取 (redis / 数据库)
|
|||
|
let result1 = await getUserKey(key)
|
|||
|
|
|||
|
// 删除
|
|||
|
await removeUserKey(key)
|
|||
|
|
|||
|
|
|||
|
// 删除后读取, 返回 null
|
|||
|
let result2 = await getUserKey(key)
|
|||
|
console.log(result2) // null
|
|||
|
|
|||
|
return null
|
|||
|
};
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
## encrypt_key
|
|||
|
|
|||
|
为了避免小程序与开发者后台通信时数据被截取和篡改,微信侧维护了一个用户维度的可靠key,用于小程序和后台通信时进行加密和签名。[详情](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/user-encryptkey.html)
|
|||
|
|
|||
|
开发者可以分别通过小程序前端和微信后台提供的接口,获取用户的加密 key。
|
|||
|
|
|||
|
|
|||
|
### getEncryptKey(key: Object)
|
|||
|
|
|||
|
读取 encrypt_key
|
|||
|
|
|||
|
|
|||
|
### setEncryptKey(key: Object, value: Object, expiresIn: Number)
|
|||
|
|
|||
|
写入 encrypt_key
|
|||
|
|
|||
|
|
|||
|
### removeEncryptKey(key: Object)
|
|||
|
|
|||
|
删除 encrypt_key
|
|||
|
|
|||
|
|
|||
|
### key 属性
|
|||
|
|
|||
|
|参数 |类型 |必填 |描述 |
|
|||
|
|:-: |:-: |:-: |:-: |
|
|||
|
|dcloudAppid|String |是 |DCloud应用appid。[详情](https://ask.dcloud.net.cn/article/35907) |
|
|||
|
|platform |String |是 |[详情](#platform) |
|
|||
|
|openid |String |是 | |
|
|||
|
|version |Number |是 |版本 |
|
|||
|
|fallback |Function |否 |[详情](#fallback) |
|
|||
|
|
|||
|
|
|||
|
### value 属性
|
|||
|
|
|||
|
|参数 |类型 |描述 |
|
|||
|
|:-: |:-: |:-: |
|
|||
|
|encrypt_key|String |加密 key |
|
|||
|
|iv |String |加密 iv |
|
|||
|
|
|||
|
### expiresIn
|
|||
|
|
|||
|
有效时间(秒)
|
|||
|
|
|||
|
|
|||
|
### 示例代码
|
|||
|
|
|||
|
```js
|
|||
|
'use strict';
|
|||
|
|
|||
|
const {
|
|||
|
getEncryptKey,
|
|||
|
setEncryptKey,
|
|||
|
removeEncryptKey
|
|||
|
} = require('uni-open-bridge-common')
|
|||
|
|
|||
|
exports.main = async (event, context) => {
|
|||
|
const key = {
|
|||
|
dcloudAppid: '',
|
|||
|
platform: '',
|
|||
|
openid: '',
|
|||
|
version: 1
|
|||
|
}
|
|||
|
const value = {
|
|||
|
encrypt_key: '',
|
|||
|
iv: ''
|
|||
|
}
|
|||
|
const expiresIn = 7200
|
|||
|
|
|||
|
// 写入 (redis / 数据库)
|
|||
|
await setEncryptKey(key, value, expiresIn)
|
|||
|
|
|||
|
// 读取 (redis / 数据库)
|
|||
|
let result1 = await getEncryptKey(key)
|
|||
|
|
|||
|
// 删除
|
|||
|
await removeEncryptKey(key)
|
|||
|
|
|||
|
// 删除后读取, 返回 null
|
|||
|
let result2 = await getEncryptKey(key)
|
|||
|
console.log(result2) // null
|
|||
|
|
|||
|
return null
|
|||
|
};
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
## ticket
|
|||
|
|
|||
|
`ticket` 是公众号用于调用微信 JS 接口的临时票据。[详情](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#62)
|
|||
|
|
|||
|
|
|||
|
### getTicket(key: Object)
|
|||
|
|
|||
|
读取 ticket
|
|||
|
|
|||
|
|
|||
|
### setTicket(key: Object, value: Object, expiresIn: Number)
|
|||
|
|
|||
|
写入 ticket
|
|||
|
|
|||
|
|
|||
|
### removeTicket(key: Object)
|
|||
|
|
|||
|
删除 ticket
|
|||
|
|
|||
|
|
|||
|
### key 属性
|
|||
|
|
|||
|
|参数 |类型 |必填 |描述 |
|
|||
|
|:-: |:-: |:-: |:-: |
|
|||
|
|dcloudAppid|String |是 |DCloud应用appid。[详情](https://ask.dcloud.net.cn/article/35907) |
|
|||
|
|platform |String |是 |[详情](#platform) |
|
|||
|
|fallback |Function |否 |[详情](#fallback) |
|
|||
|
|
|||
|
### value 属性
|
|||
|
|
|||
|
|参数 |类型 |描述 |
|
|||
|
|:-: |:-: |:-: |
|
|||
|
|ticket |String | |
|
|||
|
|
|||
|
### expiresIn
|
|||
|
|
|||
|
有效时间(秒)
|
|||
|
|
|||
|
|
|||
|
### 示例代码
|
|||
|
|
|||
|
```js
|
|||
|
'use strict';
|
|||
|
|
|||
|
const {
|
|||
|
getTicket,
|
|||
|
setTicket,
|
|||
|
removeTicket
|
|||
|
} = require('uni-open-bridge-common')
|
|||
|
|
|||
|
exports.main = async (event, context) => {
|
|||
|
const key = {
|
|||
|
dcloudAppid: '',
|
|||
|
platform: ''
|
|||
|
}
|
|||
|
const value = {
|
|||
|
ticket: ''
|
|||
|
}
|
|||
|
const expiresIn = 7200
|
|||
|
|
|||
|
// 写入 (redis / 数据库)
|
|||
|
await setTicket(key, value, expiresIn)
|
|||
|
|
|||
|
// 读取 (redis / 数据库)
|
|||
|
let result1 = await getTicket(key)
|
|||
|
|
|||
|
// 删除
|
|||
|
await removeTicket(key)
|
|||
|
|
|||
|
|
|||
|
// 删除后读取, 返回 null
|
|||
|
let result2 = await getTicket(key)
|
|||
|
console.log(result2) // null
|
|||
|
|
|||
|
return null
|
|||
|
};
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
## Platform@platform
|
|||
|
|
|||
|
平台对应的值
|
|||
|
|
|||
|
|值 |描述 |
|
|||
|
|:-: |:-: |
|
|||
|
|mp-weixin |微信小程序 |
|
|||
|
|app-weixin |微信 App |
|
|||
|
|h5-weixin |微信公众号 |
|
|||
|
|web-weixin |微信pc网页 |
|
|||
|
|mp-qq |QQ 小程序 |
|
|||
|
|app-qq |QQ App |
|
|||
|
|
|||
|
|
|||
|
## fallback@fallback
|
|||
|
|
|||
|
可选 `async function fallback()`,当 `reids -> database` 都找不到对应 `key` 时,调用此方法,需要返回数据格式如下
|
|||
|
|
|||
|
```json
|
|||
|
{
|
|||
|
value: null,
|
|||
|
duration: 1
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
|
|||
|
注意事项
|
|||
|
|
|||
|
- 所有方法类型为 `async`,需要使用 `await`
|
|||
|
- 所有方法校验 `key` 属性是否有效,无效则 `throw new Error()`,对 `value` 仅校验是否为 `undefined`
|