import datetime from zoneinfo import ZoneInfo import orjson import pydash import requests from django.forms import model_to_dict from rest_framework import status from rest_framework.decorators import action from rest_framework.request import Request from rest_framework.response import Response from rest_framework.viewsets import ViewSet from sixGuoDjango import BaseResponse, ResData from wechat_token.token工具包 import sixToken from wechat_数据库.支付订单数据库.商品订单数据 import order订单 class 发货信息录入ViewSets(ViewSet): @action(detail=False, methods=["get", "post", "put", "delete"], url_path="enter_the_order") def 录入用户下单的订单(self, request: Request): """""" self_mini_openid = request.data.get("self_mini_openid", None) # 小程序的openid self_mini_unionid = request.data.get("self_mini_unionid", None) # 小程序的 out_trade_no = request.data.get("out_trade_no", None) # 商家侧的订单号 print("🍎 🍏 🍊 🍎 🍏 🍊 🍎 🍏 🍊 🍎 🍏 🍊 🍎 🍏 ", out_trade_no) 订单对象 = order订单.objects.get(order支付订单号=out_trade_no, order支付状态="支付成功") 商品标题 = pydash.get(obj=model_to_dict(instance=订单对象, fields=None), path="order商品数据.商品标题") mini_token = sixToken.get_mini_token() uri = f"https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token={mini_token}" upload_time = datetime.datetime.now(tz=ZoneInfo("Asia/Shanghai")).isoformat(timespec="seconds") 录入订单数据 = { "order_key": { "order_number_type": 1, # 订单单号类型,用于确认需要上传详情的订单。枚举值1,使用下单商户号和商户侧单号;枚举值2,使用微信支付单号 "mchid": "1700383419", "out_trade_no": out_trade_no, }, "logistics_type": 1, # 物流模式,发货方式枚举值:1、实体物流配送采用快递公司进行实体物流配送形式 2、同城配送 3、虚拟商品,虚拟商品,例如话费充值,点卡等,无实体配送形式 4、用户自提 "delivery_mode": 1, # 发货模式,发货模式枚举值:1、UNIFIED_DELIVERY(统一发货)2、SPLIT_DELIVERY(分拆发货) 示例值: UNIFIED_DELIVERY "shipping_list": [ { "express_company": "EMS", "tracking_no": 订单对象.order物流公司订单编号, "item_desc": "元宝零售", # "contact": {"consignor_contact": "18860891975", "receiver_contact": "18860891970"} }, ], "upload_time": upload_time, # "payer": {"openid": "ohQkD7NJ5EASxdh6ajad4QR_6i78"} "payer": {"openid": self_mini_openid}, } json_data = orjson.dumps(录入订单数据, option=orjson.OPT_SORT_KEYS, ).decode(encoding="utf-8") data = requests.post(url=uri, data=json_data) resData = data.json() # 最后更新物流的状态 订单对象.order物流状态 = order订单.order订单choosies物流状态.待收货.value 订单对象.save() httpResData = BaseResponse(resData=ResData(listData=[""], dictData=resData), ).model_dump() return Response(data=httpResData, status=status.HTTP_200_OK) @action(detail=False, methods=["get", "post", "put", "delete"], url_path="configure_path") def 消息跳转路径设置(self, request: Request): """""" self_user_unionid = request.data.get("self_user_unionid", None) self_mini_openid = request.data.get("self_mini_openid", None) mini_token = sixToken.get_mini_token() data = requests.post(url="https://api.weixin.qq.com/wxa/sec/order/set_msg_jump_path", params={"access_token": mini_token, }, json={"path": "/pages/OrderPages/OrderPages"}, ) print("\n🍎 🍏 🍊 🍎 🍏 🍊 🍎 🍏 🍊 🍎 🍏 🍊 🍎 🍏 \n", data.json()) httpResData = BaseResponse(resData=ResData(listData=[""], dictData={"demo": "xiaozizi"}), ).model_dump() return Response(data=httpResData, status=status.HTTP_200_OK) @action(detail=False, methods=["get", "post", "put", "delete"], url_path="notifyConfirmReceive") def 确认收货提醒(self, request: Request): """如你已经从你的快递物流服务方获知到用户已经签收相关商品,可以通过该接口提醒用户及时确认收货,以提高资金结算效率,每个订单仅可调用一次。""" self_user_unionid = request.data.get("self_user_unionid", None) self_mini_openid = request.data.get("self_mini_openid", None) mini_token = sixToken.get_mini_token() requests.post(url="https://api.weixin.qq.com/wxa/sec/order/notify_confirm_receives", params={"access_token": mini_token, }) httpResData = BaseResponse(resData=ResData(listData=[""], dictData={"demo": "xiaozizi"}), ).model_dump() return Response(data=httpResData, status=status.HTTP_200_OK)