sc-common-interface 1.0__tar.gz → 1.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sc-common-interface-1.0 → sc-common-interface-1.0.2}/PKG-INFO +1 -1
- sc-common-interface-1.0.2/sc_common_interface/PostCommonInterface.py +610 -0
- {sc-common-interface-1.0 → sc-common-interface-1.0.2}/sc_common_interface.egg-info/PKG-INFO +1 -1
- {sc-common-interface-1.0 → sc-common-interface-1.0.2}/sc_common_interface.egg-info/requires.txt +1 -0
- {sc-common-interface-1.0 → sc-common-interface-1.0.2}/setup.py +3 -1
- sc-common-interface-1.0/sc_common_interface/PostCommonInterface.py +0 -64
- {sc-common-interface-1.0 → sc-common-interface-1.0.2}/sc_common_interface/__init__.py +0 -0
- {sc-common-interface-1.0 → sc-common-interface-1.0.2}/sc_common_interface.egg-info/SOURCES.txt +0 -0
- {sc-common-interface-1.0 → sc-common-interface-1.0.2}/sc_common_interface.egg-info/dependency_links.txt +0 -0
- {sc-common-interface-1.0 → sc-common-interface-1.0.2}/sc_common_interface.egg-info/top_level.txt +0 -0
- {sc-common-interface-1.0 → sc-common-interface-1.0.2}/setup.cfg +0 -0
|
@@ -0,0 +1,610 @@
|
|
|
1
|
+
import requests
|
|
2
|
+
import json
|
|
3
|
+
from jsonpath import jsonpath
|
|
4
|
+
import time
|
|
5
|
+
import random
|
|
6
|
+
import hmac
|
|
7
|
+
from hashlib import sha1
|
|
8
|
+
|
|
9
|
+
def create_general_post(data):
|
|
10
|
+
"""创建普通贴文销售,返回响应和贴文销售ID
|
|
11
|
+
sc_common_interface
|
|
12
|
+
platform:"FACEBOOK"、"INSTAGRAM"、"FB_GROUP"
|
|
13
|
+
patternModel:
|
|
14
|
+
WITH_SPU_MATCH:模式4-留言包含 商品编号+规
|
|
15
|
+
INCLUDE_MATCH:模式1-留言包含 关键字 或 关键字+数量
|
|
16
|
+
WITH_QTY_MATCH:模式2-留言包含 关键字+数量
|
|
17
|
+
EXACT_MATCH:模式3-留言只有 关键字 或 关键字+数量
|
|
18
|
+
title 不是必填
|
|
19
|
+
"""
|
|
20
|
+
env = data["env"]
|
|
21
|
+
platform = data["platform"]
|
|
22
|
+
patternModel = data["patternModel"]
|
|
23
|
+
headers = data["headers"]
|
|
24
|
+
title = "接口自动化创建的普通贴文%d"%int(time.time())
|
|
25
|
+
if "title" in data:
|
|
26
|
+
title = data["title"]
|
|
27
|
+
url = "%s/api/posts/post/sales/create"%env
|
|
28
|
+
body = {
|
|
29
|
+
"platform": platform,
|
|
30
|
+
"type": 1,
|
|
31
|
+
"platforms": [
|
|
32
|
+
platform
|
|
33
|
+
],
|
|
34
|
+
"title": title,
|
|
35
|
+
"patternModel": patternModel
|
|
36
|
+
}
|
|
37
|
+
response = requests.post(url,headers=headers,json=body).json()
|
|
38
|
+
# print(response)
|
|
39
|
+
sales_id = response["data"]["id"]
|
|
40
|
+
return response,sales_id
|
|
41
|
+
|
|
42
|
+
def create_commerce_post(data):
|
|
43
|
+
"""创建留言串销售贴文,返回响应和贴文销售ID
|
|
44
|
+
platform:"FACEBOOK"、"INSTAGRAM"、"FB_GROUP"
|
|
45
|
+
patternModel:
|
|
46
|
+
INCLUDE_MATCH:模式1-留言包含 关键字 或 关键字+数量
|
|
47
|
+
WITH_QTY_MATCH:模式2-留言包含 关键字+数量
|
|
48
|
+
EXACT_MATCH:模式3-留言只有 关键字 或 关键字+数量
|
|
49
|
+
WITH_SPU_MATCH:模式4-留言包含 商品编号+规
|
|
50
|
+
title 不是必填
|
|
51
|
+
"""
|
|
52
|
+
env = data["env"]
|
|
53
|
+
headers = data["headers"]
|
|
54
|
+
platform = data["platform"]
|
|
55
|
+
patternModel = data["patternModel"]
|
|
56
|
+
title = "接口自动化创建的留言串销售贴文%d" % int(time.time())
|
|
57
|
+
if "title" in data:
|
|
58
|
+
title = data["title"]
|
|
59
|
+
url = "%s/api/posts/post/sales/create"%env
|
|
60
|
+
body = {
|
|
61
|
+
"platform": platform,
|
|
62
|
+
"type": 1,
|
|
63
|
+
"platforms": [
|
|
64
|
+
platform
|
|
65
|
+
],
|
|
66
|
+
"title": title,
|
|
67
|
+
"patternModel": patternModel,
|
|
68
|
+
"postSubType": "COMMERCE_STACK"
|
|
69
|
+
}
|
|
70
|
+
response = requests.post(url,headers=headers,json=body).json()
|
|
71
|
+
# print(response)
|
|
72
|
+
sales_id = response["data"]["id"]
|
|
73
|
+
return response,sales_id
|
|
74
|
+
|
|
75
|
+
def get_channel_info(data):
|
|
76
|
+
"""
|
|
77
|
+
获取串接的渠道信息
|
|
78
|
+
:param data: platform:"FACEBOOK"、"INSTAGRAM"、"FB_GROUP"
|
|
79
|
+
:return:
|
|
80
|
+
"""
|
|
81
|
+
env = data["env"]
|
|
82
|
+
headers = data["headers"]
|
|
83
|
+
platform = data["platform"]
|
|
84
|
+
url = "%s/api/posts/post/sales/channels?platform=%s"%(env,platform)
|
|
85
|
+
res = requests.get(url, headers=headers).json()
|
|
86
|
+
page_id = res["data"][0]["platformChannelId"]
|
|
87
|
+
page_name = res["data"][0]["platformChannelName"]
|
|
88
|
+
group_id = res["data"][0]["groupId"]
|
|
89
|
+
return page_id,page_name,group_id
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def create_fb_text_post(data):
|
|
93
|
+
"""
|
|
94
|
+
创建fb、fb group纯文本贴文
|
|
95
|
+
:param data: fb group 创建贴文时,pageId为group_id
|
|
96
|
+
:return:post_pid 为贴文在post数据库的ID,取消和编辑贴文时会使用到
|
|
97
|
+
"""
|
|
98
|
+
page_id, page_name, group_id = get_channel_info(data)
|
|
99
|
+
env = data["env"]
|
|
100
|
+
headers = data["headers"]
|
|
101
|
+
platform = data["platform"]
|
|
102
|
+
sales_id = data["sales_id"]
|
|
103
|
+
postDescription = "一天天工作这么忙,烦死了%d"%int(time.time())
|
|
104
|
+
if postDescription in data:
|
|
105
|
+
postDescription = data["postDescription"]
|
|
106
|
+
if platform == "FB_GROUP":
|
|
107
|
+
page_id = group_id
|
|
108
|
+
url = "%s/api/posts/post/%s/post"%(env,sales_id)
|
|
109
|
+
body = {"postDescription":postDescription,"platform":platform,
|
|
110
|
+
"url":[],"mediaFbid":[],"pageId":page_id}
|
|
111
|
+
response = requests.post(url,headers=headers,json=body).json()
|
|
112
|
+
post_id = response["data"]["post_id"]
|
|
113
|
+
post_pid = response["data"]["id"]
|
|
114
|
+
return post_id,post_pid,response
|
|
115
|
+
|
|
116
|
+
def search_post_product(data):
|
|
117
|
+
"""
|
|
118
|
+
查询可添加的商品,只查询前10个,和查询openApi/proxy/v1/products不一样,这个接口经过post组装关键字返回
|
|
119
|
+
:param data:
|
|
120
|
+
:return:
|
|
121
|
+
"""
|
|
122
|
+
env = data["env"]
|
|
123
|
+
headers = data["headers"]
|
|
124
|
+
url = "%s/api/posts/common/product/key/spu/list?page=1&searchType=ALL&pageSize=10"%env
|
|
125
|
+
response = requests.get(url, headers=headers).json()
|
|
126
|
+
productSpuKeyVos = response["data"]["productSpuKeyVos"][0]
|
|
127
|
+
skuKeys = productSpuKeyVos["skuKeys"]
|
|
128
|
+
spuId = productSpuKeyVos["spuId"]
|
|
129
|
+
return skuKeys,spuId,response
|
|
130
|
+
|
|
131
|
+
def search_oa_product(data):
|
|
132
|
+
"""
|
|
133
|
+
查询OA的商品,并返回响应
|
|
134
|
+
:param data:
|
|
135
|
+
:return:
|
|
136
|
+
"""
|
|
137
|
+
env = data["env"]
|
|
138
|
+
headers = data["headers"]
|
|
139
|
+
url = "%s/openApi/proxy/v1/products?page=1&per_page=4"%env
|
|
140
|
+
response = requests.get(url, headers=headers).json()
|
|
141
|
+
return response
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def model_one_add_product(data):
|
|
147
|
+
"""
|
|
148
|
+
贴文销售模式1-模式3添加商品,只添加第一个商品到贴文
|
|
149
|
+
:param data:
|
|
150
|
+
:return:
|
|
151
|
+
"""
|
|
152
|
+
env = data["env"]
|
|
153
|
+
headers = data["headers"]
|
|
154
|
+
sales_id = data["sales_id"]
|
|
155
|
+
url = "%s/api/posts/post/sales/%s/products"%(env,sales_id)
|
|
156
|
+
skuKeys, spuId, response = search_post_product(data)
|
|
157
|
+
skuList = []
|
|
158
|
+
body = {}
|
|
159
|
+
if skuKeys != None:
|
|
160
|
+
for index, sku in enumerate(skuKeys):
|
|
161
|
+
skuId = sku["skuId"]
|
|
162
|
+
spuId = sku["spuId"]
|
|
163
|
+
sku_data = {}
|
|
164
|
+
sku_data["skuId"] = skuId
|
|
165
|
+
sku_data["missCommonKey"] = False
|
|
166
|
+
sku_data["keyList"] = ["模式1关键字%d" % index]
|
|
167
|
+
skuList.append(sku_data)
|
|
168
|
+
# print(skuList)
|
|
169
|
+
if skuList == []:
|
|
170
|
+
body = {
|
|
171
|
+
"spuList": [{"spuId": spuId, "missCommonKey": "false", "customNumbers": [], "keyList": ["无规格商品关键字"]}]}
|
|
172
|
+
else:
|
|
173
|
+
body = {
|
|
174
|
+
"spuList": [{"spuId": spuId, "missCommonKey": "false", "customNumbers": [], "skuList": skuList}]}
|
|
175
|
+
response = requests.post(url, headers=headers, json=body).json()
|
|
176
|
+
return response
|
|
177
|
+
|
|
178
|
+
def model_four_add_product(data):
|
|
179
|
+
"""
|
|
180
|
+
贴文销售模式4添加商品,只添加第一个商品到贴文
|
|
181
|
+
:param data:
|
|
182
|
+
:return:
|
|
183
|
+
"""
|
|
184
|
+
env = data["env"]
|
|
185
|
+
headers = data["headers"]
|
|
186
|
+
sales_id = data["sales_id"]
|
|
187
|
+
url = "%s/api/posts/post/sales/%s/products"%(env,sales_id)
|
|
188
|
+
skuKeys, spuId, response = search_post_product(data)
|
|
189
|
+
skuList = []
|
|
190
|
+
if skuKeys != None:
|
|
191
|
+
for index, sku in enumerate(skuKeys):
|
|
192
|
+
skuId = sku["skuId"]
|
|
193
|
+
spuId = sku["spuId"]
|
|
194
|
+
sku_data = {}
|
|
195
|
+
sku_data["skuId"] = skuId
|
|
196
|
+
sku_data["missCommonKey"] = False
|
|
197
|
+
skuList.append(sku_data)
|
|
198
|
+
# print(skuList)
|
|
199
|
+
customNumbers = "模式4接口关键字下单"
|
|
200
|
+
body = {}
|
|
201
|
+
if skuList == []:
|
|
202
|
+
body = {"spuList": [
|
|
203
|
+
{"spuId": spuId, "missCommonKey": "true", "customNumbers": [customNumbers], "customNumber": customNumbers}]}
|
|
204
|
+
else:
|
|
205
|
+
body = {"spuList": [
|
|
206
|
+
{"spuId": spuId, "missCommonKey": "false", "customNumbers": [customNumbers], "customNumber": customNumbers,
|
|
207
|
+
"skuList": skuList}]}
|
|
208
|
+
response = requests.post(url, headers=headers, json=body).json()
|
|
209
|
+
return response
|
|
210
|
+
|
|
211
|
+
def modify_post_schedule(data):
|
|
212
|
+
"""
|
|
213
|
+
修改贴文排程时间
|
|
214
|
+
:param data: start_time若没有传则默认给当前时间,end_time若没有传则默认是永远有效
|
|
215
|
+
:return:
|
|
216
|
+
"""
|
|
217
|
+
env = data["env"]
|
|
218
|
+
headers = data["headers"]
|
|
219
|
+
sales_id = data["sales_id"]
|
|
220
|
+
start_time = int(time.time() * 1000)
|
|
221
|
+
end_time = 32503611599000
|
|
222
|
+
if "start_time" in data:
|
|
223
|
+
start_time = data["start_time"]
|
|
224
|
+
if "end_time" in data:
|
|
225
|
+
end_time = data["end_time"]
|
|
226
|
+
url = "%s/api/posts/post/sales/schedule/%s"%(env,sales_id)
|
|
227
|
+
body = {"start_time": start_time, "end_time": end_time}
|
|
228
|
+
response = requests.put(url,headers=headers,json=body).json()
|
|
229
|
+
return response
|
|
230
|
+
|
|
231
|
+
def publish_post(data):
|
|
232
|
+
"""启用贴文"""
|
|
233
|
+
env = data["env"]
|
|
234
|
+
headers = data["headers"]
|
|
235
|
+
sales_id = data["sales_id"]
|
|
236
|
+
#启用前先修改排程时间,若没有传时间,则按默认值设置
|
|
237
|
+
modify_post_schedule(data)
|
|
238
|
+
url = "%s/api/posts/post/sales/publish/%s"%(env,sales_id)
|
|
239
|
+
response = requests.put(url, headers=headers).json()
|
|
240
|
+
return response
|
|
241
|
+
|
|
242
|
+
def get_post_info(data):
|
|
243
|
+
"""
|
|
244
|
+
获取贴文信息
|
|
245
|
+
:param data:
|
|
246
|
+
:return: 贴文全部信息,若需要调用后再过滤
|
|
247
|
+
"""
|
|
248
|
+
env = data["env"]
|
|
249
|
+
headers = data["headers"]
|
|
250
|
+
sales_id = data["sales_id"]
|
|
251
|
+
url = "%s/api/posts/post/sales/%s?fieldScopes=DETAILS,PRODUCT_NUM," \
|
|
252
|
+
"SALES_CONFIG,LOCK_INVENTORY,PRODUCT_LIST"%(env,sales_id)
|
|
253
|
+
response = requests.get(url, headers=headers).json()
|
|
254
|
+
return response
|
|
255
|
+
|
|
256
|
+
def get_post_product_keyword(data):
|
|
257
|
+
"""获取贴文返回第一个商品的关键字"""
|
|
258
|
+
env = data["env"]
|
|
259
|
+
headers = data["headers"]
|
|
260
|
+
sales_id = data["sales_id"]
|
|
261
|
+
url = "%s/api/posts/post/sales/%s?fieldScopes=PRODUCT_LIST" % (env, sales_id)
|
|
262
|
+
response = requests.get(url, headers=headers).json()
|
|
263
|
+
keyword = jsonpath(response,"$..custom_keys_label_str")[0]
|
|
264
|
+
return keyword,response
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
def send_post_comment(data):
|
|
269
|
+
"""
|
|
270
|
+
在贴文下普通留言
|
|
271
|
+
:param data:
|
|
272
|
+
:return:
|
|
273
|
+
"""
|
|
274
|
+
#获取关联的贴文信息-第一则贴文
|
|
275
|
+
response = get_post_info(data)
|
|
276
|
+
related_post_list = response["data"]["related_post_list"][0]
|
|
277
|
+
page_id = related_post_list["page_id"]
|
|
278
|
+
post_id = related_post_list["post_id"]
|
|
279
|
+
stamp = int(time.time())
|
|
280
|
+
num = random.randint(100000, 999999)
|
|
281
|
+
user_id = "488864%d" % int(time.time())
|
|
282
|
+
name = "test留言查息%d" % int(time.time())
|
|
283
|
+
env = data["env"]
|
|
284
|
+
# headers = data["headers"]
|
|
285
|
+
# sales_id = data["sales_id"]
|
|
286
|
+
keyword = "接口测试普通留言"
|
|
287
|
+
if "keyword" in data:
|
|
288
|
+
keyword = data['keyword']
|
|
289
|
+
key = data["key"]
|
|
290
|
+
body = {"object": "page", "entry": [{"id": page_id, "time": stamp, "changes": [{"field": "feed", "value": {
|
|
291
|
+
"from": {"id": user_id, "name": name},
|
|
292
|
+
"post": {"status_type": "added_video", "is_published": True, "updated_time": "2022-11-18T09:57:26+0000",
|
|
293
|
+
"permalink_url": "https://www.facebook.com/permalink.php?story_fbid=pfbid02jLK3e6YdFSXp2DmD7j7vtStLXoBzTi8rxKrp6jFhVMUTTEgz6qvZA8soR9Uwydd8l&id=107977035056574",
|
|
294
|
+
"promotion_status": "inactive", "id": post_id}, "message": keyword, "item": "comment",
|
|
295
|
+
"verb": "add", "post_id": post_id, "comment_id": "%s_%d%d" % (page_id, stamp, num),
|
|
296
|
+
"created_time": stamp, "parent_id": post_id}}]}]}
|
|
297
|
+
url = "%s/facebook/webhook"%env
|
|
298
|
+
sign_text = hmac.new(key.encode("utf-8"), json.dumps(body).encode("utf-8"), sha1)
|
|
299
|
+
signData = sign_text.hexdigest()
|
|
300
|
+
print(signData)
|
|
301
|
+
header = {"Content-Type": "application/json", "x-hub-signature": "sha1=%s" % signData}
|
|
302
|
+
response = requests.post(url, headers=header, data=json.dumps(body))
|
|
303
|
+
return response
|
|
304
|
+
|
|
305
|
+
def get_payment(data):
|
|
306
|
+
"""
|
|
307
|
+
获取店铺的付款方式,默认查询10条
|
|
308
|
+
:param data:
|
|
309
|
+
:return:默认返回第一个支付方式
|
|
310
|
+
"""
|
|
311
|
+
env = data["env"]
|
|
312
|
+
headers = data["headers"]
|
|
313
|
+
url ="%s/openApi/proxy/v1/payments?page=1&per_page=10&include_fields[]=config_data.tappay"%env
|
|
314
|
+
response = requests.get(url, headers=headers).json()
|
|
315
|
+
payment_id = response["data"]["items"][0]["id"]
|
|
316
|
+
return payment_id,response
|
|
317
|
+
|
|
318
|
+
def get_delivery(data):
|
|
319
|
+
"""
|
|
320
|
+
获取店铺的物流方式,默认查询10条
|
|
321
|
+
:param data:
|
|
322
|
+
:return:默认返回第一个物流方式
|
|
323
|
+
"""
|
|
324
|
+
# print("物流data",data)
|
|
325
|
+
env = data["env"]
|
|
326
|
+
headers = data["headers"]
|
|
327
|
+
url = "%s/openApi/proxy/v1/delivery_options?page=1&per_page=10"%env
|
|
328
|
+
response = requests.get(url, headers=headers).json()
|
|
329
|
+
delivery_id = response["data"]["items"][0]["id"]
|
|
330
|
+
return delivery_id,response
|
|
331
|
+
|
|
332
|
+
def get_comment_user(data):
|
|
333
|
+
"""
|
|
334
|
+
查询留言面板的留言用户,查全部,并返回第一个留言用户
|
|
335
|
+
:return:post_user_id,编辑购物车,发送购物车链接需要用到这个值
|
|
336
|
+
"""
|
|
337
|
+
env = data["env"]
|
|
338
|
+
headers = data["headers"]
|
|
339
|
+
sales_id = data["sales_id"]
|
|
340
|
+
url = "%s/api/posts/post/comments"%env
|
|
341
|
+
params = {"pageNo":1,"pageSize":10,"salesId":sales_id}
|
|
342
|
+
response = requests.get(url, headers=headers,params=params).json()
|
|
343
|
+
post_user_id = jsonpath(response, "$..id")[0]
|
|
344
|
+
return post_user_id,response
|
|
345
|
+
|
|
346
|
+
def post_edit_cart(data):
|
|
347
|
+
"""
|
|
348
|
+
编辑购物车,给用户加入查询到的第一个商品:没有排除无库存的情况
|
|
349
|
+
:param data:
|
|
350
|
+
:return:
|
|
351
|
+
"""
|
|
352
|
+
env = data["env"]
|
|
353
|
+
headers = data["headers"]
|
|
354
|
+
sales_id = data["sales_id"]
|
|
355
|
+
post_user_id, __ = get_comment_user(data)
|
|
356
|
+
url = "%s/api/posts/post/sales/%s/user/" \
|
|
357
|
+
"%s/cart/item?skip_reapply_promotion=false"%(env,sales_id,post_user_id)
|
|
358
|
+
response = search_oa_product(data)
|
|
359
|
+
variations = response["data"]["items"][0]["variations"]
|
|
360
|
+
spu_id = response["data"]["items"][0]["id"]
|
|
361
|
+
quantity = 1
|
|
362
|
+
if "quantity" in data:
|
|
363
|
+
quantity = data["quantity"]
|
|
364
|
+
body = {"spu_id": spu_id, "owner_type": "Guest", "quantity": quantity, "type": "product"}
|
|
365
|
+
if variations != []:
|
|
366
|
+
sku_id = variations[0]["id"]
|
|
367
|
+
body = {"spu_id": spu_id, "owner_type": "Guest", "sku_id": sku_id, "quantity": quantity,
|
|
368
|
+
"type": "product"}
|
|
369
|
+
response = requests.post(url, headers=headers, json=body).json()
|
|
370
|
+
return response
|
|
371
|
+
|
|
372
|
+
def manual_order(data):
|
|
373
|
+
"""
|
|
374
|
+
创建会员,若存在则合并会员
|
|
375
|
+
创建订单
|
|
376
|
+
:param data:
|
|
377
|
+
:return:
|
|
378
|
+
"""
|
|
379
|
+
env = data["env"]
|
|
380
|
+
headers = data["headers"]
|
|
381
|
+
phone = "18776343453"
|
|
382
|
+
if "query" in data:
|
|
383
|
+
phone = data["query"]
|
|
384
|
+
__,response = get_comment_user(data)
|
|
385
|
+
# print("留言面板查询返回",response)
|
|
386
|
+
name = jsonpath(response,"$..name")[0]
|
|
387
|
+
user_id = jsonpath(response,"$..psid")[0]
|
|
388
|
+
page_id = jsonpath(response, "$..page_id")[0]
|
|
389
|
+
# 先查询号码或邮箱是否被占有
|
|
390
|
+
url = "%s/openApi/proxy/v1/customers/search?query=%s&per_page=50&search_fields[]=mobile_phone" \
|
|
391
|
+
"&search_fields[]=phones" %(env,phone)
|
|
392
|
+
response = requests.get(url, headers=headers).json()
|
|
393
|
+
items = response["data"]["items"]
|
|
394
|
+
#创建会员
|
|
395
|
+
url = "%s/uc/customers/merge" % env
|
|
396
|
+
body = {"email": "", "mobile_phone": phone, "mobile_phone_country_calling_code": "86",
|
|
397
|
+
"name": name, "page_scoped_id": user_id, "locale_code": None, "country_code": "cn",
|
|
398
|
+
"id": None, "party_channel_id": page_id, "platform": "FACEBOOK", "is_member": True}
|
|
399
|
+
if items != []:
|
|
400
|
+
id = jsonpath(response, "$..id")[0]
|
|
401
|
+
body = {"email": "", "mobile_phone": phone, "mobile_phone_country_calling_code": "86",
|
|
402
|
+
"name": name, "page_scoped_id": user_id, "locale_code": None, "country_code": "cn",
|
|
403
|
+
"id": id, "party_channel_id": page_id, "platform": "FACEBOOK", "is_member": True}
|
|
404
|
+
|
|
405
|
+
res = requests.put(url, headers=headers, json=body).json()
|
|
406
|
+
customer_id = res["data"]["id"]
|
|
407
|
+
#给会员新增物流地址
|
|
408
|
+
rl = "%s/uc/customers/%s" % (env,customer_id)
|
|
409
|
+
postcode = "76653"
|
|
410
|
+
delivery_data = {"delivery_addresses": [
|
|
411
|
+
{"city": "bb", "country": "CN", "postcode": postcode, "recipient_name": name,
|
|
412
|
+
"recipient_phone": phone, "recipient_phone_country_code": "86", "logistic_codes": [],
|
|
413
|
+
"address_1": "aa"}]}
|
|
414
|
+
res = requests.put(url, json=delivery_data, headers=headers).json()
|
|
415
|
+
# print("信息会员物流地址返回",res)
|
|
416
|
+
|
|
417
|
+
# 查询会话ID
|
|
418
|
+
platform = "facebook"
|
|
419
|
+
if "platform" in data:
|
|
420
|
+
platform = data["platform"]
|
|
421
|
+
url = "%s/mc/conversation/id?type=%s&user_id=%s&party_channel_id=%s" % (env,platform,user_id, page_id)
|
|
422
|
+
# param = {"type":"facebook","user_id":vars["user_id"],"party_channel_id":vars["platform_channel_id"]}
|
|
423
|
+
response = requests.get(url, headers=headers).json()
|
|
424
|
+
conversation_id = jsonpath(response, "$.data.id")[0]
|
|
425
|
+
|
|
426
|
+
# 给cart 设置物流 和设置支付方式
|
|
427
|
+
url = "%s/openApi/proxy/v1/internal/mc/api/carts/%s?owner_type=User&cart_uid=%s&created_by=post&skip_reapply_promotion=false&shop_session_id=%s" % (
|
|
428
|
+
env,customer_id, customer_id, user_id)
|
|
429
|
+
delivery_id,__ = get_delivery(data)
|
|
430
|
+
payment_id,__ = get_payment(data)
|
|
431
|
+
body = {"delivery_option_id": delivery_id, "country": "CN", "countryCode": "CN",
|
|
432
|
+
"payment_id": payment_id}
|
|
433
|
+
res = requests.put(url, headers=headers, json = body).json()
|
|
434
|
+
# print("设置cart",res)
|
|
435
|
+
# 成立订单
|
|
436
|
+
url = "%s/manual_order/checkout"%env
|
|
437
|
+
delivery_address = delivery_data["delivery_addresses"][0]
|
|
438
|
+
delivery_address["district"] = None
|
|
439
|
+
delivery_address["key"] = None
|
|
440
|
+
delivery_address["regioncode"] = None
|
|
441
|
+
delivery_address["province"] = None
|
|
442
|
+
delivery_address["address_2"] = None
|
|
443
|
+
delivery_address["country_code"] = "CN"
|
|
444
|
+
body = {"country": "CN", "customer_email": None, "customer_id": customer_id, "customer_name": name,
|
|
445
|
+
"customer_phone": phone, "whatsapp_phone": phone, "delivery_address": delivery_address,
|
|
446
|
+
"delivery_data": {"recipient_name": name, "recipient_phone": phone},
|
|
447
|
+
"delivery_option_id": delivery_id, "display_payment_info": False, "invoice": {}, "lang": "zh-cn",
|
|
448
|
+
"order_remarks": "", "order_tags": [], "payment_id": payment_id,
|
|
449
|
+
"payment_info": "{\"text\":\"\",\"images\":[]}", "send_notification": False, "created_by": "post",
|
|
450
|
+
"created_from": "admin_post", "platform": "FACEBOOK", "conversation_id": conversation_id,
|
|
451
|
+
"merchant_name": "泰国店", "shop_session_id": user_id, "platform_channel_name": "kkk",
|
|
452
|
+
"source_data": {"type": "fb", "source_id": page_id}, "customer_phone_country_code": "86",
|
|
453
|
+
"postcode": postcode}
|
|
454
|
+
res = requests.post(url,headers=headers,json=body).json()
|
|
455
|
+
# print("创建订单返回",res)
|
|
456
|
+
#获取订单ID
|
|
457
|
+
orderNumber = jsonpath(res,"$..orderNumber")[0]
|
|
458
|
+
|
|
459
|
+
return orderNumber,customer_id,res
|
|
460
|
+
|
|
461
|
+
def get_user_conversation_id(data):
|
|
462
|
+
"""
|
|
463
|
+
:return: 会员ID
|
|
464
|
+
"""
|
|
465
|
+
# 查询会话ID
|
|
466
|
+
env = data["env"]
|
|
467
|
+
headers = data["headers"]
|
|
468
|
+
user_id = data["user_id"]
|
|
469
|
+
page_id = data["page_id"]
|
|
470
|
+
platform = "facebook"
|
|
471
|
+
if "platform" in data:
|
|
472
|
+
platform = data["platform"]
|
|
473
|
+
url = "%s/mc/conversation/id?type=%s&user_id=%s&party_channel_id=%s" % (env, platform, user_id, page_id)
|
|
474
|
+
# param = {"type":"facebook","user_id":vars["user_id"],"party_channel_id":vars["platform_channel_id"]}
|
|
475
|
+
response = requests.get(url, headers=headers).json()
|
|
476
|
+
conversation_id = jsonpath(response, "$.data.id")[0]
|
|
477
|
+
return conversation_id
|
|
478
|
+
|
|
479
|
+
def get_user_message(data):
|
|
480
|
+
"""
|
|
481
|
+
获取信息
|
|
482
|
+
:param data:
|
|
483
|
+
:return:
|
|
484
|
+
"""""
|
|
485
|
+
env = data["env"]
|
|
486
|
+
headers = data["headers"]
|
|
487
|
+
# 获取发送的私讯内容
|
|
488
|
+
conversation_id = get_user_conversation_id(data)
|
|
489
|
+
url = "%s/mc/message/%s?create_time="%(env,conversation_id)
|
|
490
|
+
response = requests.get(url,headers=headers).json()
|
|
491
|
+
content = jsonpath(response,"$..content")[0]
|
|
492
|
+
text = ""
|
|
493
|
+
if "message" in json.loads(content):
|
|
494
|
+
text = json.loads(content)["message"]["attachment"]["payload"]["text"]
|
|
495
|
+
return text
|
|
496
|
+
|
|
497
|
+
|
|
498
|
+
def modify_order_status(data):
|
|
499
|
+
"""
|
|
500
|
+
:param data:
|
|
501
|
+
status:订单的状态
|
|
502
|
+
confirmed:已确认
|
|
503
|
+
pending:处理中
|
|
504
|
+
completed:已完成
|
|
505
|
+
cancelled :已取消
|
|
506
|
+
:return:
|
|
507
|
+
"""
|
|
508
|
+
oa_env = data["oa_env"]
|
|
509
|
+
oa_headers = data["oa_headers"]
|
|
510
|
+
status = data["status"]
|
|
511
|
+
# 查询订单id
|
|
512
|
+
global customer_id
|
|
513
|
+
if "customer_id" in data:
|
|
514
|
+
customer_id = data["customer_id"]
|
|
515
|
+
else:
|
|
516
|
+
__,customer_id,__ = manual_order(data)
|
|
517
|
+
url = "%s/v1/orders/search?page=1&per_page=5&customer_id=%s" % (oa_env,customer_id)
|
|
518
|
+
res = requests.get(url, headers=oa_headers).json()
|
|
519
|
+
order_id = jsonpath(res, "$..id")[0]
|
|
520
|
+
# print("订单ID", vars["order_id"])
|
|
521
|
+
# 修改订单状态为-已确认
|
|
522
|
+
url = "%s/v1/orders/%s/status" % (oa_env,order_id)
|
|
523
|
+
body = {
|
|
524
|
+
"status": status,
|
|
525
|
+
"mail_notify": False
|
|
526
|
+
}
|
|
527
|
+
res = requests.patch(url, headers=oa_headers, json=body).json()
|
|
528
|
+
|
|
529
|
+
def modify_order_payment_status(data):
|
|
530
|
+
"""
|
|
531
|
+
:param data:
|
|
532
|
+
status:订单的状态
|
|
533
|
+
pending:未付款
|
|
534
|
+
completed:已付款
|
|
535
|
+
refunding :退款中
|
|
536
|
+
refunded:已退款
|
|
537
|
+
partially_refunded:部分退款
|
|
538
|
+
:return:
|
|
539
|
+
"""
|
|
540
|
+
oa_env = data["oa_env"]
|
|
541
|
+
oa_headers = data["oa_headers"]
|
|
542
|
+
status = data["status"]
|
|
543
|
+
# 查询订单id
|
|
544
|
+
global customer_id
|
|
545
|
+
if "customer_id" in data:
|
|
546
|
+
customer_id = data["customer_id"]
|
|
547
|
+
else:
|
|
548
|
+
__,customer_id,__ = manual_order(data)
|
|
549
|
+
url = "%s/v1/orders/search?page=1&per_page=5&customer_id=%s" % (oa_env,customer_id)
|
|
550
|
+
res = requests.get(url, headers=oa_headers).json()
|
|
551
|
+
order_id = jsonpath(res, "$..id")[0]
|
|
552
|
+
# print("订单ID", vars["order_id"])
|
|
553
|
+
# 修改订单状态为-已确认
|
|
554
|
+
url = "%s/v1/orders/%s/order_payment_status" % (oa_env,order_id)
|
|
555
|
+
body = {
|
|
556
|
+
"status": status,
|
|
557
|
+
"mail_notify": False
|
|
558
|
+
}
|
|
559
|
+
res = requests.patch(url, headers=oa_headers, json=body).json()
|
|
560
|
+
|
|
561
|
+
def modify_order_delivery_status(data):
|
|
562
|
+
"""
|
|
563
|
+
:param data:
|
|
564
|
+
status:订单的状态
|
|
565
|
+
pending:备货中
|
|
566
|
+
shipping:发货中
|
|
567
|
+
shipped :已发货
|
|
568
|
+
arrived:已到达
|
|
569
|
+
collected:已取货
|
|
570
|
+
returned:已退货
|
|
571
|
+
returning:退款中
|
|
572
|
+
:return:
|
|
573
|
+
"""
|
|
574
|
+
oa_env = data["oa_env"]
|
|
575
|
+
oa_headers = data["oa_headers"]
|
|
576
|
+
status = data["status"]
|
|
577
|
+
# 查询订单id
|
|
578
|
+
global customer_id
|
|
579
|
+
if "customer_id" in data:
|
|
580
|
+
customer_id = data["customer_id"]
|
|
581
|
+
else:
|
|
582
|
+
__,customer_id,__ = manual_order(data)
|
|
583
|
+
url = "%s/v1/orders/search?page=1&per_page=5&customer_id=%s" % (oa_env,customer_id)
|
|
584
|
+
res = requests.get(url, headers=oa_headers).json()
|
|
585
|
+
order_id = jsonpath(res, "$..id")[0]
|
|
586
|
+
# print("订单ID", vars["order_id"])
|
|
587
|
+
# 修改订单状态为-已确认
|
|
588
|
+
url = "%s/v1/orders/%s/order_delivery_status" % (oa_env,order_id)
|
|
589
|
+
body = {
|
|
590
|
+
"status": status,
|
|
591
|
+
"mail_notify": False
|
|
592
|
+
}
|
|
593
|
+
res = requests.patch(url, headers=oa_headers, json=body).json()
|
|
594
|
+
|
|
595
|
+
def delete_post(data):
|
|
596
|
+
env = data["env"]
|
|
597
|
+
headers = data["headers"]
|
|
598
|
+
sales_id = data["sales_id"]
|
|
599
|
+
url = "%s/api/posts/post/sales/%s"%(env,sales_id)
|
|
600
|
+
res = requests.delete(url, headers=headers).json()
|
|
601
|
+
return res
|
|
602
|
+
|
|
603
|
+
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
|
|
607
|
+
if __name__=="__main__":
|
|
608
|
+
pass
|
|
609
|
+
|
|
610
|
+
|
|
@@ -2,12 +2,14 @@ from setuptools import setup, find_packages
|
|
|
2
2
|
|
|
3
3
|
setup(
|
|
4
4
|
name='sc-common-interface',
|
|
5
|
-
version='1.0',
|
|
5
|
+
version='1.0.2',
|
|
6
6
|
description='SC公用的接口',
|
|
7
7
|
author='river',
|
|
8
8
|
packages=find_packages(),
|
|
9
9
|
install_requires=[
|
|
10
10
|
"requests>=2.0.0",
|
|
11
|
+
"jsonpath>=0.82",
|
|
12
|
+
|
|
11
13
|
|
|
12
14
|
],
|
|
13
15
|
)
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import requests
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
def create_general_post(env,headers,platform,title,patternModel):
|
|
5
|
-
"""创建贴文,返回响应和贴文销售ID
|
|
6
|
-
platform:"FACEBOOK"、"INSTAGRAM"、"FB_GROUP"
|
|
7
|
-
patternModel:
|
|
8
|
-
WITH_SPU_MATCH:模式4-留言包含 商品编号+规
|
|
9
|
-
INCLUDE_MATCH:模式1-留言包含 关键字 或 关键字+数量
|
|
10
|
-
WITH_QTY_MATCH:模式2-留言包含 关键字+数量
|
|
11
|
-
EXACT_MATCH:模式3-留言只有 关键字 或 关键字+数量
|
|
12
|
-
"""
|
|
13
|
-
url = "%s/api/posts/post/sales/create"%env
|
|
14
|
-
data = {
|
|
15
|
-
"platform": platform,
|
|
16
|
-
"type": 1,
|
|
17
|
-
"platforms": [
|
|
18
|
-
platform
|
|
19
|
-
],
|
|
20
|
-
"title": title,
|
|
21
|
-
"patternModel": patternModel
|
|
22
|
-
}
|
|
23
|
-
response = requests.post(url,headers=headers,json=data).json()
|
|
24
|
-
print(response)
|
|
25
|
-
sales_id = response["data"]["id"]
|
|
26
|
-
return response,sales_id
|
|
27
|
-
|
|
28
|
-
def create_commerce_post(env,headers,platform,title,patternModel):
|
|
29
|
-
"""创建贴文,返回响应和贴文销售ID
|
|
30
|
-
platform:"FACEBOOK"、"INSTAGRAM"、"FB_GROUP"
|
|
31
|
-
patternModel:
|
|
32
|
-
WITH_SPU_MATCH:模式4-留言包含 商品编号+规
|
|
33
|
-
INCLUDE_MATCH:模式1-留言包含 关键字 或 关键字+数量
|
|
34
|
-
WITH_QTY_MATCH:模式2-留言包含 关键字+数量
|
|
35
|
-
EXACT_MATCH:模式3-留言只有 关键字 或 关键字+数量
|
|
36
|
-
"""
|
|
37
|
-
url = "%s/api/posts/post/sales/create"%env
|
|
38
|
-
data = {
|
|
39
|
-
"platform": platform,
|
|
40
|
-
"type": 1,
|
|
41
|
-
"platforms": [
|
|
42
|
-
platform
|
|
43
|
-
],
|
|
44
|
-
"title": title,
|
|
45
|
-
"patternModel": patternModel,
|
|
46
|
-
"postSubType": "COMMERCE_STACK"
|
|
47
|
-
}
|
|
48
|
-
response = requests.post(url,headers=headers,json=data).json()
|
|
49
|
-
# print(response)
|
|
50
|
-
sales_id = response["data"]["id"]
|
|
51
|
-
return response,sales_id
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if __name__=="__main__":
|
|
55
|
-
# env = "https://front-admin.shoplineapp.com"
|
|
56
|
-
# headers = {"Content-Type":"application/json","authorization":"Bearer eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI3YjdiM2E1MzU4M2IwYzlhZGVhODkyZDY3OTJlNTNlMSIsImRhdGEiOnsibWVyY2hhbnRfaWQiOiI2MWIwOTZiZWI3YmVmMTAwMjQ1ZGJkOGIiLCJhcHBsaWNhdGlvbl9pZCI6IjYyN2M3NTBhMDYyMzcwMDAwYWZlNWVmZCJ9LCJpc3MiOiJodHRwczovL2RldmVsb3BlcnMuc2hvcGxpbmVhcHAuY29tIiwiYXVkIjpbXSwic3ViIjoiNjFiMDk2YmViN2JlZjEwMDI0NWRiZDhiIn0.mkq54BMp-20y8oiw0qc9caeUzH-vT6oRkeUCpZrt1jI ","lang":"en"}
|
|
57
|
-
# title = "jjjffff"
|
|
58
|
-
# platform = "FACEBOOK"
|
|
59
|
-
# patternModel = "EXACT_MATCH"
|
|
60
|
-
# res,sales_id = create_general_post(env, headers, platform, title, patternModel)
|
|
61
|
-
# print(res,sales_id)
|
|
62
|
-
a = "新增自定义内容标题1698918524"
|
|
63
|
-
a_list =['新增自定义内容标题1698918833', '新增自定义内容标题1698918797', '新增自定义内容标题1698918524', '新增自定义内容标题1698918300', '新增自定义内容标题1698918056', '新增自定义内容标题1698917855', '自定义内容标题1698914699']
|
|
64
|
-
print(a in a_list )
|
|
File without changes
|
{sc-common-interface-1.0 → sc-common-interface-1.0.2}/sc_common_interface.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{sc-common-interface-1.0 → sc-common-interface-1.0.2}/sc_common_interface.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|