1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
use crate::Request;
use serde::{Deserialize, Serialize};
/// 门票商品新建及更新
#[derive(Serialize, Deserialize, Debug, Default)]
pub struct SkuList {
/// 仅当sku_type为日历库存时入参。若父sku多于10个,需要通过pdd.goods.child.sku.edit接口分批维护。
#[serde(rename = "child_skus")]
pub child_skus: Option<Vec<ChildSkus>>,
/// 拼团价,单位为分。仅当sku_type为普通库存时入参
#[serde(rename = "group_price")]
pub group_price: Option<i64>,
/// 上架状态。0=已下架,1=已上架。新建sku时不传时表示上架。
#[serde(rename = "is_onsale")]
pub is_onsale: Option<i32>,
/// sku外部编码,同其他接口中的outer_id 、out_id、out_sku_sn、outer_sku_sn、out_sku_id、outer_sku_id 都为商家编码(sku维度)。
#[serde(rename = "out_sku_sn")]
pub out_sku_sn: Option<String>,
/// 库存增减。仅当sku_type为普通库存时入参。比如传-10表示将对应的sku库存减10。
#[serde(rename = "quantity_delta")]
pub quantity_delta: Option<i64>,
/// 调pdd.scenic.sku.rule.get得到的规则id。在发布成功后不可修改。
#[serde(rename = "rule_id")]
pub rule_id: Option<String>,
/// 单买价,单位为分。仅当sku_type为普通库存时入参。
#[serde(rename = "single_price")]
pub single_price: Option<i64>,
/// 如果传值,则在原sku基础上进行编辑,如果传空,则新增sku
#[serde(rename = "sku_id")]
pub sku_id: Option<i64>,
/// 商品规格列表,从pdd.goods.cat.template.get中获取销售属性规格id后,再在pdd.goods.spec.id.get获取spec_id。spec_id需要和goods_properties中的对应。对于多种规格,需要传每个规格的spec_id的值,如[20,5]。在发布后不可修改。
#[serde(rename = "spec_id_list")]
pub spec_id_list: Option<Vec<i64>>,
/// SKU预览图。图片格式支持JPEG/JPG/PNG, 图片尺寸长宽比1:1且尺寸不低于480px,图片大小最高1MB。先通过pdd.goods.image.upload上传图片
#[serde(rename = "thumb_url")]
pub thumb_url: Option<String>,
}
/// 门票商品新建及更新
#[derive(Serialize, Deserialize, Debug, Default)]
pub struct PddTicketGoodsUpload {
/// 商品轮播图,按次序上传,图片格式支持JPEG/JPG/PNG, 图片尺寸长宽比1:1且尺寸不低于480px,图片大小最高1MB。先通过pdd.goods.image.upload上传图片
#[serde(rename = "carousel_gallery")]
pub carousel_gallery: Option<Vec<String>>,
/// 轮播视频。需要先上传到pdd.goods.filespace.image.upload
#[serde(rename = "carousel_video")]
pub carousel_video: Option<Vec<CarouselVideo>>,
/// 类目id,国内门票(含港澳台)传9088,国外门票传20042。发布成功后不能修改。新增商品时必填。
#[serde(rename = "cat_id")]
pub cat_id: Option<i64>,
/// 电子票发码方式,0=手动电子票;1=实时电子票,自动发货。新增商品时必填。
#[serde(rename = "code_mode")]
pub code_mode: Option<i32>,
/// 商品详情图: a. 尺寸要求宽度处于480~1200px之间,高度0-1500px之间 b. 大小1M以内 c. 数量限制在20张之间 d. 图片格式仅支持JPG,PNG格式 。先通过pdd.goods.image.upload上传图片,新增商品时必填。
#[serde(rename = "detail_gallery")]
pub detail_gallery: Option<Vec<String>>,
/// 草稿id,编辑草稿时必传。
#[serde(rename = "goods_commit_id")]
pub goods_commit_id: Option<i64>,
/// 商品描述,字数限制:20~500。新增商品时必填。
#[serde(rename = "goods_desc")]
pub goods_desc: Option<String>,
/// 商品id,编辑商品时必传。
#[serde(rename = "goods_id")]
pub goods_id: Option<i64>,
/// 商品标题,新增商品时必填。
#[serde(rename = "goods_name")]
pub goods_name: Option<String>,
/// 商品属性,先调pdd.goods.cat.template.get,根据cat_id获取,新增商品时必填。
#[serde(rename = "goods_properties")]
pub goods_properties: Option<Vec<GoodsProperties>>,
/// 是否获取商品发布警告信息,默认为忽略
#[serde(rename = "ignore_edit_warn")]
pub ignore_edit_warn: Option<bool>,
/// 是否提交本次编辑,0=不提交,表示仅保存草稿,不进行提交,不会进行校验;1=提交,表示提交本次编辑内容,会进行校验;不传时默认为提交
#[serde(rename = "is_submit")]
pub is_submit: Option<i32>,
/// 商品参考价,单位为分,必须高于最高的sku单买价。新增商品时必填。
#[serde(rename = "market_price")]
pub market_price: Option<i64>,
/// 商品goods外部编码,同其他接口中的outer_goods_id 、out_goods_id、out_goods_sn、outer_goods_sn 都为商品维度的商家编码。
#[serde(rename = "out_goods_sn")]
pub out_goods_sn: Option<String>,
/// 预定时间限制,格式:1_20_00,含义:需要提前1天,且在20:00分之前才可预定那天的门票。若不传则表示不限制预定时间。0_24_00表示在当前的24点前预定都可以,等效于不限制预定时间。
#[serde(rename = "reserve_limit_rule")]
pub reserve_limit_rule: Option<String>,
/// sku列表。新增商品时必填。整个sku_list会作为整体更新。
#[serde(rename = "sku_list")]
pub sku_list: Option<Vec<SkuList>>,
/// 销售方式,0=普通库存,1=日历库存。对于普通库存入参sku维度的价格库存,对于日历库存需要在pdd.goods.child.sku.edit入参child_sku维度的价格库存后再提交。编辑商品时不允许修改。
#[serde(rename = "sku_type")]
pub sku_type: Option<i32>,
/// 提交后上下架状态,0=上架;1=保持原样。表示编辑商品并提交后商品的上下架状态,不传时默认为0,上架。
#[serde(rename = "sync_goods_operate")]
pub sync_goods_operate: Option<i32>,
}
/// 门票商品新建及更新
#[derive(Serialize, Deserialize, Debug, Default)]
pub struct GoodsProperties {
/// 父规格id,仅对于销售属性入参
#[serde(rename = "parent_spec_id")]
pub parent_spec_id: Option<i64>,
/// 引用属性id
#[serde(rename = "ref_pid")]
pub ref_pid: Option<i64>,
/// 规格id,仅对于销售属性入参,和sku中的spec对应
#[serde(rename = "spec_id")]
pub spec_id: Option<i64>,
/// 属性值
#[serde(rename = "value")]
pub value: Option<String>,
/// 属性值单位
#[serde(rename = "value_unit")]
pub value_unit: Option<String>,
/// 属性值id
#[serde(rename = "vid")]
pub vid: Option<i64>,
}
/// 门票商品新建及更新
#[derive(Serialize, Deserialize, Debug, Default)]
pub struct CarouselVideo {
/// 轮播视频id
#[serde(rename = "file_id")]
pub file_id: Option<i64>,
/// 轮播视频url
#[serde(rename = "video_url")]
pub video_url: Option<String>,
}
/// 门票商品新建及更新
#[derive(Serialize, Deserialize, Debug, Default)]
pub struct ChildSkus {
/// 日期。格式:2020-06-01。每个sku最多支持180天。
#[serde(rename = "date")]
pub date: Option<String>,
/// 拼团价,单位为分。
#[serde(rename = "group_price")]
pub group_price: Option<i64>,
/// 库存增减。比如传-10表示将对应的sku库存减10。
#[serde(rename = "quantity_delta")]
pub quantity_delta: Option<i64>,
/// 单买价,单位为分。
#[serde(rename = "single_price")]
pub single_price: Option<i64>,
}
/// 门票商品新建及更新
impl Request for PddTicketGoodsUpload {
fn get_type() -> String {
"pdd.ticket.goods.upload".to_string()
}
fn get_response_name() -> String {
"goods_upload_response".to_string()
}
}