• 多种支付实现(只需要添加, 修改类方法)


    urls.py

    from django.conf.urls import url
    from django.contrib import admin
    from app01.views import user,banner,goods,categroy,order
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^user/wxapp/login', user.Login.as_view()),
        url(r'^banner/list', banner.List.as_view()),
        url(r'^hotgoods/list', goods.HoteGoods.as_view()),
        url(r'^category/all', categroy.List.as_view()),
        url(r'^goods/list', goods.List.as_view()),
        url(r'^goods/detail', goods.Detail.as_view()),
        url(r'^order/create', order.Create.as_view()),    # 支付
        url(r'^order/notify/<paymethod>', order.Notify.as_view()),    # 支付回调
    ]

    views/order.py

    import importlib
    
    class Create(APIView):
        def post(self,request):
            ...
             # pay_method = 'Wxpay'    假设用户传入的是微信支付方法
             try:
                   # pay_file是对象
                   pay_file = importlib.import_module(f'app01.Pay.{pay_method}')  # 此方法将字符串作为路径导入
                   pay_class = getattr(pay_file,pay_method)
                   data = pay_class().pay(order_data)
             except:
                   return Response({'code':201,'msg':'未知支付方式'})
                
             # 1对接小程序支付
             # 2我们要用celery去定时检查,改订单在指定时间内有没有支付,没有支付,取消订单,回滚库存
    
             return Response({'code':200,'msg':'ok','data':data})
                
                
    class Notify(APIView):    # 处理支付回调,因为每种支付方式返回数据不同,处理方式放在Pay文件下的各个类中
        def post(self,request,paymethod):
            pay_file = importlib.import_module(f'app01.Pay.{paymethod}')
            pay_class = getattr(pay_file,paymethod)
            data = pay_class().notify(request.data)
            if data['status']=='success':
                models.Order.objects.filter(order_id=data['order_id']).update(pay_status=1)
                return Response(data['print'])

    Pay/Alipay.py

    class Alipay():
        def pay(self,order_data):
            # 统一下单方法
            pass
    
            # 回调地址:
            notify_url = 'http://127.0.0.1:8000/order/notify/<Alipay>'
        def notify(self,notify_data):
            if notify_data['success']:
                # notify_data['order_id']表示商城订单
                data = {'status':'success','order_id':notify_data['order_id'],'print':'0000'}#自定义返回参数
                return data
  • 相关阅读:
    gluoncv faster_rcnn 参数修改
    gluoncv 训练自己的数据集,进行目标检测
    Java面试题及答案2020最新版!
    阿里巴巴Java开发手册泰山版下载
    Java基础之如何取舍Joda与 Java8 日期库
    深入理解Java虚拟机3——垃圾回收
    剖析Java OutOfMemoryError异常
    教你如何理解JAVA的I/O类库
    Java源码解读系列(一):ArrayList
    Java 并发之 Executor 框架
  • 原文地址:https://www.cnblogs.com/ludingchao/p/12554554.html
Copyright © 2020-2023  润新知