成 都 狮 龙 书 廊 科 技 有 限 责 任 公 司
Chengdu Shilong Pearson Education technology Limited Liability Technology Group Co., Ltd.
头条号网站验证文件

客服电话:13904310313
公司总机:028-67876373
钉钉客服:17684321066
备案电话:15680712313
商标注册服务电话:15210354365
公安部备案号:22010602000144
google-site-verification: googlea5d4809e7c237a00.html
服务商新手指南
¥100
第三方开发者进入抖店开放平台创建工具型应用,基于应用开发可服务于抖音电商商家的应用,可将应用上架服务市场给商家购买授权。

审核时效说明
工具型应用,面向有产品、开发团队的开发者。开发者基于抖店开放平台的open API接口,为抖店商家提供数据对接服务。
需有类目资质权限,审核通过后方可申请创建应用。



系统会自动审核该应用。审核通过后,开发者即可进入应用后台管理应用
工具型应用开发者,请一定要先使用抖店提供的测试店铺和应用绑定测试。
访问【控制台】-【常用工具】-【测试账号管理】-复制【授权code】(如下图)
| 参数名称 | 参数说明 | 示例值 |
|---|---|---|
| code | 授权码code;有效期10分钟,换取access_token成功后立即失效;超过有效期后,可重新点击获取。 | 5173e916-df2f-48d7-b2c6-488f762e6bdf |

2.3.1拼接获取access_token使用GET方式
https://openapi-fxg.jinritemai.com/token/create?app_key=your_app_key&method=token.create¶m_json={"code":"your_code","grant_type":"authorization_code"}×tamp=2021-06-07 17:34:46&v=2&sign=your_sign_here&sign_method=hmac-sha256如何生成sign参考:https://op.jinritemai.com/docs/question-docs/97/1896
2.3.2 请求参数说明
| 名称 | 类型 | 是否必须 | 示例值 | 描述 |
|---|---|---|---|---|
| code | string | 是 | b5323fe0e88a3032ad | 授权码code;有效期10分钟,换取access_token成功后立即失效; |
| grant_type | string | 是 | authorization_code | 授权类型,默认为authorization_code |
2.3.3 响应参数说明
| 名称 | 类型 | 描述 |
|---|---|---|
| access_token | string | 用于调用API的access_token 过期时间为expires_in值 可通过refresh_token刷新获取新的access_token,过期时间仍为expires_in值 |
| expires_in | number | access_token接口调用凭证超时时间,单位(秒),默认有效期:7天 |
| scope | string | 已废弃,开发者无需关注; |
| shop_id | number | 店铺ID |
| shop_name | string | 店铺名称 |
| refresh_token | string | 用于刷新access_token的刷新令牌(有效期:14 天) |
2.3.4 响应示例
{
"data": {
"access_token": "6c4699a1-f2ff-433e-a73e-87378009f0bb",
"expires_in": 530808,
"refresh_token": "ed14a703-1f27-4a0b-9b94-759242744ec8",
"scope": "SCOPE",
"shop_id": "4463798",
"shop_name": "抖店开放平台测试专用旗舰店"
},
"err_no": 0,
"log_id": "202106081408160101311300265F00266E",
"message": "success" }2.4.1拼接获取refresh_token,使用GET方式
https://openapi-fxg.jinritemai.com/token/refresh?app_key=your_app_key&method=token.refresh¶m_json={"grant_type":"refresh_token","refresh_token":"your_refresh_token"}×tamp=2021-06-07 17:36:56&v=2&sign=your_sign&sign_method=hmac-sha2562.4.2 请求参数说明
| 名称 | 类型 | 是否必须 | 示例值 | 描述 |
|---|---|---|---|---|
| grant_type | string | 是 | refresh_token | 授权类型,默认为refresh_token |
| refresh_token | string | 是 | ed14a703-1f27-4a0b-9b94-759242744ec7 | 用于刷新access_token的刷新令牌,有效期:14 天 |
2.4.3 响应参数说明
| 名称 | 类型 | 描述 |
|---|---|---|
| access_token | string | 用于调用API的access_token 过期时间为expires_in值 可通过refresh_token刷新获取新的access_token,过期时间仍为expires_in值 |
| expires_in | number | access_token接口调用凭证超时时间,单位(秒),默认有效期:7天 |
| scope | string | 已废弃,开发者无需关注; |
| shop_id | number | 店铺ID |
| shop_name | string | 店铺名称 |
| refresh_token | string | 用于刷新access_token的刷新令牌(有效期:14 天) |
2.4.4 响应示例
{
"data": {
"access_token": "ACCESS_TOKEN",
"expires_in": 530665,
"refresh_token": "REFRESH_TOKEN",
"scope": "SCOPE",
"shop_id": "SHOPID",
"shop_name": "SHOPNAME"
},
"err_no": 0,
"log_id": "2021060814103801013113216004003A16",
"message": "success" }完成测试店铺授权token可以开始API调用和场景对接测试。

