在开发抖音小程序时,如果没有接入交易系统,订单需要同步才能上线审核。抖音把订单分为 POI 订单和非 POI 订单,区别如下:
- POI订单:当订单内的商品是进入了抖音商品库的商品称为 POI 订单
- 非 POI 订单:未做商品同步的则为非 POI 订单
对非 POI 订单同步时,碰到的问题总结如下:
access_token 问题
1 2 3 4 5
| { "err_code":40004, "err_msg":"access_token错误,请检查该字段是否错误或过期", "body":"" }
|
虽然文档里说会支持 client_token,建议使用新接口(client_token),但实际上使用 client_token 获取的 token 是验证不通过的,最好使用 access_token 来调用。

以下是使用access_token接口获取的结果:
1 2 3 4 5
| { "access_token":"08011218463951675636384a4d6c38446b514e4e763456396d413d3d", "expires_in":7200, "expiresAt":1717040118 }
|
下面是使用client_token 接口获取的结果:
1 2 3 4 5
| { "access_token":"clt.5d95f7f2fa450c7820ca03b30bb76789j1Gs8nhsJ5MNlD7Y5PXeWFVjcc3J_lq", "expires_in":7200, "log_id":"202405300917489F5B9C572F83655A9F1A" }
|
两个接口获取的 token 是有区别的。
参数问题
主要从参数类型去排查,一定要按照文档说明调用。 如果文档标明是 string 类型的,切记一定要转成 string,包括嵌套数组,也需要将其每个值转化。
需要注意的是,请求参数里有一个时间戳字段是13位的。
1 2 3 4 5 6 7 8 9 10 11 12
| [ 'order_id' => (string) 1213123131231, 'order_status' => 1, 'order_detail' => [ 'order_id' => '', 'create_time' => 1717079532749, # 13位 ... 'item_list' => [ [...] ] ], ]
|
发送请求时就需要处理成:
1 2 3 4 5 6 7 8 9 10 11 12
| json_encode([ 'order_id' => (string) 1213123131231, 'order_status' => 1, 'order_detail' => json_encode([ 'order_id' => '', 'create_time' => 1717079532749, # 13位 ... 'item_list' => json_encode([ [...] ]) ]), ])
|
只有把每个 list 都转成 string 才能请求成功。