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

294 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 医院支付系统接口文档
## 目录
- [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"时表示处理成功