必须完成完成发布服务并审核通过

3.3.1正式入驻订购方式
3.3.2订购流程图
3.3.3订购消息信息
{"msg_type":1, "msg":"柳暗花明又一村"}
结构体:
type MsgRequest struct {
MsgType int32`json:"msg_type"` // 表示的是消息类型,1为支付成功消息通知类型,2为卖家授权类型
Msg string `json:"msg"` }参数释义:
| 参数名称 | 参数类型 | 参数描述 |
|---|---|---|
| msg_type | Int32 | 消息类型,1-代表支付成功通知消息;2-代表授权相关消息; |
| msg | String | 对应的消息内容 |
2)msg_type=1,msg中存储的是支付成功相关信息 ,解密后参数和结构体如下:
type MsgOrderInfo struct {
AppId int64 `json:"app_id"`
OrderInfo PushOrderInfo `json:"order_info"` }
type PushOrderInfo struct {
OrderIdint64 `json:"order_id"`
ShopId int64 `json:"shop_id"`
ServiceStartTime int64 `json:"service_start_time"`
ServiceEndTime int64 `json:"service_end_time"`
Status int32 `json:"status"`
Phonestring`json:"phone"`
PayAmountint64 `json:"pay_amount"`
PayTimeint64 `json:"pay_time"`
OrderCreateTimeint64 `json:"order_create_time"`
PayTypeint32 `json:"pay_type"`
PushSkuInfoPushSkuInfo `json:"push_sku_info"` }
type PushSkuInfo struct {
SpecType int32`json:"spec_type"`
SpecValuestring `json:"spec_value"`
Priceint64`json:"price"`
Duration int32`json:"duration"`
DurationUnit int32`json:"duration_unit"`
Titlestring `json:"title"` }PushOrderInfo参数释义
| 字段 | 字段名称 | 示例值 | 备注 |
|---|---|---|---|
| 应用ID | app_id | 69542810024708193512 | 应用唯一标识 |
| 订单编号 | order_id | 4813613085511278159 | 订单唯一标识,可作幂等判断依据 |
| 店铺ID | shop_id | 767887 | 店铺唯一标识 |
| 服务开始时间 | service_start_time | 1599727507 | 购买服务之后服务的开始生效时间,时间戳,单位:秒 |
| 服务结束时间 | service_end_time | 1599728507 | 购买服务之后服务的结束时间,时间戳,单位:秒 |
| 订单状态 | status | 1 | 状态枚举:5:已完成(仅有这一个状态) |
| 购买人手机号 | phone | 182****64 | 店铺所有者的手机号 |
| 订单实付金额 | pay_amount | 100 | 用户实际支付的金额,以分为单位 |
| 支付时间 | pay_time | 1599727507 | 时间戳,单位:秒 |
| 下单时间 | order_create_time | 1599728507 | 时间戳,单位:秒 |
| 支付方式 | pay_type | 2 | 方式枚举:1:微信,2:支付宝,7:该订单为试用订单,0元单 |
PushSkuInfo参数释义
| 字段 | 字段名称 | 示例值 | 备注 |
|---|---|---|---|
| sku名称 | titile | 至尊版 三个月 | 所购买版本与时间的结合 |
| 规格值 | spec_value | 至尊版 | 规格名称 |
| 使用时长 | duration | 3 | 购买时间按照自然月,1个月,3个月,6个月,12个月 |
| 使用时长单位 | duration_unit | 1 | 时长单位, 0:天,1:月,2:年 |
| sku价格 | price | 100 | sku的价格,以分为单位 |
| 规格类型 | spec_type | 0 | 规格类型--0: 版本,其他待定 |
(3)msg_type=2,msg中存储的是授权相关信息 ,解密后参数和结构体如下:结构体:
type MsgAuthInfo struct {
ActionType int32 `json:"action_type"` // action_type=1 授权关闭, action_type=2授权成功, action_type=3授权过期, action_type=4重新获取授权码code
AppIdint64 `json:"app_id"`
ShopId int64 `json:"shop_id"` }参数释义:
| 字段 | 字段名称 | 示例值 | 备注 |
|---|---|---|---|
| 授权操作类型 | action_type | 1 | 1关闭授权, 2打开授权, 3授权过期, 4重新获取授权码 |
| app的ID | app_id | 684xxxx920 | 应用唯一标识 |
| 店铺ID | shop_id | 12345 | 店铺唯一标识 |
(4)第三方返回给开放平台(无需加密)的响应:
type MsgResponse struct {
Code int64`json:"code"` // 为0表示成功
Msgstring `json:"msg"`// 响应信息,当code不为0时取此信息 }解密算法 使用AES加密算法,密钥为32位,appSecret为36位,需要去除其中的4位"-"即可。
Go解密代码:
func AesDecrypt() string {
msgSecret := "Vf6ClcmtqC5KDKi7//XHv8cfPtD653kt+jV+eHhyPA9ZZfDsatobIry7nQzGEqvQpBK1EAOTPbuhxl1Er/nDcQ==" //加密之后的消息
appSecret := "a5c5a2dc-31ca-4a7a-b743-e862d96082bd"
var appSecretArr = []byte(strings.ReplaceAll(appSecret, "-", ""))
bytesPass, err := base64.StdEncoding.DecodeString(msgSecret)
if err != nil {
fmt.Println(err)
return "解密失败!!!"
}
sourceMsg, err := DoAesDecrypt(bytesPass, appSecretArr)
if err != nil {
fmt.Println(err)
return "解密失败!!!"
}
fmt.Printf("解密后:%s\n", sourceMsg)
return string(sourceMsg)
}
func DoAesDecrypt(encryptedMsg, key []byte) ([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
//AES分组长度为128位,所以blockSize=16,单位字节
blockSize := block.BlockSize()
blockMode := cipher.NewCBCDecrypter(block, key[:blockSize]) //初始向量的长度必须等于块block的长度16字节
origData := make([]byte, len(encryptedMsg))
blockMode.CryptBlocks(origData, encryptedMsg)
origData = PKCS5UnPadding(origData)
return origData, nil }
//去除填充数据 func PKCS5UnPadding(origData []byte) []byte {
length := len(origData)
unfilledNum := int(origData[length-1])
return origData[:(length - unfilledNum)]
}
Java解密代码:
public static void AesDecrypt() throws Exception {
String msgSecret = "Vf6ClcmtqC5KDKi7//XHv8cfPtD653kt+jV+eHhyPA9ZZfDsatobIry7nQzGEqvQpBK1EAOTPbuhxl1Er/nDcQ==";
String appSecret = "a5c5a2dc-31ca-4a7a-b743-e862d96082bd";
String Key = appSecret.replaceAll("-", "");
String decrypt = decrypt(msgSecret,Key);
System.out.println("解密之后的数据为: "+decrypt);
}
// 解密 public static String decrypt(String sSrc, String sKey) throws Exception {
try {
byte[] raw = sKey.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
int blockSize = cipher.getBlockSize();
IvParameterSpec iv = new IvParameterSpec(sKey.substring(0,blockSize).getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);//先用base64解密
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original, "utf-8");
return originalString;
} catch (Exception ex) {
return null;
}
}订单支付消息,推送的加密消息
qa3eqTSSX4VTr2q50u71505aG1pQteTgNawlVpFus+DOsGn+nzODxmoeqYRHfqRKrLLueuUVDuehR0r4I5PNqH4Nba140XUHVrLPjX7qKvMxat7JNfvFsMvqKpeRkC2jWZ9NLKv/wBYAhAFKkWCl4yNmc7odKDb4mNgrExrSBQvXMdd40ELKbMU0HcCxXIi1ukm9mSvpGelxM7Vs6YAqPyPzn9RRJuoXZZjpHRIzZpkpGsa0PMnjcYIC3hjz3AbKaW+EIAAYWq85ozKkTnbT7D7VQOF+ivk57Y0M3Qe1kQWQiCkifJK52YaDiprv7tChp37bEiwzd91FfclUPa2GgkwBCh0DaiJAPWn9E5U3byCZO0UUPlUPDLZFp3WWRGmMANtN4kBS7uGaOMs3WJGREGe471CXFVuKCYkepULdmQM+POecOQSQR4U76eXJKYVhSSdAsypZM7Wev7PyyaODpj7ecECIBFDES7k3Nh9GAJDooiziXQKGBQXOrjxfWk6Pi4IFxa6+4fQsbl93XtdOpvkkxbg5ZqcX1d2E01lp/F0VQm0eerRw/fKG9+d7NmsAWkDIarKtyDXrPRLIrWlzVNhGmlYJ+CfPpqKtI4md7zhhnO/XN1LKCMz/XEM7uwP/
密钥
a5c5a2dc-31ca-4a7a-b743-e862d96082bd
解密之后的消息
{
"msg_type":1,
"msg":"{"app_id":6840999917113574920,"order_info":{"order_id":6859933142842966027,"shop_id":123456,"service_start_time":1599727507,"service_end_time":1599728507,"status":1,"phone":"13117428566","pay_amount":500,"pay_time":1599727507,"order_create_time":1599727507,"pay_type":1,"push_sku_info":{"spec_type":0,"spec_value":"标准版","price":500,"duration":3,"duration_unit":1,"title":"标准版 三个月"}}}" }授权关闭消息,推送的加密消息
avE+wkIQrAuCCe3zIic8uwKSqiuseHYx8yklYPuTwqoJ7ATQvGFHkqYKvNvOp/lFsxHkcgUSV4CUxMDj/1bsayKQUW/WfJorIt//HAV5753UtMkr+kARXoocHKjN70qm
密钥
a5c5a2dc-31ca-4a7a-b743-e862d96082bd
解密之后的消息
{
"msg_type":2,
"msg":"{\"action_type\":1,\"app_id\":6840999917113574920,\"shop_id\":123456}" }服务市场会将消息以post请求的形式传到应用回调地址上,具体推送的消息内容如文档中的demo所示,isv根据文档提供的密钥、相对应的解密算法就可以将demo中的密文还原成为对应的消息。在自测时可以通过postMan等工具,模拟发送消息到自身app对应回调地址上,然后对消息体进行解析,具体消息体结构、请求结构以及响应结构如文档所示。
请求的url为如下所示(注意:param_json请按照空对象 "{}" 传递)
https://openapi-fxg.jinritemai.com/rights/info?app_key=your_app_key_here&access_token=your_accesstoken_here&method=rights.info¶m_json={}×tamp=2018-06-19%2016:06:59&v=2&sign=your_sign_here**响应参数 **
| 参数名称 | 参数类型 | 示例值 | 参数描述 |
|---|---|---|---|
| expire_time | String | "2020-12-30 00:00:00" | 权益到期时间 |
| rights_type | Number | 1 | 0: 试用服务,1:正式服务 |
| spec_type | Number | 0 | 规格类型--0: 版本,其他待定 |
| spec_val | String | "至尊版" | 规格名称 |
{
"data": {
"expire_time":"2020-12-30 00:00:00",
"rights_type":1,
"spec_type":0,
"spec_val":"至尊版"
},
"err_no": 0,
"message": "success"
}3.3.6定向入驻订购方式
详见:https://op.jinritemai.com/docs/guide-docs/194/1966
3.4.1 code通知
code会以GET方式通知到您的使用地址上。
| 参数名称 | 参数说明 | 示例值 |
|---|---|---|
| code | 授权码code;有效期10分钟,换取access_token成功后立即失效。 | 5173e916-df2f-48d7-b2c6-488f762e6bdf |
3.5.1拼接获取access_token使用GET方式
https://openapi-fxg.jinritemai.com/token/create?app_key=your_app_key&method=token.create¶m_json={"code":"your_code","grant_type":"authorization_code"}×tamp=2021-06-07 17:34:46&v=2&sign=your_sign_here&sign_method=hmac-sha256如何生成sign参考:https://op.jinritemai.com/docs/question-docs/97/1896
3.5.2 请求参数说明
| 名称 | 类型 | 是否必须 | 示例值 | 描述 |
|---|---|---|---|---|
| code | string | 是 | b5323fe0e88a3032ad | 授权码code |
| grant_type | string | 是 | authorization_code | 授权类型,默认为authorization_code |
3.5.3 响应参数说明
| 名称 | 类型 | 描述 |
|---|---|---|
| access_token | string | 用于调用API的access_token 过期时间为expires_in值 可通过refresh_token刷新获取新的access_token,过期时间仍为expires_in值 |
| expires_in | number | access_token接口调用凭证超时时间,单位(秒),默认有效期:7天 |
| scope | string | 已废弃,开发者无需关注; |
| shop_id | number | 店铺ID |
| shop_name | string | 店铺名称 |
| refresh_token | string | 用于刷新access_token的刷新令牌(有效期:14 天) |
3.5.4 响应示例
{
"data": {
"access_token": "6c4699a1-f2ff-433e-a73e-87378009f0bb",
"expires_in": 530808,
"refresh_token": "ed14a703-1f27-4a0b-9b94-759242744ec8",
"scope": "SCOPE",
"shop_id": "4463798",
"shop_name": "抖店开放平台测试专用旗舰店"
},
"err_no": 0,
"log_id": "202106081408160101311300265F00266E",
"message": "success" }3.6.1拼接获取refresh_token,使用GET方式
https://openapi-fxg.jinritemai.com/token/refresh?app_key=your_app_key&method=token.refresh¶m_json={"grant_type":"refresh_token","refresh_token":"your_refresh_token"}×tamp=2021-06-07 17:36:56&v=2&sign=your_sign&sign_method=hmac-sha2563.6.2 请求参数说明
| 名称 | 类型 | 是否必须 | 示例值 | 描述 |
|---|---|---|---|---|
| grant_type | string | 是 | refresh_token | 授权类型,默认为refresh_token |
| refresh_token | string | 是 | ed14a703-1f27-4a0b-9b94-759242744ec7 | 用于刷新access_token的刷新令牌,有效期:14 天 |
3.6.3 响应参数说明
| 名称 | 类型 | 描述 |
|---|---|---|
| access_token | string | 用于调用API的access_token 过期时间为expires_in值 可通过refresh_token刷新获取新的access_token,过期时间仍为expires_in值 |
| expires_in | number | access_token接口调用凭证超时时间,单位(秒),默认有效期:7天 |
| scope | string | 已废弃,开发者无需关注; |
| shop_id | number | 店铺ID |
| shop_name | string | 店铺名称 |
| refresh_token | string | 用于刷新access_token的刷新令牌(有效期:14 天) |
3.6.4 响应示例
{
"data": {
"access_token": "ACCESS_TOKEN",
"expires_in": 530665,
"refresh_token": "REFRESH_TOKEN",
"scope": "SCOPE",
"shop_id": "SHOPID",
"shop_name": "SHOPNAME"
},
"err_no": 0,
"log_id": "2021060814103801013113216004003A16",
"message": "success" }https://fuwu.jinritemai.com/authorize?service_id=12321&state=dy123
如何获取service id:https://op.jinritemai.com/docs/question-docs/116/427
| 名称 | 类型 | 是否必须 | 示例值 | 描述 |
|---|---|---|---|---|
| service id | string | 是 | 12321 | Service ID是服务市场发布服务的唯一id,用于工具型应用服务订购和服务授权。 |
| state | string | 否 | dy123 | 开发者自定义字段,返回值和传入值一样。该字段关联使用服务商侧软件的商家信息。使用前提条件: 1.商家已经成功订购您的应用并且在授权有效期内。拼接示例:https://fuwu.jinritemai.com/authorize?service_id=填写您的service_id&state=填写您的自定义参数 2、商家访问授权链接会出现授权页面,授权成功后会触发推送code和state到您的应用使用地址上,请以GET方式接收。 |
商家主账号登录抖店帐号,点“确认授权”按钮,即可进入授权页面。

