前言:
小程序主体变更“行业角色-生活服务商家”,之前用uniapp接入的担保交易被停止使用。需要升级到交易系统2.0。
具备条件:
- 所属行业符合抖音-生活服务
- 账号信息已经认证“行业角色-生活服务商家”
- 之前使用担保交易被终止接入的
准备工作:
- 先联系好抖音负责生活服务的同学,进行一个简短的业务沟通会议让抖音同学帮你评估去你们适合做哪一种。
- 确定好之后会给发送一个对接流程文档(我们的是【到综行业通用】抖音小程序解决方案)
- 使用抖音开放平台账号主体入驻抖音来客=》创建门店=》认领门店(POI认领)=》门店列表的认领状态显示已认领。
- 抖音APPID可以继续沿用之前旧小程序的。也可以重新创建。
提示: 认领完成之后需要去做店铺匹配,这个操作可以理解为,服务端的店铺ID和抖音来客后台的门店ID做一个绑定关系。提交门店匹配任务、店铺匹配状态查询、店铺匹配任务结果查询
绑定成功就可以开始开发了~
接口文档: Saas生活服务开平商品接口文档
步骤一:.获取access-token 公共参数,放header中的
代码示例:
/**
* 获取ClientToken
* @param string $grant_type
* @return string
*/
public function getCllitToken(string $grant_type = 'client_credential'): string
{
$appid = 'your appid';
$app_secret = 'your app_secret';
$key = $appid . '_ClitTokeen';
$val = '';
if (!$val) {
$url = 'https://open.douyin.com/oauth/client_token/';
$header = array(
"Content-Type: application/json",
);
$data = [
'grant_type' => "client_credential",
'client_key' => $appid,
'client_secret' => $app_secret,
];
$curl = new Curl();
$res = $curl->curl_api($url, $data, $header);
if ($res['message'] == 'success') {
$resData = $res['data'];
if (isset($resData['error']) && $resData['error'] != 0) {
$val = '';
}
$val = $resData['access_token'];
Cache::set($key, $val, 3600);
} else {
$val = '';
}
}
return (string)$val;
}
步骤二:.创建/更新商品接口 POST https://open.douyin.com/goodlife/v1/goods/product/save/
/**
* 商品创建
* @param array $data
* @param string $type
* @return array
*/
public function product_save(array $data, string $type)
{
//$data数据是model保存成功之后数据的插入ID,下发所用到的$data['out_id']
$poi_list[] = [
'poi_id' => '123',//抖音来客后台-》门店管理-》门店ID
'poi_id' => '456',//多个门店代表创建时会这几个门店都会创建
];
$app_id = 'your appid';
$result = [
'status' => false,
'msg' => '',
'data' => []
];
try {
$url = 'https://open.douyin.com/goodlife/v1/goods/product/save/';
$token = $this->getCllitToken();
$header = [
'Content-Type: application/json;',
'access-token:' . $token
];
$info = '服务端存储的商品信息';
$class_name = '使用规则的一个title';
$values['account_id'] = $this->account_id;
$values['product'] = [
'account_name' => '服务有限公司',
'sold_start_time' => time(),
'sold_end_time' => strtotime("+1 month", time()),
'out_url' => json_encode(
['app_id' => $app_id,
'path' => 'pages/product/detail',
'params' => json_encode(['id' => $data['out_id']]),
]
),
'attr_key_value_map' => [
'appointment' => json_encode(['need_appointment' => true, 'ahead_time_type' => 1, 'ahead_day_num' => 1]),//预约信息
'auto_renew' => "true",//是否开启自动延期
'can_no_use_date' => json_encode(['enable' => false]),//不可用日期
'Description' => json_encode(["商品描述-" . $info['data']['introduce']]),//商品描述
'image_list' => json_encode([['url' => $data['img_path']]]),//封面图 图片比例:375:280
'Notification' => json_encode([['title' => $class_name, 'content' => $info['data']['introduce']]]),//使用规则
'RefundPolicy' => "3",//退款政策 1-允许退款 2-不可退款 3-有条件退
'refund_need_merchant_confirm' => "true",//退款是否需商家审核
'show_channel' => "1",//投放渠道, "1-不限制 2-仅直播间可见"
'use_date' => json_encode(['use_date_type' => 2, 'day_duration' => 30]),//使用日期
'use_time' => json_encode(['use_time_type' => 1]),//全天/仅指定时间可用;时间段(比如12:-14:)
'description_rich_text' => json_encode($this->description_rich_text),
'poi_list' => json_encode([$poi_list]),//店铺列表
//'poi_list'=>json_encode(['poi_id'=>'7246284830772561979',"supplier_ext_id"=>$this->supplier_ext_id]),
'EntryType' => '2',
'trade_url' => json_encode(['app_id' => env('bytedance.APPID'), 'path' => 'pages/product/detail', 'params' => json_encode(['id' => $data['out_id']])]),
],
'biz_line' => 5,//业务线
'category_id' => $this->category_id,//品类ID
'out_id' => (string)$data['out_id'],//外部商品id
'pois' => [$this->poi_list],//店铺列表
'product_name' => $data['name'],//商品名
'product_type' => 1,//默认团购
'product_ext' => [
'test_extra' => [
//'uids' => ['1111','2222'],//测试抖音号,下单用户抖音不在列表会下单失败
'test_flag' => false
],
],
];
if ($type == 'add') {
$values['product']['category_full_name'] = '';//品类全名,保存时不必填写
} else if ($type == 'edit') {
$values['product']['product_id'] = (string)$data['byt_id'];
$values['product']['category_full_name'] = '测试';//品类全名,保存时不必填写
}
$values['sku'] = [
'sku_name' => $data['name'],//SKU名称
'origin_amount' => (int)bcmul($data['origin_amount'], 100),//原价
'actual_amount' => (int)bcmul($data['actual_amount'], 100),//实际支付价格
'stock' => [
'limit_type' => 2,
'stock_qty' => 40,
],
'status' => 1,
'attr_key_value_map' => [
'code_source_type' => "1",//券码生成方式
'limit_rule' => json_encode(['is_limit' => false]),//限制购买
'settle_type' => "1",//分账模式 1总店 2分店结算
'use_type' => "1",//核销方式
],
];
$curl = new Curl();
$curl_result = $curl->curl_api($url, $values, $header, 'POST');
if ($curl_result['data']['error_code'] == 0) {
$result['status'] = true;
$result['msg'] = $curl_result['extra']['description'];
$result['data']['product_id'] = $curl_result['data']['product_id'];
} else {
$result['msg'] = $curl_result['extra']['description'];
}
return $result;
} catch (\Exception $e) {
$msg = $e->getMessage();
$line = $e->getLine();
$result['msg'] = $msg;
$result['data'] = $line;
return $result;
}
return $result;
}
account_id:来客后台的账号ID
category_id:类目ID,通过查询商品品类接口找到对应行业后面有个编号数字
查询商品品类 GET https://open.douyin.com/goodlife/v1/goods/category/get/
接口会返回一个已经在申请上架的poi商品ID,指的是抖音来客后台商品管理中的商品ID,这个ID需要和服务端创建的数据做绑定,后续下单会用到。
提示:通过这个接口创建的商品,和抖音来客后台界面操作创建的商品都会在列表展示。可以通过商品列表的操作列区分创建来源。你可以理解为,抖音来客的商品列表,分了两种类型的商品。一种是接口创建,一种是后台界面创建
通过接口创建的只有查看和更多,其他操作是灰色。通过抖音来客后台创建的是可以在来客界面完全操作商品。
备注:创建之后一般会有1-10分钟的审核,显示样子
通过抖音搜索团购关键词的这两种呈现方式,点击抢购就是跳转到小程序商品详情页面了。所以创建或者修改的动作不需要太完美的修饰,成功之后最终展现还是小程序。抢购的参数是创建商品接口中的“out_url”。
步骤三、四,请移步 抖音【交易系统2.0-生活到综poi小程序开发】步骤三、四