auto_test_dev/YiMao/businessFunc/ClientApiLib.py

342 lines
16 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# !/usr/bin/python
# -*- coding: utf-8 -*-
# @Author:: Arthur Wu
# @Date:: 2024/11/14-14:35
# @Description::
import requests,json, logging
from commons.SignatureYM import SignatureYM2
class YMClientApi(object):
def __init__(self, ShoppingCartMac):
self.Domain = "https://api.test.yimaogo.com/cart"
self.headerss = SignatureYM2(ShoppingCartMac)._headers()
def get_ads_list(self):
logging.info("========== [获取广告列表] get_ads_list ==========")
''' method 1 '''
payload = {}
url = self.Domain + "/v1/ads/list?areaCode&userId&barcode&adsAreaIds=1,2,3,4,5,6"
logging.info(f"---headers: {self.headerss}---")
response = requests.request("GET", url, headers=self.headerss, data=payload)
logging.info(f"-----------接口返回状态码:{response.status_code}")
logging.info(f"-----------接口返回数据:{response.json()}\n\n")
return response.json()
def query_ad_detail(self, ADsId: str):
logging.info("========== [查询广告详情] query_ad_detail ==========")
payload = {}
url = self.Domain + "/v1/ads/{adsId}".replace("{adsId}", str(ADsId))
response = requests.request("GET", url, headers=self.headerss, data=payload)
logging.info(f"-----------接口返回状态码:{response.status_code}")
logging.info(f"-----------接口返回数据:{response.json()}\n\n")
return response.json()
def session_start(self):
logging.info("========== [前置] session_start ==========")
url = self.Domain+"/v1/session/start"
payload = ""
response = requests.request("POST", url, headers=self.headerss, data=payload)
logging.info(f"-----------接口返回状态码:{response.status_code}")
logging.info(f"-----------接口返回数据:{response.json()}\n\n")
def session_end(self):
logging.info("========== [后置] session_end ==========")
url = self.Domain+"/v1/session/end?reason"
payload = {}
response = requests.request("PUT", url, headers=self.headerss, data=payload)
logging.info(f"-----------接口返回状态码:{response.status_code}")
logging.info(f"-----------接口返回数据:{response.json()}\n\n")
def login_app_v2(self, Payload):
'''
1-匿名登录
{"action": 0, "isAnon": True}
2-会员登录
{"action":1,"code":"18052753212","isAnon":False}
:param Payload:
:return:
'''
logging.info("========== [登录] login_app_v2 ==========")
payload = json.dumps(Payload)
url = self.Domain+"/v2/login"
response = requests.request("POST", url, headers=self.headerss, data=payload)
logging.info(f"-----------接口返回状态码:{response.status_code}")
logging.info(f"-----------接口返回数据:{response.json()}\n\n")
return response.json()
def get_login_type(self):
logging.info("========== [获取登录方式] get_login_type ==========")
payload = {}
url = self.Domain+"/v2/login/type?action=1"
response = requests.request("GET", url, headers=self.headerss, data=payload)
logging.info(f"-----------接口返回状态码:{response.status_code}")
logging.info(f"-----------接口返回数据:{response.json()}\n\n")
def get_goods_info(self, InputCode):
logging.info("========== [获取商品信息] get_goods_info ==========")
payload = {}
url = self.Domain+"/v2/shopping/{inputCode}".replace("{inputCode}", str(InputCode))
logging.info(f"\n-----------获取商品信息url{url}\n")
response = requests.request("GET", url, headers=self.headerss, data=payload)
logging.info(f"-----------接口返回状态码:{response.status_code}")
logging.info(f"-----------接口返回数据:{response.json()}\n\n")
return response.json()
def add_cart_goods(self, GoodsInfoData, AddPurchaseQuantity, LoginData):
logging.info("========== [加购 商品] add_retire_purchase ==========")
payload = json.dumps({
"addGoods":[{
"inputCode": GoodsInfoData["data"]["inputCode"],
"isNormalAddPurchase": True,
"qty": int(AddPurchaseQuantity), # AddPurchaseQuantityGoodsInfoData["data"]["qty"]
"weight": int(GoodsInfoData["data"]["weight"]),
}],
"autoSelectCoupon": True,
"coupons": [],
"deleteGoods": [],
"existGoods": [],
"orderNo": LoginData["data"][0]["orderNo"]
}, indent=4, ensure_ascii=False)
url = self.Domain+"/v2/shopping/add/retire/purchase"
response = requests.request("POST", url, headers=self.headerss, data=payload)
logging.info(f"-----------接口返回状态码:{response.status_code}")
logging.info(f"-----------接口返回数据:{response.json()}\n\n")
return response.json()
def delete_cart_goods(self, GetGoodsInfoList, LoginData, AddGoodsRespList):
''' 退购 商品
:param GetGoodsInfoList:
:param LoginData:
:param AddGoodsResp:
:return:
'''
import random
logging.info("========== [退购 商品] delete_cart_goods ==========")
delGoodsList, existGoodsList = [], []
for add_goods_resp in AddGoodsRespList:
# for add_goods_info in AddGoodsResp["data"]["orderItemList"]:
add_goods_info = add_goods_resp["data"]["orderItemList"][0]
exist_goods_dict = {}
exist_goods_dict["inputCode"] = add_goods_info["inputCode"]
exist_goods_dict["isNormalAddPurchase"] = True
exist_goods_dict["qty"] = add_goods_info["qty"]
exist_goods_dict["uuid"] = add_goods_info["uuid"]
if add_goods_info["weight"] > 0:
exist_goods_dict["weight"] = add_goods_info["weight"]
else:
for get_goods_data in GetGoodsInfoList:
if get_goods_data["data"]["inputCode"] == add_goods_info["inputCode"]:
if get_goods_data["data"]["weight"] > 0:
exist_goods_dict["weight"] = get_goods_data["data"]["weight"]
existGoodsList.append(exist_goods_dict)
del_goods_dict = {}
delGoodsInfo = {
"inputCode": "",
"isNormalAddPurchase": True,
"qty": 1,
"weight": 0,
}
delGoodsInfo = random.choice(GetGoodsInfoList)
del_goods_dict["inputCode"] = delGoodsInfo["data"]["inputCode"]
del_goods_dict["isNormalAddPurchase"] = True
del_goods_dict["qty"] = 1
del_goods_dict["weight"] = 0
for goodData in delGoodsList:
if goodData["inputCode"] == del_goods_dict["inputCode"]:
del_goods_dict["uuid"] = goodData["uuid"]
delGoodsList.append(del_goods_dict)
payload = json.dumps({
"addGoods": [],
"autoSelectCoupon": True,
"coupons": [],
"deleteGoods": delGoodsList,
"existGoods": existGoodsList,
"orderNo": LoginData["data"][0]["orderNo"]
})
logging.info(f"-----------退购商品请求体为:{payload}\n")
url = self.Domain + "/v2/shopping/add/retire/purchase"
response = requests.request("POST", url, headers=self.headerss, data=payload)
logging.info(f"-----------接口返回状态码:{response.status_code}")
logging.info(f"-----------接口返回数据:{response.json()}\n\n")
if response.json()["msg"] == '成功':
return json.loads(payload)
def delete_shopping_bag(self, GetGoodsInfoList, LoginData, AddGoodsResp):
''' 退购 购物嗲
:param GetGoodsInfoList:
:param LoginData:
:param AddGoodsResp:
:return:
'''
import random
logging.info("========== [退购 购物袋] delete_shopping_bag ==========")
delGoodsList, existGoodsList = [], []
for add_goods_info in AddGoodsResp["data"]["bagInfoList"]:
exist_goods_dict = {}
exist_goods_dict["inputCode"] = add_goods_info["inputCode"]
exist_goods_dict["isNormalAddPurchase"] = True
exist_goods_dict["qty"] = add_goods_info["qty"]
exist_goods_dict["uuid"] = add_goods_info["uuid"]
if add_goods_info["weight"] > 0:
exist_goods_dict["weight"] = add_goods_info["weight"]
else:
for get_goods_data in GetGoodsInfoList:
if get_goods_data["data"]["inputCode"] == add_goods_info["inputCode"]:
if get_goods_data["data"]["weight"] > 0:
exist_goods_dict["weight"] = get_goods_data["data"]["weight"]
existGoodsList.append(exist_goods_dict)
del_goods_dict = {}
delGoodsInfo = random.choice(GetGoodsInfoList)
del_goods_dict["inputCode"] = delGoodsInfo["data"]["inputCode"]
del_goods_dict["isNormalAddPurchase"] = True
del_goods_dict["qty"] = 1
del_goods_dict["weight"] = 0
for goodData in delGoodsList:
if goodData["inputCode"] == del_goods_dict["inputCode"]:
del_goods_dict["uuid"] = goodData["uuid"]
delGoodsList.append(del_goods_dict)
payload = json.dumps({
"addGoods": [],
"autoSelectCoupon": True,
"coupons": [],
"deleteGoods": delGoodsList,
"existGoods": existGoodsList,
"orderNo": LoginData["data"][0]["orderNo"]
})
url = self.Domain + "/v2/shopping/add/retire/purchase"
response = requests.request("POST", url, headers=self.headerss, data=payload)
logging.info(f"-----------接口返回状态码:{response.status_code}")
logging.info(f"-----------接口返回数据:{response.json()}\n\n")
return response.json()
def get_coupon_list(self):
logging.info("========== [获取优惠券列表] get_coupon_list ==========")
payload = json.dumps({
"code":"4",
"value":""
})
url = self.Domain+"/v1/coupon/list"
response = requests.request("POST", url, headers=self.headerss, data=payload)
logging.info(f"-----------接口返回状态码:{response.status_code}")
logging.info(f"-----------接口返回数据:{response.json()}\n\n")
return response.json()
def receive_coupon(self, CouponListData):
logging.info("========== [领取优惠券] receive_coupon ==========")
CouponList = []
for i in CouponListData["data"]:
CouponList.append(i["name"])
payload = json.dumps({"activityIds": CouponList})
url = self.Domain+"/v1/coupon/receive"
response = requests.request("POST", url, headers=self.headerss, data=payload)
logging.info(f"-----------接口返回状态码:{response.status_code}")
logging.info(f"-----------接口返回数据:{response.json()}\n\n")
return response.json()
def query_coupon_list_user(self):
logging.info("========== [查询优惠券列表] query_coupon_list_user ==========")
payload = {}
url = self.Domain+"/v1/coupon/list/user?state=2&page=0&pageSize=10"
response = requests.request("GET", url, headers=self.headerss, data=payload)
logging.info(f"-----------接口返回状态码:{response.status_code}")
logging.info(f"-----------接口返回数据:{response.json()}\n\n")
return response.json()
def get_cart_goods_info(self, GoodsDataList=[]):
logging.info("========== [获取购物车商品信息] get_cart_goods_info ==========")
# goods_param_list = []
# for goods_data in GoodsDataList:
# goods_dict = {}
# goods_dict["inputCode"] = goods_data["data"]["inputCode"]
# goods_dict["qty"] = int(float((goods_data["data"]["qty"])))
# goods_dict["weight"] = int(goods_data["data"]["weight"])
# goods_param_list.append(goods_dict)
# payload = json.dumps({"goodsParamList": goods_param_list}, indent=4, ensure_ascii=False)
# logging.info(f"-----------请求体为:{payload}")
payload = json.dumps({"goodsParamList": []})
url = self.Domain+"/v2/shopping/cart/goods/info"
response = requests.request("POST", url, headers=self.headerss, data=payload)
logging.info(f"-----------接口返回状态码:{response.status_code}")
logging.info(f"-----------接口返回数据:{response.json()}\n\n")
return response.json()
def request_order_settlement(self, LoginData):
logging.info("========== [请求订单结算] request_order_settlement ==========")
payload = json.dumps({
"orderNo": LoginData["data"][0]["orderNo"],
"setCouponFlag": False,
"setPayMethodFlag": False
})
url = self.Domain+"/v2/shopping/order/settle"
response = requests.request("POST", url, headers=self.headerss, data=payload)
logging.info(f"-----------接口返回状态码:{response.status_code}")
logging.info(f"-----------接口返回数据:{response.json()}\n\n")
return response.json()
def verify_the_goods_through_verification(self):
logging.info("========== [验证商品通过验货] ==========")
payload = json.dumps({
"manualId": 65,
"type": 1,
"barcodes": []
})
url = self.Domain+"/v1/check/goods/update"
response = requests.request("POST", url, headers=self.headerss, data=payload)
logging.info(f"-----------接口返回状态码:{response.status_code}")
logging.info(f"-----------接口返回数据:{response.json()}\n\n")
return response.json()
def traverse_the_barcode_of_the_prod(self, FP):
'''
根据商品Barcode遍历商品信息
:return:
'''
logging.info("========== [根据商品Barcode遍历商品信息] ==========")
'''
1- 遍历读取Barcode
2、根据Barcode遍历请求接口
3、根据Barcode查询情况回写商品信息
'''
def get_barcode_data():
import xlrd
workbook = xlrd.open_workbook(FP)
sheet = workbook.sheet_by_index(0)
first_column = []
for row in range(sheet.nrows):
first_column.append(sheet.cell_value(row, 0))
return first_column
for barcode in get_barcode_data():
logging.info(f"-----------当前Barcode为{barcode}")
if __name__ == '__main__':
ymc = YMClientApi(ShoppingCartMac='')
''' 01- '''
ymc.session_start() # step1session开始
Payload01 = {"action": 0, "isAnon": True}
LoginData = ymc.login_app_v2(Payload01) # step2匿名登录
ymc.get_login_type() # step3获取登录方式
Payload02 = {"action": 1, "code": "17786408673", "isAnon": False}
ymc.login_app_v2(Payload02) # step4切换会员登录
GoodsInfoData = ymc.get_goods_info(InputCode=6924882486100) # step5获取商品信息 ------ 6924882486100
CouponListData = ymc.get_coupon_list() # step6获取优惠券列表
ymc.receive_coupon(CouponListData) # step7领取优惠券
ymc.query_coupon_list_user() # step8查询用户持有的优惠券列表
ymc.add_cart_goods(GoodsInfoData, 1, LoginData) # step9加购商品 ------ 6924882486100
ymc.get_cart_goods_info(GoodsInfoData) # step10获取购物车商品信息
ymc.request_order_settlement(LoginData) # step11请求订单结算
ymc.session_end()