2025-05-28 16:19:21 +08:00

6.6 KiB
Raw Permalink Blame History

医院支付系统接口文档

目录

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"时表示处理成功