# -*- coding: utf-8 -*- from fastapi import APIRouter, Depends, Request from fastapi.responses import PlainTextResponse from sqlalchemy.orm import Session from database import get_db from utils.sg_auth import * from utils.redis_util import * from models import * from utils import * from extensions import logger from config import settings router = APIRouter() # 获取登录态数据 # https://dgmpaas.yuque.com/appshell/yst/bgo7tx?#sjJu1 @router.post("/get_yst_user_info", response_class=PlainTextResponse) def get_yst_user_info( request: Request, x_tif_signature: str = Header(None), x_tif_nonce: str = Header(None), x_tif_timestamp: str = Header(None), x_tif_uid: str = Header(None), x_tif_uinfo: str = Header(None), x_tif_ext: str = Header(None), ): return yst_user_info_response(json.dumps({ "account_type": "human", "corp": { "level": "L2", "qyInfo": { "qymc": "茂名市石油化工有限公司", "qyjb": "规模以上", "qydz": "--" } }, "tokenid": "ccb7fb65a9ca5a2d74c2afeed928c522" })) ''' { "account": "DGD440782197706290318", "account_type": "human", "cid": "440782197706290318", "corp": { "account": "50b50b6d", "address": "", "cid": "91440705354627820H", "ctype": "49", "level": "L2", "link_person_name": "李步尚", "mobile": "13426789046", "name": "江门市新会区尚软网络科技有限公司", "role_type": "parent_linked", "social_credit_code": "91440705354627820H", "uid": "359a7db835994a7ebd147f09c5b9ae5d" }, "ctype": "10", "face_authtime": 1733726217276, "level": "L2", "login_type": "SG-GASMHS", "mobile": "13426789046", "name": "李步尚", "origin": "SG", "sex": "1", "tokenid": "ccb7fb65a9ca5a2d74c2afeed928c522", "uid": "5b8f1a3e774d4ba8b7ccb2b2d51a38cd", "uversion": "10.0" } ''' pass_token = "123" # settings.YST_RANQI_PASS_TOKEN token_exception = TokenException() if x_tif_signature is None or x_tif_nonce is None or x_tif_timestamp is None or x_tif_uid is None or x_tif_uinfo is None or x_tif_ext is None: logger.error('========================>>>>>>>>>>>>>>>>>>>>>>> yst authentication err: 1') raise token_exception if authentication(x_tif_timestamp, pass_token, x_tif_nonce, x_tif_uid, x_tif_uinfo, x_tif_ext, x_tif_signature) == False: logger.error('========================>>>>>>>>>>>>>>>>>>>>>>> yst authentication err: 2') raise token_exception json_str = base64.b64decode(x_tif_ext) json_str = json_str.decode(encoding='utf-8') x_tif_ext = json.loads(json_str) logger.info('========================>>>>>>>>>>>>>>>>>>>>>>> yst authentication ok: {}', x_tif_ext) logger.info('========================>>>>>>>>>>>>>>>>>>>>>>> yst account_type: {}', x_tif_ext['account_type']) tokenid = x_tif_ext['tokenid'] redis_key = "yst_token_" + tokenid redis_set_json(redis_key, x_tif_ext) corp = x_tif_ext["corp"] if corp is not None: corp = { "level": x_tif_ext["corp"]["level"] } return yst_user_info_response(json.dumps({ "account_type": x_tif_ext["account_type"], "corp": corp, "tokenid": tokenid })) # 用户信息查询接口 @router.post('/query') def yhxx( request: Request, token: str, ext_info: str = Depends(yst_pass_ext), param: dict = Depends(yst_request_param), db: Session = Depends(get_db) ): sfzh = ext_info['cid'] uuid_str = new_guid() ''' if settings.IS_DEV == True: logger.info("使用测试身份证号 341181198809150011") sfzh = "341181198809150011" ''' redis_key = "mmyj_yhxx_" + uuid_str redis_set_json(redis_key, { "custcode": "3101893742", "compcode": "compcode", "compname": "compname" }) resp = { 'ret': 0, 'msg': '', 'data': { 'token': token, 'custcode':'3101893742', 'uuid': uuid_str, 'xm': xm_tuomin(ext_info['name']), 'zjlx':'居民身份证', 'zjhm': sfz_tuomin(sfzh), 'lxdh': ext_info['mobile'] } } return yst_response(resp) req = GetCustCodeListByIdReq() req.custId = sfzh result = requestApi.getCustCodeListById(req) if result is None: return yst_response({ "ret": 1, "msg": "提交到应用服务器失败" }) if len(result['data']) == 0: resp = { 'ret': 1, 'msg': '您在梅州中燃没有燃气账户' } return yst_response(resp) redis_key = "ranqi_yhxx_" + uuid_str redis_set_json(redis_key, result['data']) return_data = [] data = result['data'] for n in data: return_data.append({ 'token': token, 'custcode': n['custcode'], 'uuid': uuid_str, 'xm': xm_tuomin(ext_info['name']), 'zjlx':'居民身份证', 'zjhm': sfzh_tuomin(sfzh), 'lxdh': ext_info['mobile'] }) resp = { 'ret': 0, 'msg': '', 'data': return_data } return yst_response(resp)