提交 c3fbce7a authored 作者: 刘擎阳's avatar 刘擎阳

1.优化

上级 ee8a75bf
......@@ -74,23 +74,46 @@ def calculate_sign(json_data, app_secret):
return md5_hash
def build_response(success, error_code, error_msg, request_id=None, result=None):
"""
统一构建返回结构的方法
"""
return {
"success": success,
"errorCode": error_code,
"errorMsg": error_msg,
"requestID": request_id if request_id else "", # 如果没有ID则返回空字符串
"serverTimeMs": int(time.time() * 1000),
"result": result,
}
def check_sign(f):
@functools.wraps(f)
def decorated_function(*args, **kwargs):
# 初始化 request_id,防止解析 JSON 失败时报错
request_time = datetime.utcnow()
timestamp = int(time.time())
request_id = request_time.strftime("%Y%m%d%H%M%S") + str(timestamp)
try:
# 获取原始请求体 JSON
# 1. 获取原始请求体 JSON
data = request.get_json(force=True, silent=True)
if not data:
return jsonify({"code": 400, "msg": "Invalid JSON"}), 400
# 获取请求中的签名
return jsonify(build_response(False, 400, "Invalid JSON Body", request_id))
# 3. 获取客户端签名
client_sign = data.get('sign', '')
# 计算服务端签名
if not client_sign:
return jsonify(build_response(False, 401, "Missing Signature", request_id))
# 4. 计算服务端签名
server_sign = calculate_sign(data, APP_SECRET)
# 对比签名
# 5. 对比签名
if client_sign != server_sign:
# 实际开发建议记录日志: print(f"Client: {client_sign}, Server: {server_sign}")
return jsonify({"code": 401, "msg": "Invalid Signature"}), 401
# 调试用(生产环境建议记录到日志文件)
# print(f"Client: {client_sign}, Server: {server_sign}")
return jsonify(build_response(False, 401, "Invalid Signature", request_id))
# 6. 验证通过,执行原有业务逻辑
return f(*args, **kwargs)
except Exception as e:
return jsonify({"code": 500, "msg": str(e)}), 500
# 捕获所有未预料的异常,保持返回格式一致
return jsonify(build_response(False, 500, f"Server Error: {str(e)}", request_id)), 500
return decorated_function
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论