# 抖音小程序API
以下API需要vk-unicloud核心库版本 >= 2.14.1
# 配置文件
打开 uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json
文件,配置里面的
"mp-toutiao" 抖音小程序(注意,抖音的是mp-toutiao,而不是mp-douyin)
"mp-toutiao": {
"oauth": {
"toutiao": {
"appid": "",
"appsecret": ""
}
}
},
2
3
4
5
6
7
8
传送门 - 抖音官方文档 (opens new window)
配置完需要上传 uni-config-center
这个公共模块才会生效
# 授权相关API
# 获取token
vk.openapi.douyin.auth.getAccessToken
/**
* 获取小程序全局唯一后台接口调用凭据(access_token)。调用绝大多数后台接口时都需使用 access_token,接口会自动缓存token,无需再手动保存token
* @param {Boolean} cache 默认true 如果为false,代表不从缓存中读取token,一般不传此参数
*/
let access_token = await vk.openapi.douyin.auth.getAccessToken();
2
3
4
5
# code换取openid
vk.openapi.douyin.auth.code2Session
/**
* 登录凭证校验。通过 douyin.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程。
* @param {String} code 登录时获取的 code
* @param {String} needKey 是否需要返回 sessionKey 或 accessToken 默认 false
*/
let code2SessionRes = await vk.openapi.douyin.auth.code2Session({
code: code,
needKey: false
});
2
3
4
5
6
7
8
9
# 获取小程序码
vk.openapi.douyin.acode.getMiniCode
/**
* 获取小程序码
* @param {String} access_token 默认自动获取,不需要传
* @param {String} path 必须是已经发布的小程序存在的页面(否则报错),例如 pages/index/index, 根路径前不要填加 / 可以携带参数 如 pages/index/index?a=1
*/
let getMiniCodeRes = await vk.openapi.douyin.acode.getMiniCode({
path: "pages/index/index?a=1&b=2",
});
2
3
4
5
6
7
8
9
注意:getMiniCode在执行成功后返回的是二进制,故在云函数中需要转换,完整代码如下
let getMiniCodeRes = await vk.openapi.douyin.acode.getMiniCode({
page: "pages/index/index",
});
if (typeof getMiniCodeRes === "object" && getMiniCodeRes.code) {
return getMiniCodeRes;
}
try {
// 二进制转base64
let base64 = Buffer.from(getMiniCodeRes, 'binary').toString('base64');
return {
code: 0,
base64: `data:image/png;base64,${base64}`
};
} catch (err) {
// 转base64失败
return {
code: -1,
msg: "生成小程序码失败",
err: {
message: err.message,
stack: err.stack
}
};
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 内容安全
# 检测文本是否违规
vk.openapi.douyin.security.msgSecCheck
/**
* 检查一段文本是否含有违法违规内容。
* @param {String} access_token 默认自动获取,不需要传
* @param {String} content 要检测的文本内容(与tasks二选一)
* @param {Array} tasks 要检测的文本内容数组(与content二选一)
*/
let msgSecCheckRes = await vk.openapi.douyin.security.msgSecCheck({
content: '', // 文本内容
});
// 多行文本分开检测
let msgSecCheckRes = await vk.openapi.douyin.security.msgSecCheck({
tasks: [
{
content: "第一段文本"
},
{
content: "第二段文本"
},
{
content: "第三段文本"
}
]
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 检测图片是否违规
vk.openapi.douyin.security.imgSecCheck
/**
* 校验一张图片是否含有违法违规内容。
* @param {String} access_token 默认自动获取,不需要传
* @param {String} image 要检测的图片url地址(与base64二选一)
* @param {String} base64 要检测的图片文件base64(与image二选一)
*/
let imgSecCheckRes = await vk.openapi.douyin.security.imgSecCheck({
base64: base64,
});
2
3
4
5
6
7
8
9
# 发送消息
# 发送订阅消息
vk.openapi.douyin.subscribeMessage.send
云端发送
/**
* 发送订阅消息
* @param {String} access_token 默认自动获取,不需要传
* @param {String} touser 接收者(用户)的 openid
* @param {String} template_id 所需下发的订阅模板id
* @param {String} page 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
* @param {Object} data 模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }
*/
let sendRes = await vk.openapi.douyin.subscribeMessage.send({
touser : "9D26812AF23D9B2743235C4E3F3353E8", // 接收者(用户)的 openid
template_id : "789697983d789c9257b7745470442be4", // 所需下发的订阅模板id
page : "pages/index/index", // 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
data : {
"物品名称": "测试值0",
"购买金额": "测试值1"
}
});
console.log('sendRes: ', sendRes);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
如果发送失败,可以在云函数内打印下 sendRes
的值,并根据返回的 code
进行判断错在哪里。传送门 - 抖音官方文档 (opens new window)
前端订阅
发送订阅消息需要用户先在小程序前端点击订阅,且订阅是一次性的,发第二次消息需要再次订阅。
uni.requestSubscribeMessage({
tmplIds:["271167b4691a07becf2ac115a896ebd6"], // 模板id
success(res) {
console.log("----subscribeAppMsg----success", res);
},
fail(res) {
console.log("----subscribeAppMsg----fail", res);
}
});
2
3
4
5
6
7
8
9
# 抖音小程序万能API调用接口
如果以上API不能满足你的需求,你可以使用这个万能API
let requestRes = await vk.openapi.douyin.request({
method: "POST",
url: "接口路径",
data: {
}
});
2
3
4
5
6
7
请求参数
参数 | 说明 | 类型 | 默认值 | 可选值 |
---|---|---|---|---|
method | 请求模式,分为GET和POST(不区分大小写) | String | POST | GET |
url | 接口路径 | String | - | - |
data | 请求数据 | Object | - | - |
url参数详解
以 获取小程序 URL Link
为例
请求地址
POST
https://developer.toutiao.com/api/apps/url_link/generate
method
为 POST
url
为 api/apps/url_link/generate
最终代码
let requestRes = await vk.openapi.douyin.request({
method: "POST",
url: "api/apps/url_link/generate",
data: {
access_token: true, // 传true代表自动获取access_token
ma_app_id: "tt35f7434aaac849b101",
app_name: "douyin",
path: "pages/index/index",
query: JSON.stringify({
a: 1,
b: "2"
}),
expire_time: parseInt((Date.now() + 1000 * 3600) / 1000), // 1小时过期
}
});
console.log('requestRes: ', requestRes);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
公共返回参数
参数 | 说明 | 类型 |
---|---|---|
code | 0代表成功,其他均为失败 | Number |
msg | 失败时的提示内容 | String |
其他返回参数参考抖音小程序服务端API文档 传送门 - 抖音官方文档 (opens new window)
# 多小程序调用
以上所有API均支持多加2个参数
参数 | 说明 | 类型 |
---|---|---|
appid | 可不填,不填会自动从uni-id配置的mp-douyin节点里获取appid | String |
appsecret | 可不填,不填会自动从uni-id配置的mp-douyin节点里获取appsecret | String |
- 如果
appid
和appsecret
均不填,则自动从uni-id配置的mp-douyin节点里获取appid - 如果填了
appid
不填appsecret
,则appsecret
会自动从uni-config-center/vk-unicloud/index.js 的抖音小程序配置(vk.oauth.douyin.list)
里找对应的值