新增错误处理类

parent 9c122b8f
...@@ -9,4 +9,5 @@ ...@@ -9,4 +9,5 @@
from app.api.app import app from app.api.app import app
if __name__ == '__main__': if __name__ == '__main__':
app.run('127.0.0.1', port=8000) app.run('127.0.0.1', port=8000, debug=True)
...@@ -10,9 +10,11 @@ ...@@ -10,9 +10,11 @@
from flask import Flask from flask import Flask
from flask_restful import Api from flask_restful import Api
from app.controller.errorhandler import add_errorhandler
from app.router.version1 import add_route from app.router.version1 import add_route
app = Flask(__name__) app = Flask(__name__)
api = Api(app) api = Api(app)
add_route(api) add_route(api)
add_errorhandler(app)
# -*- encoding: utf-8 -*-
# -----------------------------------------------------------------------------
# @File Name : errors.py
# @Time : 2020/11/25 上午9:20
# @Author : X. Peng
# @Email : acepengxiong@163.com
# @Software : PyCharm
# -----------------------------------------------------------------------------
class Errors:
""""""
USER_ALREADY_EXISTS = 20001
MSG = {
USER_ALREADY_EXISTS: '用户已经存在'
}
# -*- encoding: utf-8 -*-
# -----------------------------------------------------------------------------
# @File Name : errorhandler.py
# @Time : 2020/11/25 上午9:19
# @Author : X. Peng
# @Email : acepengxiong@163.com
# @Software : PyCharm
# -----------------------------------------------------------------------------
from flask import jsonify
from app.config.errors import Errors
class CustomFlaskErr(Exception):
# 默认的返回码
status_code = 200
# 自己定义了一个 return_code,作为更细颗粒度的错误代码
def __init__(self, return_code=None, status_code=None, payload=None):
Exception.__init__(self)
self.return_code = return_code
if status_code is not None:
self.status_code = status_code
self.payload = payload
# 构造要返回的错误代码和错误信息的 dict
def to_dict(self):
rv = dict(self.payload or ())
# 增加 dict key: return code
rv['return_code'] = self.return_code
# 增加 dict key: message, 具体内容由常量定义文件中通过 return_code 转化而来
rv['message'] = Errors.MSG[self.return_code]
return rv
def add_errorhandler(app):
@app.errorhandler(CustomFlaskErr)
def handle_flask_error(error):
# response 的 json 内容为自定义错误代码和错误信息
response = jsonify(error.to_dict())
# response 返回 error 发生时定义的标准错误代码
response.status_code = error.status_code
return response
...@@ -7,11 +7,15 @@ ...@@ -7,11 +7,15 @@
# @Software : PyCharm # @Software : PyCharm
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
from flask_restful import Resource, reqparse from flask_restful import Resource, reqparse
from flask import request from flask import request, jsonify
from app.api import app
from app.controller.errorhandler import CustomFlaskErr
from app.config.errors import Errors
class OrderHandlers(Resource):
""".""" class TopUpOrder(Resource):
"""充值订单."""
def __init__(self): def __init__(self):
""".""" """."""
...@@ -19,7 +23,8 @@ class OrderHandlers(Resource): ...@@ -19,7 +23,8 @@ class OrderHandlers(Resource):
def get(self): def get(self):
""".""" """."""
self.parser.add_argument('product_id',type=str,required=True,help='商品ID不能为空') raise CustomFlaskErr(Errors.USER_ALREADY_EXISTS)
self.parser.add_argument('product_id', type=str, required=True, help='商品ID不能为空')
args = self.parser.parse_args() args = self.parser.parse_args()
print(args) print(args)
return {'data': 'world'} return {'data': 'world'}
...@@ -35,3 +40,30 @@ class OrderHandlers(Resource): ...@@ -35,3 +40,30 @@ class OrderHandlers(Resource):
def delete(self, id): def delete(self, id):
""".""" """."""
pass pass
class ConsumeOrder(Resource):
"""消费订单."""
def __init__(self):
"""."""
self.parser = reqparse.RequestParser()
def get(self):
"""."""
self.parser.add_argument('product_id', type=str, required=True,help='商品ID不能为空')
args = self.parser.parse_args()
print(args)
return {'data': 'world'}
def post(self):
"""."""
pass
def put(self, id):
"""."""
pass
def delete(self, id):
"""."""
pass
\ No newline at end of file
...@@ -11,4 +11,8 @@ from app.controller.order import * ...@@ -11,4 +11,8 @@ from app.controller.order import *
def add_route(api): def add_route(api):
"""注册路由""" """注册路由"""
api.add_resource(OrderHandlers, '/tamp_course_order/order') # 充值订单
api.add_resource(TopUpOrder, '/tamp_order/micro_shop/topUpOrder')
# 消费订单
api.add_resource(ConsumeOrder, '/tamp_order/micro_shop/consumeOrder')
...@@ -24,12 +24,40 @@ import time ...@@ -24,12 +24,40 @@ import time
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
alipay_public_key_string = '''''' alipay_public_key_string = '''-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhTT+Cn3Y+BYysAqXsjAqjJ14aUzvUHKz0LnaAifTE10IRyzzcFn+8SXIhzHoJ/OQrj7DPoDV18iSX7PcHPDdRCFyOBP1RQkxFLmnpqFY6BRoEm6kaWea0rfg44EXgZSCO0e7gwjez8W4zO7S9w+HOECbB61ZfmsM+oTT41kUyXmcpUgvkSiayxyeNcnzSiS06GuoMbSpaVSjAoTAiFZdyaB51+wDXf3JvZARnlvnD2Jk5sFDzZbeVIfygInFo/ICIQRr96Jfwcey9ZO3PfvxZlDqa0cbCmZi7PyMIlwVf/bHF+rwiXboJm+rauu+Py4ch5BrakWVF/kty+jitLxD6QIDAQAB
-----END PUBLIC KEY-----'''
app_private_key_string = '''''' app_private_key_string = '''-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA0wfwXYuvhbfavgl98gVv0yCQuTWI+auqP6gmKzysCD/SOXKz
ZzXOOfDWaAUX4yf+5Q+K+whMzbvSl9HzHFEqGchhMPCji0P+Rbs7J5P37ZNCW5VT
9oBF1db54rCqnsgY17lQuj8Kf1dB6Np8MqxaocBzZaR9l7iOcqoSfyHsTMm3NQOc
46GGnGKrFIvguZLzc6ZL0OGPJPXXtQQ6uz2LBEAk57fEHbax+gMzhci/D1hxt5ZV
VW1ZYq2JSR/8xDXlw5PuL+ppyTcKFI5Czh/G0i6hVGl4ZZwnCb2Ck2QJW/D+RfG7
eb/KZdkYhEj3X7mkdTtGRh4fro+8dKvmOtzIkQIDAQABAoIBAF4cnUJqqDVfH+s+
Om+zowIp9MDUMij+OKe46oS/wwzOwYcjMwTlRvoqAMRU+SkxzggDXXzEX9QkXi+c
zumi/L6Q0V9NAfJ6uSwJ6sCkyZ2m3aIQP2igHgTWoYxKM10qaYHTQEA/GwRdOqSI
w3ipyqV2OUBsEiKWiNh0JlmSHFrFj0/adYcUbsEqGp4uO8miMGH2WYDo/SXmnc+9
efygtHe914LC3STJ2DkZ4hwo5TgaM8juTCdtcrEwI4nH3Pax7BYRcihiFCvZLsC5
U0b3DzPXCs7rYs4JuS3Xq+pkukMLqcVJ2ficRONkKI9L0l2H2kIIHr74vqmuYJfL
BYpHcMECgYEA7oRL9lC0+ckdJWmyvTW1r4uH2A2qoKNAAVLo/PAgE+JsAyr4fLCL
1DtJxlKptu793fsMyppRDYu73gpQlokWPGGodEdlXePn0QUaA2YDRUZl6BnS2rTn
f8R0ll5LN96ZNO4DD53BwFRgK515Eg+PtE7YaLVebSGQc6/n1FS+eAkCgYEA4n/h
CuCm5liVzO2lVFJQkaRIXCwXP/C3KZ37BzBRzva2yW6qfGUyY90ZhRyIGgekEzbS
P/UgAk+Q5tDxM+ESufseh9PvFk1WWPPqP86bQ+IlWnKiuS5d5LOUbXa5AaGWolTK
h4FejzVZUsGeMPY07HseIGnavWHHosHg+MZ/nkkCgYEA0J2D9y+F6sedp4B4ZgeZ
Hq4ypaTmbVP8Amxq/fhkhh/PC0JFToH3+yvUDhN0/1yvTL1s5bPtWqSyL7Xj4JaM
jUl5ViKwJVvWATquEvThvXCiZ0xW4RXDOTwyIObecUJPzDy1Dq6TrU3fQ6abI1Hb
BgDERWkE6vylZJohcdShN0kCgYEAmaY6WZCwZ85sQIpt/1efxEz3sV9PnlaDSj4b
TnMe7BE9SkRCbwSPPGN+rmf+g/nu+gHUewKkZiznlUzkc1cZxwRtX6MLq8tm6gz9
Oa/EcDZ3NHZToN+tXjncVK2XL14Yu6JdibLfHLMKFzO1Rm2e1VVnyIFGm/Y64VQ4
c0rkw9ECgYBbv3leaa5N/RGPiZLi2Rc8lb5t4Pt8ZdlHd+MUF+BGNlfo8UgeOJUU
Fkfjdj+UJp3LE/meT53zrK1PWaS3j51vdfb/YLGf6vgiqN9kj0xpyV4uPCZc1dHI
hwtSuAgS7rSrMeMS9omsZro9L1eHDjA8Ja4L0UNGi7i8dGFnp1BtOQ==
-----END RSA PRIVATE KEY-----'''
APP_ID = '' APP_ID = '2021002112638152'
URL_PREFIX = '' URL_PREFIX = 'https://tampe.tanpuyun.com'
ssl._create_default_https_context = ssl._create_unverified_context ssl._create_default_https_context = ssl._create_unverified_context
...@@ -49,7 +77,7 @@ def init_alipay(notify_path='/webservice/notify'): ...@@ -49,7 +77,7 @@ def init_alipay(notify_path='/webservice/notify'):
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', return_path='/home/order'):
"""创建预付订单.""" """创建预付订单."""
result = init_alipay(notify_path).api_alipay_trade_wap_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,
...@@ -58,6 +86,7 @@ def prePay(subject, out_trade_no, total_amount, notify_path='/webservice/notify' ...@@ -58,6 +86,7 @@ def prePay(subject, out_trade_no, total_amount, notify_path='/webservice/notify'
if not result: if not result:
return False return False
pay_url = 'https://openapi.alipay.com/gateway.do?' + result pay_url = 'https://openapi.alipay.com/gateway.do?' + result
print(pay_url)
return pay_url return pay_url
def alipay_transfer(): def alipay_transfer():
...@@ -72,3 +101,10 @@ def alipay_transfer(): ...@@ -72,3 +101,10 @@ def alipay_transfer():
} }
result = init_alipay().api_alipay_fund_trans_toaccount_transfer(out_biz_no, payee_type, payee_account, amount, **kwargs) result = init_alipay().api_alipay_fund_trans_toaccount_transfer(out_biz_no, payee_type, payee_account, amount, **kwargs)
return result return result
if __name__== '__main__':
out_trade_no = '201812102324324134138'
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
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# File Name: wxh5pay.py # File Name: wx_app_pay.py
# Author: X. Peng # Author: X. Peng
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
...@@ -35,13 +35,13 @@ def genNonce_str(): ...@@ -35,13 +35,13 @@ def genNonce_str():
class WXPay(object): class WXPay(object):
"""微信H5支付.""" """微信H5支付."""
def __init__(self, out_trade_no, body, total_fee, remote_addr, notify_path='/webservice/notify', return_path='/home/order'): def __init__(self, out_trade_no, body, total_fee, remote_addr, notify_path='/webservice/notify'):
"""线上:tamper.tanpuyun.com """线上:tamper.tanpuyun.com
测试:testtamper.tanpuyun.com""" 测试:testtamper.tanpuyun.com"""
self.timeStamp = int(time.time()) self.timeStamp = int(time.time())
self.req_url = 'https://api.mch.weixin.qq.com/pay/unifiedorder' self.req_url = 'https://api.mch.weixin.qq.com/pay/unifiedorder'
self.url_prefix = 'https://tamper.tanpuyun.com' self.url_prefix = 'https://tampe.tanpuyun.com'
self.appid = 'wx95b0c12b47b758ac' self.appid = 'wx3ad4c5856975a2c4'
self.mch_id = '1515329071' self.mch_id = '1515329071'
self.nonce_str = genNonce_str() self.nonce_str = genNonce_str()
self.sign = None self.sign = None
...@@ -51,12 +51,12 @@ class WXPay(object): ...@@ -51,12 +51,12 @@ class WXPay(object):
self.total_fee = int(total_fee * 100) self.total_fee = int(total_fee * 100)
self.spbill_create_ip = remote_addr self.spbill_create_ip = remote_addr
self.notify_url = self.url_prefix + notify_path self.notify_url = self.url_prefix + notify_path
self.return_path = self.url_prefix + return_path self.trade_type = 'APP'
self.trade_type = 'MWEB'
self.key = 'eqwor3wquevncz9384ssp438oarefskl' self.key = 'eqwor3wquevncz9384ssp438oarefskl'
self.getStringSign() self.getStringSign()
self.getData() self.getData()
# self.getPayUrl() self.getPrepayId()
self.getPaySign()
def getStringSign(self): def getStringSign(self):
...@@ -108,19 +108,24 @@ class WXPay(object): ...@@ -108,19 +108,24 @@ class WXPay(object):
raw[child.tag] = child.text raw[child.tag] = child.text
return raw return raw
def getPayUrl(self): def getPrepayId(self):
""".""" """."""
res = requests.post(self.req_url, data=self.dict2xml(self.data)) res = requests.post(self.req_url, data=self.dict2xml(self.data))
res = self.xml2dict(res.content) res = self.xml2dict(res.content)
print(res) self.prepay_id = res['prepay_id']
return res['mweb_url'] + '&' + parse.urlencode({'redirect_url': self.return_path})
def getPaySign(self):
"""."""
sign_string = 'appId={0}&nonceStr={1}&package=prepay_id={2}&signType={3}&timeStamp={4}&key={5}'.format(
self.appid, self.nonce_str, self.prepay_id, self.sign_type, self.timeStamp, self.key)
self.paySign = hashlib.md5(sign_string.encode("utf-8")).hexdigest().upper()
if __name__ == '__main__': if __name__ == '__main__':
out_trade_no = '201812102324324134134' out_trade_no = '201812102324324134138'
body = 'H5支付测试' body = 'APP支付测试'
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)
pay_url = wx.getPayUrl() params = {'prepay_id': wx.prepay_id, 'sign': wx.paySign}
print(pay_url) print(params)
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