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")