163 lines
6.2 KiB
Python
163 lines
6.2 KiB
Python
import datetime
|
|||
|
|
|
||
|
|
import jmespath
|
||
|
|
import orjson
|
||
|
|
import requests
|
||
|
|
from django.core.handlers.wsgi import WSGIRequest
|
||
|
|
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.routers import SimpleRouter
|
||
|
|
from rest_framework.viewsets import ViewSet
|
||
|
|
|
||
|
|
from wechat_第三方接口.顺丰物流.顺丰参数 import sfToken
|
||
|
|
|
||
|
|
|
||
|
|
class SF顺丰业务接口ViewSets(ViewSet):
|
||
|
|
|
||
|
|
@action(detail=False, methods=["get", "post", "put", "delete"], url_path="order_create")
|
||
|
|
def 快递下订单接口(self, request: WSGIRequest | Request):
|
||
|
|
"""
|
||
|
|
:param request:
|
||
|
|
:return:
|
||
|
|
"""
|
||
|
|
print('============')
|
||
|
|
|
||
|
|
requestID = f"SF{datetime.date.strftime(datetime.datetime.now(), format="%Y%m%d%H%M%S%f")}"
|
||
|
|
|
||
|
|
accessToken = sfToken()
|
||
|
|
沙箱环境 = f"https://sfapi-sbox.sf-express.com/std/service"
|
||
|
|
sftimestamp = str(int(datetime.datetime.now().timestamp()))
|
||
|
|
cargoDetails托寄物信息 = [{"name": "物品", "count": 1}]
|
||
|
|
寄件人 = {
|
||
|
|
"contactType": 1,
|
||
|
|
"company": "1",
|
||
|
|
"contact": "元宝",
|
||
|
|
"mobile": "13800138000",
|
||
|
|
"country": "CN",
|
||
|
|
"province": "江苏省",
|
||
|
|
"city": "泰州市",
|
||
|
|
"county": "海陵区",
|
||
|
|
"address": "城西街道任景路603号"
|
||
|
|
}
|
||
|
|
收件人 = {
|
||
|
|
"contactType": 2,
|
||
|
|
"company": "2",
|
||
|
|
"contact": "大帅",
|
||
|
|
"mobile": "13800138001",
|
||
|
|
"country": "CN",
|
||
|
|
"province": "四川省",
|
||
|
|
"city": "成都市",
|
||
|
|
"county": "新都区",
|
||
|
|
"address": "桂湖街道一社16号"
|
||
|
|
}
|
||
|
|
msgData = {
|
||
|
|
# 响应报文的语言,缺省值为zh-CN
|
||
|
|
"language": "zh-CN",
|
||
|
|
"parcelQty": 1,
|
||
|
|
# 客户订单号,重复使用订单号时返回第一次下单成功时的运单信息
|
||
|
|
"orderId": f"SFOD{datetime.datetime.strftime(datetime.datetime.now(), "%Y%m%d%H%M%S%f")}",
|
||
|
|
# 托寄物信息
|
||
|
|
"cargoDetails": cargoDetails托寄物信息,
|
||
|
|
"contactInfoList": [寄件人, 收件人],
|
||
|
|
"isReturnRoutelabel": 1,
|
||
|
|
"isGenWaybillNo": 1,
|
||
|
|
"payMethod": 1,
|
||
|
|
"isDocall": 0,
|
||
|
|
"monthlyCard": "7551234567"
|
||
|
|
}
|
||
|
|
formData = {
|
||
|
|
"serviceCode": "EXP_RECE_CREATE_ORDER",
|
||
|
|
"accessToken": accessToken,
|
||
|
|
"timestamp": sftimestamp,
|
||
|
|
"partnerID": "MDSKJJ1KDLJN",
|
||
|
|
"requestID": requestID,
|
||
|
|
"msgData": orjson.dumps(msgData).decode(encoding="utf-8")
|
||
|
|
}
|
||
|
|
response_data = requests.post(
|
||
|
|
url=沙箱环境, data=formData,
|
||
|
|
headers={"Content-Type": "application/x-www-form-urlencoded", },
|
||
|
|
)
|
||
|
|
apiResultData = jmespath.search(data=response_data.json(), expression="apiResultData")
|
||
|
|
return Response(data=orjson.loads(apiResultData), status=status.HTTP_200_OK)
|
||
|
|
|
||
|
|
@action(detail=False, methods=["get", "post", "put", "delete"], url_path="order_update")
|
||
|
|
def 订单确认取消接口(self, request: WSGIRequest | Request):
|
||
|
|
"""
|
||
|
|
:param request:
|
||
|
|
:return:
|
||
|
|
"""
|
||
|
|
uri = f"https://sfapi-sbox.sf-express.com/std/service"
|
||
|
|
accessToken = sfToken()
|
||
|
|
sftimestamp = str(int(datetime.datetime.now().timestamp()))
|
||
|
|
requestID = datetime.datetime.strftime(datetime.datetime.now(), "%Y%m%d%H%M%S%f")
|
||
|
|
msgData = {
|
||
|
|
"dealType": 1,
|
||
|
|
"orderId": "SFOD20251126214101523682",
|
||
|
|
# "totalHeight": 29.98,
|
||
|
|
# "totalLength": 29.98,
|
||
|
|
# "totalVolume": 26946.035992000005,
|
||
|
|
# "totalWeight": 2.09,
|
||
|
|
# "totalWidth": 29.98,
|
||
|
|
"waybillNoInfoList": [
|
||
|
|
{
|
||
|
|
"waybillNo": "SF7444700285553",
|
||
|
|
"waybillType": 1
|
||
|
|
}
|
||
|
|
]
|
||
|
|
}
|
||
|
|
formData = {
|
||
|
|
"serviceCode": "EXP_RECE_UPDATE_ORDER",
|
||
|
|
"accessToken": accessToken,
|
||
|
|
"timestamp": sftimestamp,
|
||
|
|
"partnerID": "MDSKJJ1KDLJN",
|
||
|
|
"requestID": requestID,
|
||
|
|
"msgData": orjson.dumps(msgData).decode(encoding="utf-8")
|
||
|
|
}
|
||
|
|
response_data = requests.post(
|
||
|
|
url=uri, data=formData,
|
||
|
|
headers={"Content-Type": "application/x-www-form-urlencoded", "charset": "UTF-8"},
|
||
|
|
)
|
||
|
|
print(response_data.json(), "=========")
|
||
|
|
res = response_data.json()
|
||
|
|
apiResultData = jmespath.search(data=res, expression="apiResultData")
|
||
|
|
apiResultData = orjson.loads(apiResultData)
|
||
|
|
return Response(data=apiResultData, status=status.HTTP_200_OK)
|
||
|
|
|
||
|
|
@action(detail=False, methods=["get", "post", "put", "delete"], url_path="order_search_resp")
|
||
|
|
def 订单结果查询接口(self, request: WSGIRequest | Request):
|
||
|
|
"""
|
||
|
|
:param request:
|
||
|
|
:return:
|
||
|
|
"""
|
||
|
|
uri = f"https://sfapi-sbox.sf-express.com/std/service"
|
||
|
|
accessToken = sfToken()
|
||
|
|
sftimestamp = str(int(datetime.datetime.now().timestamp()))
|
||
|
|
requestID = datetime.datetime.strftime(datetime.datetime.now(), "%Y%m%d%H%M%S%f")
|
||
|
|
msgData = {
|
||
|
|
"searchType": "1",
|
||
|
|
"orderId": "SFOD20251126214101523682",
|
||
|
|
"language": "zh-cn"
|
||
|
|
}
|
||
|
|
formData = {
|
||
|
|
"serviceCode": "EXP_RECE_SEARCH_ORDER_RESP",
|
||
|
|
"accessToken": accessToken,
|
||
|
|
"timestamp": sftimestamp,
|
||
|
|
"partnerID": sfID,
|
||
|
|
"requestID": requestID,
|
||
|
|
"msgData": orjson.dumps(msgData).decode(encoding="utf-8")
|
||
|
|
}
|
||
|
|
response_data = requests.post(
|
||
|
|
url=uri, data=formData,
|
||
|
|
headers={"Content-Type": "application/x-www-form-urlencoded", "charset": "UTF-8"},
|
||
|
|
)
|
||
|
|
res = response_data.json()
|
||
|
|
apiResultData = jmespath.search(data=res, expression="apiResultData")
|
||
|
|
apiResultData = orjson.loads(apiResultData)
|
||
|
|
return Response(data=apiResultData, status=status.HTTP_200_OK)
|
||
|
|
|
||
|
|
|
||
|
|
SF顺丰业务接口ViewSetsRouter = SimpleRouter()
|
||
|
|
SF顺丰业务接口ViewSetsRouter.register(prefix="", viewset=SF顺丰业务接口ViewSets, basename="")
|