from datetime import datetime from zoneinfo import ZoneInfo import orjson import pydash import requests from pydantic import BaseModel from wechat_token.token工具包 import sixToken from wechat_微信支付证书.江苏六果科技有限公司支付证书.江苏六果科技有限公司支付参数 import sixpay六果科技公司 from wechat_数据库.支付订单数据库.商品订单数据 import order订单 class miniTransaction交易管理服务工具(BaseModel): # demo_必填: int = Field(..., description="描述") # 必传属发生 # demo_可选: Optional[int] = None # 可选值 # demo_默认值: int = Field(default=100001, description="描述") # 有默认值 # demo_联合类型: Literal["xiao", "zizi"] = Field(..., description="描述") def 发货信息录入(self, order支付商家侧订单号, ): pass print("开始调用录入订单信息了") mini_token = sixToken.get_mini_token() order订单对象 = order订单.objects.get(order支付商家侧订单号=order支付商家侧订单号) goods_商品标题: str = pydash.get(obj=pydash.head(order订单对象.order购物车商品数据), path="goods_商品标题") print(goods_商品标题, "00000000000000", order订单对象.order购物车商品数据) print("打印检测 order商家生成的交易订单号", order支付商家侧订单号) print("打印检测 order支付微信官方订单号", order订单对象.order支付微信官方订单号) print("打印检测 order物流公司订单编号", order订单对象.order物流公司订单编号) upload_time_上传时间 = datetime.now(tz=ZoneInfo("Asia/Shanghai")).isoformat(timespec="seconds") uri = f"https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token={mini_token}" 录入订单需要的数据 = { "order_key": { # 订单,需要上传物流信息的订单,必传 "order_number_type": 1, # 订单单号类型,1-商户号单号 2-微信交易单号,必传 "out_trade_no": order支付商家侧订单号, "transaction_id": order订单对象.order支付微信官方订单号, # 原支付交易对应的微信订单号,必传 "mchid": sixpay六果科技公司.mchid, # 支付下单商户的商户号,由微信支付生成并下发,必传 }, "logistics_type": 1, # 物流模式,1-实体物流配送 2-同城配送 3-虚拟商品 4-用户自提,必传 "delivery_mode": 1, # 发货模式,1-UNIFIED_DELIVERY(统一发货)2-SPLIT_DELIVERY(分拆发货),必传 # "is_all_delivered": True, # 分拆发货模式时必填,标识是否已全部发货完成,非必传 "shipping_list": [ # 物流信息列表,支持1~15个物流单,必传 { "tracking_no": order订单对象.order物流公司订单编号, "express_company": "EMS", # 物流公司编码,快递公司ID,参见获取运力 id 列表get_delivery_list,物流快递发货时必填, 示例值: DHL 字符字节限制: [1, 128] "item_desc": goods_商品标题, # 商品信息,例如:微信红包抱枕*1个,限120个字以内 }, ], "upload_time": upload_time_上传时间, # 上传时间,用于标识请求的先后顺序,必传 "payer": { # 支付者信息,必传 "openid": order订单对象.order支付者openid, # 用户在商户appid下的唯一标识,必传 }, } json_data = orjson.dumps(录入订单需要的数据, option=orjson.OPT_SORT_KEYS, ).decode(encoding="utf-8") postData = requests.post(url=uri, data=json_data) print(postData.json(), "00000000000000000") def 查询订单发货状态(self, order支付商家侧订单号): pass mini_token = sixToken.get_mini_token() order订单对象 = order订单.objects.get(order支付商家侧订单号=order支付商家侧订单号) uri = f"https://api.weixin.qq.com/wxa/sec/order/get_order?access_token={mini_token}" 查询订单发货状态需要的数据 = { "transaction_id": order订单对象.order支付微信官方订单号, # 原支付交易对应的微信订单号。否 "merchant_id": sixpay六果科技公司.mchid, # 否 支付下单商户的商户号,由微信支付生成并下发 "merchant_trade_no": order支付商家侧订单号, # 商户系统内部订单号,只能是数字、大小写字母`_-*`且在同一个商户号下唯一。 } postData = requests.post(url=uri, json=查询订单发货状态需要的数据) print(postData.json()) def 确认收货提醒(self, order物流数据, order支付微信官方订单号): pass """这里的调用的时机为: 目前的业务逻辑是,物流的状态更新用户已签收了 , 我会在此时调用户确认接口 用户会收得到一个 确认收货的提示""" mini_token = sixToken.get_mini_token() uri = f"https://api.weixin.qq.com/wxa/sec/order/notify_confirm_receive?access_token={mini_token}" # 快递签收时间设定为 2026-07-24 04:11:24 action_time_签收时间戳 = pydash.get(obj=pydash.head(order物流数据), path="action_time") data = { "transaction_id": order支付微信官方订单号, # 原支付交易对应的微信订单号,非必传 "received_time": action_time_签收时间戳, # 快递签收时间,时间戳形式,必传 } postData = requests.post(url=uri, json=data) # 当请求发送后, 因为只能发送一次,所以需要直接更新状态, 更新对象 = order订单.objects.get(order支付微信官方订单号=order支付微信官方订单号) 更新对象.order物流状态 = "待用户确认收货" 更新对象.save() if __name__ == "__main__": pass # miniTransaction交易管理服务工具().查询订单发货状态(order支付商家侧订单号="OAT01KYDFM1E8NS7DXRX18RRYVR52") miniTransaction交易管理服务工具().发货信息录入(order支付商家侧订单号="OAT01KYNF9MXZ0CZ8A7Q0R3TBS55E")