Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in
Toggle navigation
T
tamp_course_order
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
彭熊
tamp_course_order
Commits
81692534
Commit
81692534
authored
Nov 25, 2020
by
pengxiong@wealthgrow.cn
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
创建订单,订单查询
parent
11de885d
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
2563 additions
and
30 deletions
+2563
-30
errorhandler.py
app/controller/errorhandler.py
+11
-1
order.py
app/controller/order.py
+101
-10
account_topup_order.py
app/model/account_topup_order.py
+1
-1
base.py
app/model/base.py
+3
-2
curriculum_order.py
app/model/curriculum_order.py
+1
-1
tamp_user_models.py
app/model/tamp_user_models.py
+1
-1
version1.py
app/router/version1.py
+4
-1
order_service.py
app/service/order_service.py
+54
-5
alipayWap.py
app/utils/alipay/alipayWap.py
+11
-7
wx_app_pay.py
app/utils/wxpay/wx_app_pay.py
+1
-1
tamp_course_order.log
logs/tamp_course_order.log
+2375
-0
No files found.
app/controller/errorhandler.py
View file @
81692534
...
@@ -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
app/controller/order.py
View file @
81692534
...
@@ -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,19 +60,101 @@ class ConsumeOrder(Resource):
...
@@ -51,19 +60,101 @@ 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
()
args
=
self
.
parser
.
parse_args
()
print
(
args
)
data
=
order_service
.
CurriculumOrderService
()
.
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
(
'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
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
):
def
put
(
self
,
id
):
"""."""
"""."""
pass
pass
def
delete
(
self
,
id
):
def
delete
(
self
,
id
):
"""."""
"""."""
pass
pass
\ No newline at end of file
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
app/model/account_topup_order.py
View file @
81692534
...
@@ -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'
)
...
...
app/model/base.py
View file @
81692534
...
@@ -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
}
app/model/curriculum_order.py
View file @
81692534
...
@@ -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 音频'
)
...
...
app/model/tamp_user_models.py
View file @
81692534
...
@@ -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
CurriculumRe
s
(
Base
,
BaseModel
):
__tablename__
=
'curriculum_res'
__tablename__
=
'curriculum_res'
__table_args__
=
{
'comment'
:
'课程资源'
}
__table_args__
=
{
'comment'
:
'课程资源'
}
...
...
app/router/version1.py
View file @
81692534
...
@@ -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'
)
app/service/order_service.py
View file @
81692534
...
@@ -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
app/utils/alipay/alipayWap.py
View file @
81692534
...
@@ -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
=
'20
1812102324324134138
'
out_trade_no
=
'20
2011252324324134124
'
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
app/utils/wxpay/wx_app_pay.py
View file @
81692534
...
@@ -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
)
logs/tamp_course_order.log
View file @
81692534
This source diff could not be displayed because it is too large. You can
view the blob
instead.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment