HospitalPay-Go/docs/快速参考.md

4.9 KiB

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 (病人信息)

{
    "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 (消费额度)

{
    "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 (消费记录)

{
    "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 (发票同步结果)

{
    "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 客户端

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 客户端

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. 超时: 检查网络连接和服务器负载