商家抖店店铺必须有对应的行业运营同学,并且服务商入驻前必须和该商家签署合作协议。
注:上述条件缺一不可,如不满足上述条件,则无法申请定向资质,提交无效申请信息也会被驳回。
| 流程/资质类型 | 正式资质 | 定向资质 |
|---|---|---|
| 接口权限 | 参考类目权限指引文档:https://op.jinritemai.com/docs/guide-docs/193/1958 | 与正式资质要求一致 |
| 申请流程 | 正式资质需要按照申请资质时的类目要求填写审核资料。注意:审核资料全是必填,缺一不可。 | 无需填写申请资料,需要提供《意向合作商家授权书》并让抖店商家联系对应店铺的行业运营。在定向资质申请页面填写对应行业运营姓名一并提交。联系对接运营参考:https://op.jinritemai.com/docs/question-docs/45/1777 注意:审核资料全是必填,缺一不可 |
| 保证金缴纳 | 需要缴纳保证金,每个类目缴纳标准不同。详见:https://op.jinritemai.com/docs/notice-docs/21/310 | 与正式资质要求一致。 |
| 发布服务上架 | 需要按照发布服务页面的要求进行填写。 | 基本与正式资质一致,唯一不同在于,定向资质发布服务时要上传商家店铺id(必填)以及和商家的合作协议(必填)。合作协议模板示例: |
| 商家订购 | 发布服务审核完成后,商家可以在服务市场看到这个服务,进行订购。 | 因为定向资质无法展示在服务市场,所以需要服务商在服务商后台,找到服务列表页面,找到对应服务,点击服务详情,跳转到订购页面,把订购页面的链接发送给合作商家进行订购。如果发送给没有在发布服务时上传店铺id的商家,则没有权限订购。如果后续有新增合作商家,可以重新编辑服务,上传店铺id,重新发布。 |
选择需要申请的对应服务类目,然后选择需要定向。填写对应运营名称。上传意向合作商家授权书,点击提交申请即可。
审核时效: 10个工作日内进行审核,如提交超过8个工作日还未审核,可提交工单催审,刚提交立即催审无法处理。
2.1访问开放平台后台-【应用中心】点击【新建应用】

