# HospitalPay-Go Socket 接口快速参考 ## 消息格式 ``` [长度(4位)][功能码(4位)][医院编码(4位)][时间戳(19位)][JSON数据] ``` ## 功能码列表 | 功能码 | 功能名称 | 请求参数 | 响应数据 | |--------|----------|----------|----------| | 0001 | 入院登记 | `{"FCode":"string"}` | CriminalInfo | | 0002 | 消费额度查询 | `{"FCode":"string"}` | ConsumeQuota | | 0003 | 出院处理 | `{"FCode":"string"}` | 成功消息 | | 0004 | 消费记录 | ConsumeRecord | 成功消息 | | 0005 | 实时余额查询 | `{"FCode":"string"}` | CriminalInfo | | 0006 | 发票同步 | `{"InvoiceList":["string"]}` | InvoiceSyncResult[] | ## 错误码 | 错误码 | 说明 | |--------|------| | 0000 | 成功 | | 0005 | 未找到病人信息 | | 0006 | 入院处理失败 | | 0007 | 病人已入院 | | 0008 | 系统异常 | | 0009 | 请求参数错误 | ## 数据结构 ### CriminalInfo (病人信息) ```json { "FCode": "string", // 病人编号 "FName": "string", // 病人姓名 "AmountA": 100.00, // A类金额 "AmountB": 50.00, // B类金额 "AmountC": 150.00, // C类金额 "BankAccNo": "string", // 银行账号 "BankAmount": 1000.00, // 银行余额 "Fflag": 0, // 状态标志 "Flimitflag": 0, // 限制标志 "Flimitamt": 0.00 // 限制金额 } ``` ### ConsumeQuota (消费额度) ```json { "AmountA": 50.00, // A类消费金额 "AmountB": 30.00, // B类消费金额 "FreeAmountA": 0.00, // A类可用金额 "FreeAmountB": 0.00, // B类可用金额 "Checkflag": 0, // 检查标志 "FCode": "string", // 病人编号 "FCriminal": "string", // 病人姓名 "Flag": 0 // 状态标志 } ``` ### ConsumeRecord (消费记录) ```json { "FCode": "string", // 病人编号 "InvoiceNo": "string", // 发票号 "AmountA": 50.00, // A类金额 "AmountB": 30.00, // B类金额 "Amount": 80.00, // 总金额 "FreeAmountA": 0.00, // A类可用金额 "FreeAmountB": 0.00, // B类可用金额 "CrtDate": "2024-01-01T10:00:00Z", // 创建日期 "FCriminal": "string", // 病人姓名 "CardCode": "string", // 卡号 "OrderId": 123456 // 订单ID } ``` ### InvoiceSyncResult (发票同步结果) ```json { "BankFlag": 2, // 银行标志 "CAmount": 100.00, // 金额 "FCode": "3516022343", // 病人编号 "Origid": "INV001", // 原始发票号 "SendDate": "2024-01-01T10:00:00Z" // 发送日期 } ``` ## 快速示例 ### 入院登记 ``` 请求: 00540001H0012024-01-15 10:30:00{"FCode":"3516022343"} 响应: {"ResultCode":"0000","ResultData":{...}} ``` ### 消费记录 ``` 请求: 01840004H0012024-01-15 10:30:00{"FCode":"3516022343","InvoiceNo":"INV001","AmountA":50.00,"AmountB":30.00,"Amount":80.00,"FreeAmountA":0.00,"FreeAmountB":0.00,"CrtDate":"2024-01-15T10:30:00Z","FCriminal":"测试病人","CardCode":"CARD001","OrderId":123456} 响应: {"ResultCode":"0000","ResultMsg":"消费记录保存成功"} ``` ### 发票同步 ``` 请求: 00800006H0012024-01-15 10:30:00{"InvoiceList":["INV001","INV002"]} 响应: {"ResultCode":"0000","ResultData":[...]} ``` ## 客户端代码模板 ### Go 客户端 ```go func sendRequest(functionCode, hospitalCode, data string) (string, error) { conn, err := net.Dial("tcp", "localhost:8080") if err != nil { return "", err } defer conn.Close() timestamp := time.Now().Format("2006-01-02 15:04:05") message := fmt.Sprintf("%s%s%s%s", functionCode, hospitalCode, timestamp, data) fullMessage := fmt.Sprintf("%04d%s", len(message), message) _, err = conn.Write([]byte(fullMessage)) if err != nil { return "", err } buffer := make([]byte, 4096) n, err := conn.Read(buffer) if err != nil { return "", err } return string(buffer[:n]), nil } ``` ### Python 客户端 ```python def send_request(function_code, hospital_code, data): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: sock.connect(('localhost', 8080)) timestamp = time.strftime("%Y-%m-%d %H:%M:%S") json_data = json.dumps(data) message = f"{function_code}{hospital_code}{timestamp}{json_data}" full_message = f"{len(message):04d}{message}" sock.send(full_message.encode('utf-8')) response = sock.recv(4096).decode('utf-8') length = int(response[:4]) json_response = response[4:4+length] return json.loads(json_response) finally: sock.close() ``` ## 常见问题 1. **连接被拒绝**: 检查服务器状态和端口 2. **医院编码错误**: 确认配置文件中的医院编码 3. **消息格式错误**: 检查长度计算和JSON格式 4. **超时**: 检查网络连接和服务器负载