119 lines
8.5 KiB
Python
119 lines
8.5 KiB
Python
import emoji
|
|
import orjson
|
|
import pydash
|
|
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 DefaultRouter
|
|
from rest_framework.viewsets import ViewSet
|
|
from ulid import ULID
|
|
|
|
from sixGuoDjango import BaseResponse, ResData
|
|
from wechat_微信支付证书.江苏六果科技有限公司支付证书.江苏六果科技有限公司支付参数 import sixpay六果科技公司
|
|
from wechat_数据库.支付订单数据库.商品订单数据 import order订单
|
|
from wechat_数据库.用户数据库.小程序登陆用户 import weiuser
|
|
from wechat_项目工具包.EMS中国邮政.ems邮政 import ems邮政物流工具
|
|
from wechat_项目工具包.微信支付工具包.微信支付类 import paymentCategory, wechatPay
|
|
from wechat_项目工具包.数据库的工具包.更新用户积分 import miniUser用户角色, miniUser积分
|
|
|
|
|
|
class 业务订单接口ViewSets(ViewSet):
|
|
|
|
def 处理积分方法(self, 商家订单号):
|
|
pass
|
|
# 将字符串转为换字典
|
|
order对象 = order订单.objects.get(order支付商家侧订单号=商家订单号) # 拿到当前订单的对象数据
|
|
# 通过订单号,拿到 第一个值:
|
|
order购物车商品列表数据 = pydash.get(obj=pydash.head(order对象.order购物车商品数据), path="推荐积分.商品详情页面分享")
|
|
|
|
def 首单自动注册成为推广员(self, out_trade_no):
|
|
pass
|
|
order对象 = order订单.objects.get(order支付商家侧订单号=out_trade_no)
|
|
|
|
user用户对象 = weiuser.objects.get(unionid=order对象.order支付者unionid)
|
|
six绑定的企微员工对象, sixBool = weiuser.objects.get_or_create(unionid=user用户对象.user_绑定企微UNIONID)
|
|
# 判断用户成为推广员的标准 成为的条件,当前用户绑定的企微员工账号, 必须是同一个区县的
|
|
if user用户对象.user_角色权限 == miniUser用户角色().普通会员 and six绑定的企微员工对象.user_区县 == user用户对象.user_区县:
|
|
# 当前的用户为普通会员 ,这里被调用了说明肯定是下单成功了 , 需要升级为推广员
|
|
print("支付测试成功了,并且能成为推广员")
|
|
user用户对象.user_角色权限 = miniUser用户角色().推广员
|
|
user用户对象.save()
|
|
|
|
@action(detail=False, methods=["post"], url_path="mall")
|
|
def 商城订单支付接口(self, request: Request) -> Response:
|
|
"""前端小程序的用户: 发起支付订单的请求接口"""
|
|
url_pay = "https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi" # 发起请求的链接
|
|
self_mini_openid = request.data.get("self_mini_openid", None)
|
|
self_mini_unionid = request.data.get("self_mini_unionid", None)
|
|
order购物车商品数据 = request.data.get("order购物车商品数据", None)
|
|
order购物车商品数量 = request.data.get("order购物车商品数量", None)
|
|
order购物车商品总价 = request.data.get("order购物车商品总价", None)
|
|
order用户配送地址 = request.data.get("order用户配送地址", None)
|
|
share订单分享者ID = request.data.get("share订单分享者ID", "六果") # 当前是否有上级对象
|
|
order订单类型 = request.data.get("order订单类型", None)
|
|
goods标题 = emoji.replace_emoji(pydash.get(obj=pydash.head(order购物车商品数据), path="goods_商品标题"))
|
|
out_trade_no商家侧的订单号 = f"OAT{ULID()}" # 生成商家侧的订单号
|
|
body = {
|
|
"mchid": paymentCategory.mchid, # 【直连商户号】 直连商户号
|
|
"out_trade_no": out_trade_no商家侧的订单号, # 【商户订单号】 商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一。
|
|
"appid": paymentCategory.appid, # 【公众号 或者 小程序ID】
|
|
"description": goods标题, # 【商品描述】 商品描述要
|
|
"notify_url": "https://six.sixgou.com/six/mall_callbakc/", # 回调地址要
|
|
"amount": {
|
|
# "total": order购物车商品总价, # 【总金额】 订单总金额,单位为分。
|
|
"total": 1, # 【总金额】 订单总金额,单位为分。
|
|
"currency": "CNY", # 【货币类型】 CNY:人民币,境内商户号仅支持人民币。
|
|
}, # 【支付者】 支付者信息。
|
|
"attach": orjson.dumps({"share订单分享者ID": share订单分享者ID, "out_trade_no": out_trade_no商家侧的订单号, }).decode(
|
|
encoding="utf-8"),
|
|
"payer": {
|
|
# "openid": "ohQkD7A-N93kljcFmkCyG6e_D9vg", # 【用户标识】 用户在普通商户AppID下的唯一标识。 下单前需获取到用户的OpenID,详见OpenID获取
|
|
"openid": self_mini_openid, # 【用户标识】 用户在普通商户AppID下的唯一标识。 下单前需获取到用户的OpenID,详见OpenID获取
|
|
},
|
|
} # 请求的数据
|
|
wechat_data = wechatPay(payment=sixpay六果科技公司).getpay_jsapi(uri=url_pay, body_data=body, method="POST")
|
|
payData = pydash.get(obj=wechat_data, path="response")
|
|
order订单对象 = order订单.objects.create(order支付商家侧订单号=out_trade_no商家侧的订单号,
|
|
order购物车商品总价=order购物车商品总价, order购物车商品数据=order购物车商品数据,
|
|
order购物车商品数量=order购物车商品数量,
|
|
order支付数据=body, order支付状态="支付中",
|
|
order订单类型=order订单类型,
|
|
order用户配送地址=order用户配送地址,
|
|
order分享者unionid=share订单分享者ID,
|
|
order支付者openid=self_mini_openid,
|
|
order支付者unionid=self_mini_unionid,
|
|
)
|
|
httpResData = BaseResponse(resData=ResData(listData=[""], dictData=payData), ).model_dump()
|
|
# httpResData = BaseResponse(resData=ResData(listData=[""], dictData={}), ).model_dump()
|
|
return Response(data=httpResData, status=status.HTTP_200_OK)
|
|
|
|
@action(detail=False, methods=["post"], url_path="mall_callbakc")
|
|
def jsapi支付回调测试接口(self, request: Request) -> Response:
|
|
""" 微信支付成功后的回调接口 """
|
|
dict_body = request.data
|
|
wechat_data支付回调数据 = wechatPay(payment=paymentCategory).callBack回调解密(headers=request.headers,
|
|
response_body=dict_body, )
|
|
print("\n 🍎 🍏 🍊 🍎 🍏 \n", wechat_data支付回调数据, )
|
|
out_trade_no商家侧支付订单号 = pydash.get(obj=wechat_data支付回调数据, path="out_trade_no") # 商家侧的订单号
|
|
trade_state_desc = pydash.get(obj=wechat_data支付回调数据, path="trade_state_desc") # 支付回调的支付状态
|
|
transaction_id = pydash.get(obj=wechat_data支付回调数据, path="transaction_id")
|
|
self.首单自动注册成为推广员(out_trade_no=out_trade_no商家侧支付订单号)
|
|
生成商家侧物流的订单号 = f"EMS{ULID()}"
|
|
order订单.objects.filter(order支付商家侧订单号=out_trade_no商家侧支付订单号).update(order支付数据=wechat_data支付回调数据,
|
|
order支付状态=trade_state_desc,
|
|
order物流状态=order订单.order订单choosies物流状态.待揽件.value,
|
|
order物流订单号=生成商家侧物流的订单号,
|
|
order支付微信官方订单号=transaction_id,
|
|
)
|
|
print("打印一下商家的订单号", out_trade_no商家侧支付订单号, transaction_id)
|
|
(miniUser积分(share分享者unionidID="", click点击者unionidID="")
|
|
.add添加好友助力下单返利积分(order支付商家侧订单号=out_trade_no商家侧支付订单号, share积分类型="好友下单"))
|
|
ems邮政物流工具().生成运单(out_trade_no商家侧支付订单号=out_trade_no商家侧支付订单号) # 调用方法,生成真实的物流订单号码;
|
|
httpResData = BaseResponse(resData=ResData(listData=[""], dictData={"demo": "xiaozizi"}), ).model_dump()
|
|
return Response(data=httpResData, status=status.HTTP_200_OK)
|
|
|
|
|
|
业务订单接口ViewSetsViewSetsRouter: DefaultRouter = DefaultRouter()
|
|
业务订单接口ViewSetsViewSetsRouter.register(prefix="", viewset=业务订单接口ViewSets, basename="业务订单接口ViewSets")
|