背景
公司需要获取线下团购及对应达人推广信息,并整合其他平台的相应情况,用来计划构建一个达人数据管理后台,这里直接进行速通测试,用来评估项目成本
准备
1、创建应用
先点击上面链接进入官方控制台,然后依次点击【生活服务商应用】-【创建生活服务商应用】,然后按照你们门店实际的信息进行一步步填写即可,最后申请绑定对应【抖音店铺账号】。

2、绑定抖音店铺
这时候通知对应抖音店铺账号使用者进行通过申请即可。


3、权限申请
然后我们依次点击我们创建好的【应用】-【解决方案】,然后选择类型以及权限,这里我们选【餐饮】-【到店餐饮团购解决方案】,然后点击【开通能力权限】,依次点击完成即可。


4、参数配置获取(秘钥等等)
再回到应用的首页,点击【基础信息】,即可获取APPID和AppSecret。

然后是商家ID,需要商家进入【抖音来客】后台,获取商家ID(accountId),链接如下:

实现
这里用的是node.js代码作为示例,其他语言的代码,开放平台也是对应示例代码,链接如下:

1、配置文件
config/index.js
javascript
const config = {
clientKey: 'aw************ob', // APPID
clientSecret: '39********************3935c', // AppSecret
accountId: '71****************39', // 商家ID
}
export default config
2、access_token获取
utils\client_token.js
javascript
import fetch from 'node-fetch';
import config from '../config/index.js';
import logger from './logger.js';
let accessToken = null;
let tokenExpireTime = 0;
export async function getAccessToken() {
const now = Date.now();
if (accessToken && now < tokenExpireTime) {
logger.debug('使用缓存的access_token');
return accessToken;
}
const response = await fetch('https://open.douyin.com/oauth/client_token/', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
client_key: config.clientKey,
client_secret: config.clientSecret,
grant_type: 'client_credential'
})
});
const json = await response.json();
logger.info('----------------access_token-----------------');
logger.info('获取access_token报文:', json);
logger.info('---------------------------------------------');
try {
const result = json;
if (result.data && result.data.access_token) {
accessToken = result.data.access_token;
tokenExpireTime = now + ((result.data.expires_in || 7200) - 60) * 1000;
logger.info(`获取access_token成功: ${accessToken}`);
logger.info('---------------------------------------------\n\n');
return accessToken;
} else {
const errorMsg = result.data?.errmsg || result.data?.error_description || result.message || 'Unknown error';
logger.error(`获取access_token失败: ${errorMsg}`);
logger.info('---------------------------------------------\n\n');
throw new Error(errorMsg);
}
} catch (e) {
logger.error(`获取access_token报错: ${e.message}`);
logger.info('---------------------------------------------\n\n');
throw e;
}
}
export { accessToken };
效果:

3、接口实现
server\index.js
javascript
import fetch from 'node-fetch';
import config from '../config/index.js';
import { getAccessToken } from '../utils/client_token.js';
import logger from '../utils/logger.js';
/**
* 生活服务商家应用-餐饮团购-订单查询
*/
async function akteOrderQuery() {
const accountId = config.accountId;
const pageNum = 1;
const pageSize = 10;
const accessToken = await getAccessToken();
const params = {
account_id: accountId,
page_num: pageNum,
page_size: pageSize
};
const headers = {
'access-token': accessToken,
'content-type': 'application/json'
};
logger.info('---------------------------------------------');
logger.info('请求URL:https://open.douyin.com/goodlife/v1/akte/order/query/');
logger.info('请求类型:GET');
logger.info('---------------------------------------------');
logger.info('请求参数:');
logger.info(params);
logger.info('---------------------------------------------');
logger.info('请求头:');
logger.info(headers);
logger.info('---------------------------------------------');
const response = await fetch(`https://open.douyin.com/goodlife/v1/akte/order/query/?account_id=${accountId}&page_num=${pageNum}&page_size=${pageSize}`, {
headers: headers
});
const json = await response.json();
logger.info('响应结果:');
logger.info(json);
logger.info('---------------------------------------------');
}
akteOrderQuery();
效果:
