Files
sixGuoDjango/wechat_项目工具包/小程序交易管理服务/小程序交易订单管理工具.py
T

103 lines
6.9 KiB
Python
Raw Normal View History

2026-08-02 14:07:04 +08:00
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="描述")
2026-08-06 20:39:45 +08:00
def 消息跳转路径设置(self, ):
"""如你已经在小程序内接入平台提供的确认收货组件,可以通过该接口设置发货消息及确认收货消息的跳转动作,
用户点击发货消息时会直接进入你的小程序订单列表页面或详情页面进行确认收货,进一步优化用户体验"""
pass
mini_token = sixToken.get_mini_token()
uri = f"https://api.weixin.qq.com/wxa/sec/order/set_msg_jump_path?access_token={mini_token}"
2026-08-02 14:07:04 +08:00
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-08-06 20:39:45 +08:00
print("发起确认交易调用了")
2026-08-02 14:07:04 +08:00
# 快递签收时间设定为 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)
2026-08-06 20:39:45 +08:00
print(postData.json())
2026-08-02 14:07:04 +08:00
# 当请求发送后, 因为只能发送一次,所以需要直接更新状态,
更新对象 = order订单.objects.get(order支付微信官方订单号=order支付微信官方订单号)
更新对象.order物流状态 = "待用户确认收货"
更新对象.save()
2026-08-06 20:39:45 +08:00
print("发起确认交易调用成功了")
2026-08-02 14:07:04 +08:00
if __name__ == "__main__":
pass
# miniTransaction交易管理服务工具().查询订单发货状态(order支付商家侧订单号="OAT01KYDFM1E8NS7DXRX18RRYVR52")
miniTransaction交易管理服务工具().发货信息录入(order支付商家侧订单号="OAT01KYNF9MXZ0CZ8A7Q0R3TBS55E")