84 lines
5.1 KiB
Python
84 lines
5.1 KiB
Python
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)
|