终於走完完整的订单处理了,0rz
一样Review一下流程
会用到的资料库资料表:
Table Name | 功能 |
---|---|
shopping_cart | 购物车 |
cart_items | 购物车内品项 |
product_category | 产品类型 |
products | 产品资讯 |
payment_log | 付款资讯 |
orders | 订单纪录 |
tester.py 建立订单
def init_orders(dbpm:DBPm, id=os.environ['Me'], yes=False):
if(not yes):yes = askyes()
if(not yes):return False
scid = dbpm.INS_QUY_SC(id)
print(f"检查购物车:{scid}")
o_flag = True
prodlist = []
tot_price = 0
shopping_list = dbpm.QUY_Shopping_Cart_by_scid(scid)
if(not shopping_list):
return False
for prod in shopping_list:
# print(f"商品:{prod[0]}, 数量:{prod[1]}")
current_quantity = dbpm.QUY_Prod_Quantity_by_pid(prod[0])
if(current_quantity - prod[1] < 0):
dbpm.UPD_Cart_items(scid, prod[0], current_quantity)
o_flag = False
else:
new_quantity = current_quantity - prod[1]
dbpm.UPD_Prod_Quantity(prod[0], new_quantity)
product_name, product_price = dbpm.QUY_Prod_Name_and_Price_by_pid(prod[0])
prodlist.append(f"{product_name} * {prod[1]}")
tot_price = tot_price + product_price * prod[1]
if(not o_flag):
return False
# 锁定购物车
dbpm.UPD_Shopping_Cart_lock_bY_scid(True, scid)
# 建立订单
oid = dbpm.INS_Order(os.environ['Me'], scid, ostatus="初始化订单")
# 建立信用卡付款交易编号
paid = dbpm.INS_payment_req('C-1', tot_price)
neworder = APIModel.ReqOrderCreate(ShopNo=os.environ['ShopNo'], OrderNo=oid, Amount=tot_price*100, \
PrdtName='IT铁人赛虚拟商店', ReturnURL=os.environ['ReturnURL'], BackendURL=os.environ['BackendURL'], PayType="C")
msg = GenApi.OrderCreate(neworder)
# print(msg)
print(f"建立订单: 编号:{msg.OrderNo}:{prodlist}, 请款金额 = {tot_price}, 付款ID:{paid}, {msg.Description}", {msg.CardParam.CardPayURL})
if(msg):
if(msg.Status == 'S'):
dbpm.UPD_payment_bypaid(paid=paid, tsno=msg.TSNo, ts_decp=msg.Description, ts_status=True, cardpayurl=msg.CardParam.CardPayURL)
dbpm.UPD_Order_by_oid(paid=paid, ostatus="已产生付款请求", oid=oid)
return True
else:
dbpm.UPD_payment_bypaid(paid=paid, tsno=msg.TSNo, ts_decp=msg.Description, ts_status=False, cardpayurl=msg.CardParam.CardPayURL)
dbpm.UPD_Order_by_oid(paid=paid, ostatus="产生付款请求失败", oid=oid)
return False
此时发生如下变动:
接下来将取出付款资讯给使用者,假设使用者已完成付款,会从两个方式接收到PayToken
@app.route('/funBIZ_backend', methods=['POST'])
def funBIZ_route():
# app.logger.debug(f"headers:{dict(request.headers)}")
content = request.json
# app.logger.debug(f"content:{content}")
if(content['ShopNo'] == os.environ['ShopNo']):
resp = FunBizApi.OrderPayQuery(PayToken=content['PayToken'])
Handler.OrderPayQueryHandler(resp)
return jsonify({'Status':'S'})
else:
return jsonify({'Status':'F'})
@app.route('/order-summary', methods=['POST'])
def order_summary_route():
# app.logger.debug(f"headers:{dict(request.headers)}")
content = request.form
# app.logger.debug(f"content:{content}")
if(content.get('ShopNo') == os.environ['ShopNo']):
resp = FunBizApi.OrderPayQuery(PayToken=content.get('PayToken'))
Handler.OrderPayQueryHandler(resp)
return jsonify({'order-summary':'S'})
进行验证
util/OrderHandler.py
def OrderPayQueryHandler(resp:APIModel.ResOrderPayQuery):
app.logger.debug(f"ResOrderPayQuery:{resp}")
payinfo = resp.TSResultContent
if(payinfo.Status != 'S'):
dbpm.UPD_payment_bytsno(ispaid=False, paytoken=resp.PayToken, tsno=payinfo.TSNo, aptype=payinfo.APType)
app.logger.info(f"订单付款失败, 订单编号:{payinfo.OrderNo} - {resp.Description}")
dbpm.UPD_Order_status_by_oid(ostatus=f"付款失败-{resp.Description}", oid = payinfo.OrderNo)
else:
dbpm.UPD_payment_bytsno(ispaid=True, paytoken=resp.PayToken, tsno=payinfo.TSNo, aptype=payinfo.APType)
app.logger.info(f"订单付款成功, 订单编号:{payinfo.OrderNo} - {resp.Description}")
dbpm.UPD_Order_status_by_oid(ostatus=f"付款成功-{resp.Description}", oid = payinfo.OrderNo)
资料库的控制,可以从这里找到,就不贴出来占版面了
产生订单有一些逻辑问题,也没有rollback机制,有空必须要改改,看剩下还有几天吧,今天大致跑完了主要功能,还有商品展示跟接上Line要做
<<: JavaScript学习日记 : Day25 - Set
>>: Day 25 阿里云上运行Kubernetes 1 - ACK
苏格拉底的名言:"我知道我甚麽都不知道!" 但是,如果没有人把这句话记录下来,大...
注:发文日和截图的日期不一定是同一天,所以价格计算上和当日不同,是很正常的。 声明:这一系列文章并无...
注:本文同步刊载在Medium,若习惯Medium的话亦可去那边看呦! 因为按照惯例,第三十天主要会...
tailwindcss 是新世代的框架,常常拿来跟 Bootstrap 比较 套句老师上课说的话,单...
Gin's Item Structure |-app |-common 公共方法 |-display...