2.2选择电商后台应用

2.3选择电商软件服务商,并选择已经通过审核的二级类目即可创建应用。

发布服务上架审核时效:10个工作日内进行审核,如提交超过8个工作日还未审核,可提交工单催审,刚提交立即催审无法处理。


5.1、因为定向资质无法展示在服务市场,所以无法使商家看到服务进行订购。
5.2、需要通过服务商复制订购链接发给给合作商家进行订购。
5.3、订购链接获取流程,需要到服务商后台,服务列表,找到对应的服务,然后点击服务详情,会跳转到订购页面,把这个订购页面的链接发送给在发布服务时上传店铺id和协议的商家进行订购即可。
ps:如果后续有新增商家,可以点击编辑服务,重新上传店铺id以及合作协议,然后重新提交审核即可,审核通过后即可发送链接给新商家进行订购。
主要面向订单管理、电商ERP等存在平台解密接口调用类目的服务商;
服务商通过对接抖店开放平台API接口可以获取订单相关等核心用户数据。这些数据多涉及消费者隐私,一旦遭到部分商家、盗号者恶意泄漏,会造成严重法律后果。为了保护消费者的隐私数据,抖店开放平台现需搜集各应用上商家用户的订单访问、解密等安全相关事件数据,用于事后安全风等级评估、预警等操作。因此,需各服务商配合事件上报,架构如下:
ISV 应当在所有有调用抖店服务接口的前端代码中接入 SDK。前端代码接入 SDK 以后,会自动完成数据采集。 接入方法: 在前端 HTML 代码的"header"下加上以下代码片段
前端header说明
因为会在isv商家侧涉及敏感信息的接口头中增加自定义的header(doudian-event-id),所以isv商家后台需要设置:
Access-Control-Allow-Headers: doudian-event-id Access-Control-Max-Age: 3600
https://lf3-open-web-sdk.bytetos.com/obj/open/ecs-cpp-sdk.zip
初始化SDK
/** * 初始化SDK */ ECS_API void ecs_init(const char *app_key);
创建事件ID
/** * 创建事件ID */ ECS_API const char *ecs_new_event_id(const char *method, const char *url, const char *account_id);
释放事件ID
/** * 释放事件ID */ ECS_API void ecs_free_event_id(const char *event_id);
C++
#include#include int main() { // 初始化SDK,将APP_KEY替换为真实参数 ecs_init("APP_KEY"); // 创建事件ID,将METHOD、URL、ACCOUNT_ID替换为真实参数 const char *event_id = ecs_new_event_id("GET", "https://example.com", "ACCOUNT_ID"); std::cout << "Event ID: " << event_id << std::endl; // 释放事件ID ecs_free_event_id(event_id); return 0; }
C#
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
Init("APP_KEY");
IntPtr eventId = NewEventId("GET", "https://example.com", "ACCOUNT_ID");
Console.WriteLine(Marshal.PtrToStringAnsi(eventId));
FreeEventId(eventId);
}
[DllImport("ecs.dll", EntryPoint = "ecs_init")]
public static extern void Init(String appKey);
[DllImport("ecs.dll", EntryPoint = "ecs_new_event_id")]
public static extern IntPtr NewEventId(String method, String url, String accountId);
[DllImport("ecs.dll", EntryPoint = "ecs_free_event_id")]
public static extern void FreeEventId(IntPtr eventId);
}
}1、说明文档参考 抖店开放平台API SDK
2、使用方法跟抖店开放平台API SDK 完全一样 说明:
1、点击查看接口文档
SecurityBatchReportOrderSecurityEventRequest request = new SecurityBatchReportOrderSecurityEventRequest(); SecurityBatchRep
辛苦大家动动小手,花1分钟时间做个详情页改版的小调研,让服务市场产品建设的越来越好~
https://wj.toutiao.com/q/159759/9WTr4i05/0135/#/



















