auto_test_dev/YiMao/businessFunc/ClientApiLib.py

297 lines
14 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()
''' 1- without sessionid '''
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"---url: {url}---")
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()
''' 2- sessionid must be started first '''
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))
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"
logging.info(f"---加购商品请求体payload: {payload}---")
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, AddGoodsResp):
''' 退购 商品
:param GetGoodsInfoList:
:param LoginData:
:param AddGoodsResp:
:return:
'''
import random
logging.info("========== [退购 商品] delete_cart_goods ==========")
delGoodsList, existGoodsList = [], []
for add_goods_info in AddGoodsResp["data"]["orderItemList"]:
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 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_lList = []
for goods_data in GoodsDataList:
goods_dict = {}
goods_dict["inputCode"] = goods_data["data"]["inputCode"]
goods_dict["qty"] = goods_data["data"]["qty"]
goods_dict["weight"] = int(goods_data["data"]["weight"])
goods_param_lList.append(goods_dict)
payload = json.dumps({"goodsParamList": goods_param_lList})
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()
if __name__ == '__main__':
ymc = YMClientApi()
''' 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()