# 医院支付系统接口文档 ## 目录 - [1. 概述](#1-概述) - [2. 通信协议](#2-通信协议) - [3. 接口列表](#3-接口列表) - [4. 错误码说明](#4-错误码说明) - [5. 数据结构](#5-数据结构) - [6. 对接示例](#6-对接示例) ## 1. 概述 ### 1.1 文档说明 本文档详细描述了医院支付系统的接口规范,包括接口定义、参数说明、错误码等信息。 ### 1.2 修订记录 | 版本号 | 修订日期 | 修订说明 | |--------|----------|----------| | v1.0.0 | 2024-03-25 | 初始版本 | ## 2. 通信协议 ### 2.1 基本信息 - 通信方式:Socket TCP - 字符编码:UTF-8 - 数据格式:JSON - 端口配置:通过配置文件指定 ### 2.2 消息格式 #### 请求消息格式 \`\`\` 长度(4位) + 功能码(4位) + 医院编码(4位) + 时间戳(19位) + JSON数据 \`\`\` 示例: \`\`\` 005700059999FJJXYY712024-08-01 09:00:44{"FCode":"3516022343"} \`\`\` #### 响应消息格式 \`\`\` 长度(4位) + JSON数据 \`\`\` 示例: \`\`\` 0216{"ResultCode":"0000","ResultData":{"FCode":"3516022343","FName":null,"AmountA":414.54}} \`\`\` ## 3. 接口列表 ### 3.1 入院登记 - **功能码**: 0001 - **功能说明**: 病人入院时进行登记 - **请求参数**: \`\`\`json { "FCode": "string" // 病人编号 } \`\`\` - **响应参数**: \`\`\`json { "ResultCode": "string", // 结果代码 "ResultData": { "FCode": "string", // 病人编号 "FName": "string", // 病人姓名 "AmountA": decimal, // A类金额 "AmountB": decimal, // B类金额 "AmountC": decimal, // C类金额 "BankAccNo": "string", // 银行账号 "BankAmount": decimal, // 银行余额 "Fflag": int, // 状态标志 "Flimitflag": int, // 限制标志 "Flimitamt": decimal // 限制金额 } } \`\`\` ### 3.2 消费额度查询 - **功能码**: 0002 - **功能说明**: 查询病人当月消费额度 - **请求参数**: \`\`\`json { "FCode": "string" // 病人编号 } \`\`\` - **响应参数**: \`\`\`json { "AmountA": decimal, // A类消费金额 "AmountB": decimal, // B类消费金额 "FreeAmountA": decimal, // A类可用金额 "FreeAmountB": decimal, // B类可用金额 "Checkflag": int, // 检查标志 "FCode": "string", // 病人编号 "FCriminal": "string", // 病人姓名 "Flag": int // 状态标志 } \`\`\` ### 3.3 出院处理 - **功能码**: 0003 - **功能说明**: 病人出院时的处理 - **请求参数**: \`\`\`json { "FCode": "string" // 病人编号 } \`\`\` - **响应参数**: \`\`\`json { "Result": boolean, // 处理结果 "ReMsg": "string" // 结果消息 } \`\`\` ### 3.4 消费记录 - **功能码**: 0004 - **功能说明**: 记录病人消费信息 - **请求参数**: \`\`\`json { "FCode": "string", // 病人编号 "InvoiceNo": "string", // 发票号 "AmountA": decimal, // A类金额 "AmountB": decimal, // B类金额 "Amount": decimal, // 总金额 "FreeAmountA": decimal, // A类可用金额 "FreeAmountB": decimal, // B类可用金额 "CrtDate": "string", // 创建日期 "FCriminal": "string", // 病人姓名 "CardCode": "string", // 卡号 "OrderId": int // 订单ID } \`\`\` - **响应参数**: \`\`\`json { "ResultCode": "string", // 结果代码 "ResultMsg": "string" // 结果消息 } \`\`\` ### 3.5 实时余额查询 - **功能码**: 0005 - **功能说明**: 查询病人实时余额 - **请求参数**: \`\`\`json { "FCode": "string" // 病人编号 } \`\`\` - **响应参数**: 同入院登记响应 ### 3.6 发票同步 - **功能码**: 0006 - **功能说明**: 同步发票信息 - **请求参数**: \`\`\`json { "InvoiceList": [ "string" // 发票号列表 ] } \`\`\` - **响应参数**: \`\`\`json { "ResultCode": "string", "ResultData": [ { "BankFlag": int, // 银行标志 "CAmount": decimal, // 金额 "FCode": "string", // 病人编号 "Origid": "string", // 原始ID "SendDate": "string" // 发送日期 } ] } \`\`\` ## 4. 错误码说明 | 错误码 | 说明 | 处理建议 | |--------|------|----------| | 0000 | 成功 | - | | 0005 | 未找到病人信息 | 检查病人编号是否正确 | | 0006 | 入院处理失败 | 检查病人状态 | | 0007 | 病人已入院 | 无需重复入院 | | 0008 | 系统异常 | 联系系统管理员 | ## 5. 数据结构 ### 5.1 金额说明 - AmountA: A类金额,用于... - AmountB: B类金额,用于... - AmountC: C类金额,用于... - FreeAmountA: A类可用金额 - FreeAmountB: B类可用金额 ### 5.2 状态标志说明 - Fflag: 0-正常,1-已入院 - Flimitflag: 0-无限制,1-有限制 - Checkflag: 检查标志 - BankFlag: 银行标志 ## 6. 对接示例 ### 6.1 Go语言示例代码 \`\`\`go package main import ( "encoding/json" "fmt" "net" "time" ) // 发送请求 func sendRequest(conn net.Conn, functionCode string, hospitalCode string, data interface{}) error { jsonData, err := json.Marshal(data) if err != nil { return err } // 构造消息 message := fmt.Sprintf("%04d%s%s%s%s", len(jsonData)+27, // 总长度 functionCode, // 功能码 hospitalCode, // 医院编码 time.Now().Format("2006-01-02 15:04:05"), string(jsonData)) // 发送消息 _, err = conn.Write([]byte(message)) return err } // 接收响应 func receiveResponse(conn net.Conn) (string, error) { buffer := make([]byte, 4096) n, err := conn.Read(buffer) if err != nil { return "", err } response := string(buffer[:n]) // 解析响应:前4位为长度,之后为JSON数据 return response[4:], nil } func main() { // 建立连接 conn, err := net.Dial("tcp", "192.168.1.1:8080") if err != nil { panic(err) } defer conn.Close() // 构造请求数据 reqData := map[string]string{ "FCode": "3516022343", } // 发送请求 err = sendRequest(conn, "0001", "9999", reqData) if err != nil { panic(err) } // 接收响应 response, err := receiveResponse(conn) if err != nil { panic(err) } fmt.Println("Response:", response) } \`\`\` ### 6.2 注意事项 1. 数据传输编码统一使用 UTF-8 2. 金额字段使用 decimal 类型,避免浮点数精度问题 3. 时间戳格式:2006-01-02 15:04:05 4. 建议每次请求建立新的连接 5. 注意处理连接超时情况 6. 响应码为"0000"时表示处理成功