创建订单,订单查询

parent 11de885d
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
# @Email : acepengxiong@163.com # @Email : acepengxiong@163.com
# @Software : PyCharm # @Software : PyCharm
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
from flask import jsonify from flask import jsonify, make_response, request
from app.config.errors import Errors from app.config.errors import Errors
...@@ -43,3 +43,13 @@ def add_errorhandler(app): ...@@ -43,3 +43,13 @@ def add_errorhandler(app):
response.status_code = error.status_code response.status_code = error.status_code
return response return response
@app.before_request
def before_request():
request.return_success = {'return_code': 0, 'message': 'ok'}
@app.after_request
def after_request(response):
response.headers['content-type'] = "application/json"
return response
...@@ -6,12 +6,14 @@ ...@@ -6,12 +6,14 @@
# @Email : acepengxiong@163.com # @Email : acepengxiong@163.com
# @Software : PyCharm # @Software : PyCharm
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
import json
from flask_restful import Resource, reqparse from flask_restful import Resource, reqparse
from flask import request, jsonify from flask import request
from app.api import app from app.api import app
from app.controller.errorhandler import CustomFlaskErr from app.controller.errorhandler import CustomFlaskErr
from app.config.errors import Errors from app.config.errors import Errors
from app.service import order_service
class TopUpOrder(Resource): class TopUpOrder(Resource):
...@@ -23,15 +25,22 @@ class TopUpOrder(Resource): ...@@ -23,15 +25,22 @@ class TopUpOrder(Resource):
def get(self): def get(self):
""".""" """."""
raise CustomFlaskErr(Errors.USER_ALREADY_EXISTS) # raise CustomFlaskErr(Errors.USER_ALREADY_EXISTS)
self.parser.add_argument('product_id', type=str, required=True, help='商品ID不能为空') self.parser.add_argument('user_id', type=str, required=True, help='用户ID不能为空')
args = self.parser.parse_args() args = self.parser.parse_args()
print(args) data = order_service.TopUpOrderService().get_order(args)
return {'data': 'world'} resp = request.return_success
resp['data'] = data
return resp
def post(self): def post(self):
""".""" """."""
pass self.parser.add_argument('user_id', type=str, required=True, help='用户ID不能为空')
self.parser.add_argument('amount', type=int, required=True, help='订单总额不能为空')
self.parser.add_argument('pay_method', type=int, required=True, help='支付方式不能为空')
args = self.parser.parse_args()
order_service.TopUpOrderService().create_order(args)
return request.return_success
def put(self, id): def put(self, id):
""".""" """."""
...@@ -51,15 +60,97 @@ class ConsumeOrder(Resource): ...@@ -51,15 +60,97 @@ class ConsumeOrder(Resource):
def get(self): def get(self):
""".""" """."""
self.parser.add_argument('product_id', type=str, required=True,help='商品ID不能为空') self.parser.add_argument('user_id', type=str, required=True, help='用户ID不能为空')
args = self.parser.parse_args()
data = order_service.CurriculumOrderService().get_order(args)
resp = request.return_success
resp['data'] = data
return resp
def post(self):
"""."""
self.parser.add_argument('prod_type', type=int, required=True, help='商品类型不能为空')
self.parser.add_argument('prod_id', type=str, required=True, help='商品ID不能为空')
self.parser.add_argument('prod_name', type=str, required=True, help='商品名称不能为空')
self.parser.add_argument('prod_quantity', type=int, required=True, help='商品数量不能为空')
self.parser.add_argument('user_id', type=str, required=True, help='用户ID不能为空')
self.parser.add_argument('pay_method', type=int, required=True, help='支付方式不能为空')
args = self.parser.parse_args()
order_service.CurriculumOrderService().create_order(args)
return request.return_success
def put(self, id):
"""."""
pass
def delete(self, id):
"""."""
pass
class TopUpOrderNotify(Resource):
"""充值订单支付通知."""
def __init__(self):
"""."""
self.parser = reqparse.RequestParser()
def get(self):
"""."""
# raise CustomFlaskErr(Errors.USER_ALREADY_EXISTS)
self.parser.add_argument('user_id', type=str, required=True, help='用户ID不能为空')
args = self.parser.parse_args() args = self.parser.parse_args()
print(args) data = order_service.TopUpOrderService().get_order(args)
return {'data': 'world'} resp = request.return_success
resp['data'] = data
return resp
def post(self): def post(self):
"""."""
self.parser.add_argument('user_id', type=str, required=True, help='用户ID不能为空')
self.parser.add_argument('amount', type=int, required=True, help='订单总额不能为空')
self.parser.add_argument('pay_method', type=int, required=True, help='支付方式不能为空')
args = self.parser.parse_args()
order_service.TopUpOrderService().create_order(args)
return request.return_success
def put(self, id):
"""."""
pass
def delete(self, id):
""".""" """."""
pass pass
class ConsumeOrderNotify(Resource):
"""消费订单支付通知."""
def __init__(self):
"""."""
self.parser = reqparse.RequestParser()
def get(self):
"""."""
self.parser.add_argument('user_id', type=str, required=True, help='用户ID不能为空')
args = self.parser.parse_args()
data = order_service.CurriculumOrderService().get_order(args)
resp = request.return_success
resp['data'] = data
return resp
def post(self):
"""."""
self.parser.add_argument('prod_type', type=int, required=True, help='商品类型不能为空')
self.parser.add_argument('prod_id', type=str, required=True, help='商品ID不能为空')
self.parser.add_argument('prod_name', type=str, required=True, help='商品名称不能为空')
self.parser.add_argument('prod_quantity', type=int, required=True, help='商品数量不能为空')
self.parser.add_argument('user_id', type=str, required=True, help='用户ID不能为空')
self.parser.add_argument('pay_method', type=int, required=True, help='支付方式不能为空')
args = self.parser.parse_args()
order_service.CurriculumOrderService().create_order(args)
return request.return_success
def put(self, id): def put(self, id):
""".""" """."""
pass pass
......
...@@ -17,7 +17,7 @@ class AccountTopupOrder(Base, BaseModel): ...@@ -17,7 +17,7 @@ class AccountTopupOrder(Base, BaseModel):
"""账户探普币充值表""" """账户探普币充值表"""
__tablename__ = 'account_topup_order' __tablename__ = 'account_topup_order'
id = Column(String(64), default=__tablename__ + str(int(time.time()*10000)), primary_key=True) id = Column(String(64), primary_key=True)
order_no = Column(String(50), comment='订单号') order_no = Column(String(50), comment='订单号')
transaction_serial_no = Column(String(50), server_default='', comment='交易流水号') transaction_serial_no = Column(String(50), server_default='', comment='交易流水号')
user_id = Column(String(64), comment='用户ID') user_id = Column(String(64), comment='用户ID')
......
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
# @Email : acepengxiong@163.com # @Email : acepengxiong@163.com
# @Software : PyCharm # @Software : PyCharm
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
import datetime
from sqlalchemy.ext.declarative import declarative_base, declared_attr from sqlalchemy.ext.declarative import declarative_base, declared_attr
Base = declarative_base() Base = declarative_base()
...@@ -16,5 +18,4 @@ class BaseModel: ...@@ -16,5 +18,4 @@ class BaseModel:
pass pass
def to_dict(self): def to_dict(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns} return {c.name: getattr(self, c.name).strftime("%Y-%m-%d %H:%M:%S") if isinstance(getattr(self, c.name), datetime.datetime) else getattr(self, c.name) for c in self.__table__.columns}
...@@ -16,7 +16,7 @@ class CurriculumOrder(Base, BaseModel): ...@@ -16,7 +16,7 @@ class CurriculumOrder(Base, BaseModel):
"""课程订单表""" """课程订单表"""
__tablename__ = 'curriculum_order' __tablename__ = 'curriculum_order'
id = Column(String(64), default=__tablename__ + str(int(time.time()*10000)), primary_key=True) id = Column(String(64), primary_key=True)
order_no = Column(String(50), comment='订单号') order_no = Column(String(50), comment='订单号')
transaction_serial_no = Column(String(50), server_default='', comment='交易流水号') transaction_serial_no = Column(String(50), server_default='', comment='交易流水号')
prod_type = Column(String(200), comment='商品类型1:栏目 3:直播 4:视频 5 音频') prod_type = Column(String(200), comment='商品类型1:栏目 3:直播 4:视频 5 音频')
......
...@@ -970,7 +970,7 @@ class CurriculumRel(Base, BaseModel): ...@@ -970,7 +970,7 @@ class CurriculumRel(Base, BaseModel):
delete_tag = Column(INTEGER(1), nullable=False, comment='删除标识') delete_tag = Column(INTEGER(1), nullable=False, comment='删除标识')
class CurriculumRe(Base, BaseModel): class CurriculumRes(Base, BaseModel):
__tablename__ = 'curriculum_res' __tablename__ = 'curriculum_res'
__table_args__ = {'comment': '课程资源'} __table_args__ = {'comment': '课程资源'}
......
...@@ -15,4 +15,7 @@ def add_route(api): ...@@ -15,4 +15,7 @@ def add_route(api):
api.add_resource(TopUpOrder, '/tamp_order/micro_shop/topUpOrder') api.add_resource(TopUpOrder, '/tamp_order/micro_shop/topUpOrder')
# 消费订单 # 消费订单
api.add_resource(ConsumeOrder, '/tamp_order/micro_shop/consumeOrder') api.add_resource(ConsumeOrder, '/tamp_order/micro_shop/consumeOrder')
# 充值订单支付通知
api.add_resource(TopUpOrderNotify, '/tamp_order/micro_shop/topUpOrderNotify')
# 消费订单支付通知
api.add_resource(ConsumeOrderNotify, '/tamp_order/micro_shop/consumeOrderNotify')
...@@ -6,16 +6,65 @@ ...@@ -6,16 +6,65 @@
# @Email : acepengxiong@163.com # @Email : acepengxiong@163.com
# @Software : PyCharm # @Software : PyCharm
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
from app.model.curriculum_order import OrderInfo import time
from app.api.engine import tamp_pay_session, tamp_user_session
from app.model.account_topup_order import AccountTopupOrder
from app.model.curriculum_order import CurriculumOrder
from app.model.tamp_user_models import CurriculumPrice, CurriculumColumn, CurriculumRes
class OrderService:
class TopUpOrderService:
"""""" """"""
def __init__(self): def __init__(self):
pass pass
def create_order(self): def get_order(self, args):
pass res = tamp_pay_session.query(AccountTopupOrder).filter(AccountTopupOrder.user_id==args['user_id']).all()
return [r.to_dict() for r in res]
def create_order(self, args):
args['order_no'] = time.strftime('%Y%m%d', time.localtime(time.time())) + str(int(time.time() * 100000))
args['id'] = AccountTopupOrder.__tablename__ + str(int(time.time() * 100000))
args['amount'] = args['amount'] * 100
order_info = AccountTopupOrder(**args)
tamp_pay_session.add(order_info)
tamp_pay_session.commit()
tamp_pay_session.close()
return True
def get_order(self):
class CurriculumOrderService:
""""""
def __init__(self):
pass pass
def get_order(self, args):
"""."""
curriculum_column = tamp_user_session.query(CurriculumColumn).all()
curriculum_res = tamp_user_session.query(CurriculumRes).all()
res = tamp_pay_session.query(CurriculumOrder).filter(CurriculumOrder.user_id == args['user_id']).all()
curriculum_column = {r.id: r.to_dict() for r in curriculum_column}
curriculum_res = {r.id: r.to_dict() for r in curriculum_res}
orders = [r.to_dict() for r in res]
for order in orders:
if order['prod_type'] == '1':
order['prod_info'] = curriculum_column.get(order['prod_id'], None)
elif order['prod_type'] in ['3', '4', '5']:
order['prod_info'] = curriculum_res.get(order['prod_id'], None)
return orders
def create_order(self, args):
args['order_no'] = time.strftime('%Y%m%d', time.localtime(time.time())) + str(int(time.time() * 100000))
amount = tamp_user_session.query(CurriculumPrice.price).filter(CurriculumPrice.rel_id == args['prod_id']).first()[0]
args['id'] = CurriculumOrder.__tablename__ + str(int(time.time()*100000))
args['amount'] = amount * args['prod_quantity']
order_info = CurriculumOrder(**args)
tamp_pay_session.add(order_info)
tamp_pay_session.commit()
return True
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
from alipay import AliPay from alipay import AliPay
import ssl import ssl
import time import time
from urllib.parse import urlparse, parse_qs, unquote
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# Constants # Constants
...@@ -75,19 +76,22 @@ def init_alipay(notify_path='/webservice/notify'): ...@@ -75,19 +76,22 @@ def init_alipay(notify_path='/webservice/notify'):
return alipay return alipay
def prePay(subject, out_trade_no, total_amount, notify_path='/webservice/notify', return_path='/home/order'): def prePay(subject, out_trade_no, total_amount, notify_path='/webservice/notify'):
"""创建预付订单.""" """创建预付订单."""
result = init_alipay(notify_path).api_alipay_trade_app_pay( result = init_alipay(notify_path).api_alipay_trade_app_pay(
subject=subject, subject=subject,
out_trade_no=out_trade_no, out_trade_no=out_trade_no,
total_amount=total_amount, total_amount=total_amount,
return_url=URL_PREFIX + return_path # return_url=URL_PREFIX + return_path
) )
if not result: if not result:
return False return False
pay_url = 'https://openapi.alipay.com/gateway.do?' + result result = unquote(result)
print(pay_url) # res = dict(parse_qs(result))
return pay_url # res = {k: v[0] for k, v in res.items()}
print(result)
# pay_url = 'https://openapi.alipay.com/gateway.do?' + result
return result
def alipay_transfer(): def alipay_transfer():
"""转账""" """转账"""
...@@ -103,8 +107,8 @@ def alipay_transfer(): ...@@ -103,8 +107,8 @@ def alipay_transfer():
return result return result
if __name__== '__main__': if __name__== '__main__':
out_trade_no = '201812102324324134138' out_trade_no = '202011252324324134124'
subject = 'APP支付测试' subject = 'APP支付测试'
total_amount = 0.01 total_amount = 0.01
remote_addr = '101.95.188.178' remote_addr = '101.95.188.178'
prePay(subject, out_trade_no, total_amount, notify_path='/webservice/notify', return_path='/home/order') prePay(subject, out_trade_no, total_amount, notify_path='/tamp_order/micro_shop/topUpOrderNotify')
\ No newline at end of file
...@@ -126,6 +126,6 @@ if __name__ == '__main__': ...@@ -126,6 +126,6 @@ if __name__ == '__main__':
total_fee = 0.01 total_fee = 0.01
remote_addr = '101.95.188.178' remote_addr = '101.95.188.178'
wx = WXPay(out_trade_no, body, total_fee, remote_addr) wx = WXPay(out_trade_no, body, total_fee, remote_addr)
params = {'prepay_id': wx.prepay_id, 'sign': wx.paySign} params = {'app_id': wx.appid, 'noncestr': wx.nonce_str, 'mch_id': wx.mch_id, 'prepay_id': wx.prepay_id, 'sign': wx.paySign, 'timestamp': wx.timeStamp}
print(params) print(params)
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment