6.6 KiB
医院支付系统接口文档
目录
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 注意事项
- 数据传输编码统一使用 UTF-8
- 金额字段使用 decimal 类型,避免浮点数精度问题
- 时间戳格式:2006-01-02 15:04:05
- 建议每次请求建立新的连接
- 注意处理连接超时情况
- 响应码为"0000"时表示处理成功