# 收款码合成后端文档 ## 目录结构 ``` |-- lib | |-- allFunction.py | |-- db.py | |-- login.py | |-- pay.py | |-- signature.py |-- templates | |-- 400.html | |-- 404.html | |-- 410.html | |-- 500.html | |-- qrcode.html |-- hello.py |-- README.md ``` ## 接口列表及说明 ```js // $ 代表参数 // <> 代表数据类型 // 用户小程序登录 // 参数:code , sign /login |-- manageLogin() | |-- checkContent($code,$sign) | | |-- getOpenid($code) | | | |-- {'errmsg': '$openid', 'errcode': 200} // 请求成功 | | | |-- {'errmsg': '', 'errcode': ''} // 请求失败 | | | | | |-- False | | | |-- {'userInfo': findUser($openid), 'openid': 'str', 'errcode': 200} // 请求成功 | |-- {'errmsg': '', 'errcode': ''} // 请求失败 | |-- False | |-- {'userInfo': findUser($openid), 'openid': 'str', 'errcode': 200} // 请求成功 |-- {'errmsg': '', 'errcode': ''} // 请求失败 |-- 400 // 用户扫描二维码 // 参数 id /qr |-- findQR() | |-- findCode($id) | | |-- arr ' Array>' //查询成功 | | |-- False // id不合法或者查询无结果 | | | |-- arr ' Array>' // 查询成功 | |-- False // id不合法或者查询无结果 | |-- template('qrcode.html') |-- 410 // 小程序刷新用户信息 // 参数 openId, sign /reflash |-- flash() | |-- checkContent($openId, $sign) | | |-- {'userInfo': findUser($openId) ' Array>', 'errcode': 200} // 返回查询到的所有用户信息,可能为空数组 | | |-- False //openid不合法 | | | |-- {'userInfo': findUser($openId) ' Array>', 'errcode': 200} | |-- False //openid不合法 | |-- {'userInfo': findUser($openId) ' Array>', 'errcode': 200} |-- 400 // 小程序删除二维码 // 参数 id, sign /del |-- delQR() | |-- checkContent($id, $sign) | | |-- delCode($id) | | | |-- {'errcode': 200, 'errmsg': 'ok'} //删除成功 | | | |-- False //id不合法 | | | | | |-- {'errcode': 200, 'errmsg': 'ok'} //删除成功 | | |-- False | | | |-- {'errcode': 200, 'errmsg': 'ok'} //删除成功 | |-- False | |-- {'errcode': 200, 'errmsg': 'ok'} //删除成功 |-- 400 // 创建新的订单 // 参数 data, totalFee /newOrder |-- createOrder() | |-- checkData($data) | | |-- $param = createOrderParams($totalFee) // 创建订单详情 | | |-- $dataCache = createOrderCache($data, $params) // 把 out_trade_no 放进用户上传的data里边 | | |-- $res = insertOrderCache($dataCache) // 把 data放进cache 表里边 | | |-- {'params': params, 'errcode': 200} //上一步操作成功返回 | | |-- False //以上操作出问题 | | | |-- {'params': params, 'errcode': 200} | |-- False | |-- {'params': params, 'errcode': 200} |-- 400 // 处理订单异步查询 /notify |-- manageNotify() | |-- checkNotify($form) //校验数据 | | |-- cache2Test($out_trade_no, payjs_order_id) | | | |-- True //把缓存表中内容去出加上支付识别码放进正式表,在映射表建立 out_trade_no 到正式表 ObjectId 的映射 | | | |-- False //以上操作出错 | | | | | |-- True | | |-- False | | | |-- True | |-- False | |-- True |-- False // 小程序查询订单状态 // 参数 out_trade_no /checkOrder |-- checkOrder() | |-- findOrder($out_trade_no) | | |-- order_id ' String>' //查询映射表 out_trade_no 对应的 id | | |-- False //查询无结果或者删除映射表的数据失败 | | | |-- {'order_id': order_id, 'errcode': 200} | |-- False | |-- {'order_id': order_id, 'errcode': 200} |-- 500 ``` ## TODO * MD5加解密 验证来源 ## 配置环境 安装venv `python3 -m venv venv` 启动venv `. venv/bin/activate` 关闭venv `deactivate` 查看现在已经安装的依赖 `pip3 list` 更新pip `pip install --upgrade pip` 安装Flask ` pip install Flask` 安装最新的flask `pip install -U https://github.com/pallets/flask/archive/master.tar.gz` 安装pymongo ` pip install pymongo` 安装requests ` pip install requests` 安装payjs ` pip install payjs` 设置全局变量 `export FLASK_APP=qrcode.py` `export FLASK_ENV=development` 启动 `flask run --host=0.0.0.0` 在虚拟环境下安装gunicorn `pip install gunicorn` 添加配置文件 gunicorn.conf ``` # 并行工作线程数 workers = 4 # 监听内网端口5000【按需要更改】 bind = '127.0.0.1:5000' # 设置守护进程【关闭连接时,程序仍在运行】 daemon = True # 设置超时时间120s,默认为30s。按自己的需求进行设置 timeout = 120 # 设置访问日志和错误信息日志路径 # accesslog = './logs/acess.log' # errorlog = './logs/error.log' # 自动重启 autostart = True ``` 启动gunicorn `gunicorn qrcode:app -c gunicorn.conf`