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