4.1、待开票账单













问题1:服务商申请平台服务费发票的操作步骤?
答:服务商需要登录服务商后台,选择【资产】—【发票中心】—【平台开票】,点击【开票信息】填写购买方基本信息。开票信息填写完成后,选择账单,点击【申请开票】。
问题2:平台服务费账单多久出一次?
答:平台服务费账单每月出具一次,每月20号出具上个月的平台服务费账单。
问题3:服务商后台展示的账单金额包括哪些?
答:服务商后台的账单即平台每笔订单结算应收服务商的抖店服务市场平台服务费(以下简称“平台服务费”),按照账单当月实际结算的订单扣除当月退款的订单按照一定比例计算得出的平台服务费。(保证金扣罚暂不包括在内)
问题4:服务商可以申请的平台服务费发票类型有哪些?
答:服务商可以申请的平台服务费发票包括增值税电子普通发票、增值税普通发票、纸质增值税专用发票。
问题5:为什么会有负数账单?
答:服务商当月退款订单对应平台服务费大于当月实际结算订单对应的平台服务费的情况下会产生负 数账单。
问题6:有负数账单的服务商应该如何申请发票?
答:服务商如有负数账单,请将所有负数账单与正数账单一起勾选申请开票(确保申请开票账单金额大于0且剩余未开票账单中无负数账单)。如存在负数账单的情况下,只勾选正数账单将不能申请开票。

复制产品链接
长按图片保存/分享