创建订单,订单查询

parent 11de885d
......@@ -6,7 +6,7 @@
# @Email : acepengxiong@163.com
# @Software : PyCharm
# -----------------------------------------------------------------------------
from flask import jsonify
from flask import jsonify, make_response, request
from app.config.errors import Errors
......@@ -43,3 +43,13 @@ def add_errorhandler(app):
response.status_code = error.status_code
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 @@
# @Email : acepengxiong@163.com
# @Software : PyCharm
# -----------------------------------------------------------------------------
import json
from flask_restful import Resource, reqparse
from flask import request, jsonify
from flask import request
from app.api import app
from app.controller.errorhandler import CustomFlaskErr
from app.config.errors import Errors
from app.service import order_service
class TopUpOrder(Resource):
......@@ -23,15 +25,22 @@ class TopUpOrder(Resource):
def get(self):
"""."""
raise CustomFlaskErr(Errors.USER_ALREADY_EXISTS)
self.parser.add_argument('product_id', type=str, required=True, help='商品ID不能为空')
# raise CustomFlaskErr(Errors.USER_ALREADY_EXISTS)
self.parser.add_argument('user_id', type=str, required=True, help='用户ID不能为空')
args = self.parser.parse_args()
print(args)
return {'data': 'world'}
data = order_service.TopUpOrderService().get_order(args)
resp = request.return_success
resp['data'] = data
return resp
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):
"""."""
......@@ -51,19 +60,101 @@ class ConsumeOrder(Resource):
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()
print(args)
return {'data': 'world'}
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()
data = order_service.TopUpOrderService().get_order(args)
resp = request.return_success
resp['data'] = data
return resp
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
\ No newline at end of file
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):
"""."""
pass
def delete(self, id):
"""."""
pass
......@@ -17,7 +17,7 @@ class AccountTopupOrder(Base, BaseModel):
"""账户探普币充值表"""
__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='订单号')
transaction_serial_no = Column(String(50), server_default='', comment='交易流水号')
user_id = Column(String(64), comment='用户ID')
......
......@@ -6,6 +6,8 @@
# @Email : acepengxiong@163.com
# @Software : PyCharm
# -----------------------------------------------------------------------------
import datetime
from sqlalchemy.ext.declarative import declarative_base, declared_attr
Base = declarative_base()
......@@ -16,5 +18,4 @@ class BaseModel:
pass
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):
"""课程订单表"""
__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='订单号')
transaction_serial_no = Column(String(50), server_default='', comment='交易流水号')
prod_type = Column(String(200), comment='商品类型1:栏目 3:直播 4:视频 5 音频')
......
......@@ -970,7 +970,7 @@ class CurriculumRel(Base, BaseModel):
delete_tag = Column(INTEGER(1), nullable=False, comment='删除标识')
class CurriculumRe(Base, BaseModel):
class CurriculumRes(Base, BaseModel):
__tablename__ = 'curriculum_res'
__table_args__ = {'comment': '课程资源'}
......
......@@ -15,4 +15,7 @@ def add_route(api):
api.add_resource(TopUpOrder, '/tamp_order/micro_shop/topUpOrder')
# 消费订单
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 @@
# @Email : acepengxiong@163.com
# @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):
pass
def create_order(self):
pass
def get_order(self, args):
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
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 @@
from alipay import AliPay
import ssl
import time
from urllib.parse import urlparse, parse_qs, unquote
# -----------------------------------------------------------------------------
# Constants
......@@ -75,19 +76,22 @@ def init_alipay(notify_path='/webservice/notify'):
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(
subject=subject,
out_trade_no=out_trade_no,
total_amount=total_amount,
return_url=URL_PREFIX + return_path
# return_url=URL_PREFIX + return_path
)
if not result:
return False
pay_url = 'https://openapi.alipay.com/gateway.do?' + result
print(pay_url)
return pay_url
result = unquote(result)
# res = dict(parse_qs(result))
# 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():
"""转账"""
......@@ -103,8 +107,8 @@ def alipay_transfer():
return result
if __name__== '__main__':
out_trade_no = '201812102324324134138'
out_trade_no = '202011252324324134124'
subject = 'APP支付测试'
total_amount = 0.01
remote_addr = '101.95.188.178'
prePay(subject, out_trade_no, total_amount, notify_path='/webservice/notify', return_path='/home/order')
\ No newline at end of file
prePay(subject, out_trade_no, total_amount, notify_path='/tamp_order/micro_shop/topUpOrderNotify')
......@@ -126,6 +126,6 @@ if __name__ == '__main__':
total_fee = 0.01
remote_addr = '101.95.188.178'
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)
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