HospitalPay-Go/docs/快速参考.md

167 lines
4.9 KiB
Markdown

# HospitalPay-Go Socket 接口快速参考
## 消息格式
```
[长度(4位)][功能码(4位)][医院编码(4位)][时间戳(19位)][JSON数据]
```
## 功能码列表
| 功能码 | 功能名称 | 请求参数 | 响应数据 |
|--------|----------|----------|----------|
| 0001 | 入院登记 | `{"FCode":"string"}` | CriminalInfo |
| 0002 | 消费额度查询 | `{"FCode":"string"}` | ConsumeQuota |
| 0003 | 出院处理 | `{"FCode":"string"}` | 成功消息 |
| 0004 | 消费记录 | ConsumeRecord | 成功消息 |
| 0005 | 实时余额查询 | `{"FCode":"string"}` | CriminalInfo |
| 0006 | 发票同步 | `{"InvoiceList":["string"]}` | InvoiceSyncResult[] |
## 错误码
| 错误码 | 说明 |
|--------|------|
| 0000 | 成功 |
| 0005 | 未找到病人信息 |
| 0006 | 入院处理失败 |
| 0007 | 病人已入院 |
| 0008 | 系统异常 |
| 0009 | 请求参数错误 |
## 数据结构
### CriminalInfo (病人信息)
```json
{
"FCode": "string", // 病人编号
"FName": "string", // 病人姓名
"AmountA": 100.00, // A类金额
"AmountB": 50.00, // B类金额
"AmountC": 150.00, // C类金额
"BankAccNo": "string", // 银行账号
"BankAmount": 1000.00, // 银行余额
"Fflag": 0, // 状态标志
"Flimitflag": 0, // 限制标志
"Flimitamt": 0.00 // 限制金额
}
```
### ConsumeQuota (消费额度)
```json
{
"AmountA": 50.00, // A类消费金额
"AmountB": 30.00, // B类消费金额
"FreeAmountA": 0.00, // A类可用金额
"FreeAmountB": 0.00, // B类可用金额
"Checkflag": 0, // 检查标志
"FCode": "string", // 病人编号
"FCriminal": "string", // 病人姓名
"Flag": 0 // 状态标志
}
```
### ConsumeRecord (消费记录)
```json
{
"FCode": "string", // 病人编号
"InvoiceNo": "string", // 发票号
"AmountA": 50.00, // A类金额
"AmountB": 30.00, // B类金额
"Amount": 80.00, // 总金额
"FreeAmountA": 0.00, // A类可用金额
"FreeAmountB": 0.00, // B类可用金额
"CrtDate": "2024-01-01T10:00:00Z", // 创建日期
"FCriminal": "string", // 病人姓名
"CardCode": "string", // 卡号
"OrderId": 123456 // 订单ID
}
```
### InvoiceSyncResult (发票同步结果)
```json
{
"BankFlag": 2, // 银行标志
"CAmount": 100.00, // 金额
"FCode": "3516022343", // 病人编号
"Origid": "INV001", // 原始发票号
"SendDate": "2024-01-01T10:00:00Z" // 发送日期
}
```
## 快速示例
### 入院登记
```
请求: 00540001H0012024-01-15 10:30:00{"FCode":"3516022343"}
响应: {"ResultCode":"0000","ResultData":{...}}
```
### 消费记录
```
请求: 01840004H0012024-01-15 10:30:00{"FCode":"3516022343","InvoiceNo":"INV001","AmountA":50.00,"AmountB":30.00,"Amount":80.00,"FreeAmountA":0.00,"FreeAmountB":0.00,"CrtDate":"2024-01-15T10:30:00Z","FCriminal":"测试病人","CardCode":"CARD001","OrderId":123456}
响应: {"ResultCode":"0000","ResultMsg":"消费记录保存成功"}
```
### 发票同步
```
请求: 00800006H0012024-01-15 10:30:00{"InvoiceList":["INV001","INV002"]}
响应: {"ResultCode":"0000","ResultData":[...]}
```
## 客户端代码模板
### Go 客户端
```go
func sendRequest(functionCode, hospitalCode, data string) (string, error) {
conn, err := net.Dial("tcp", "localhost:8080")
if err != nil {
return "", err
}
defer conn.Close()
timestamp := time.Now().Format("2006-01-02 15:04:05")
message := fmt.Sprintf("%s%s%s%s", functionCode, hospitalCode, timestamp, data)
fullMessage := fmt.Sprintf("%04d%s", len(message), message)
_, err = conn.Write([]byte(fullMessage))
if err != nil {
return "", err
}
buffer := make([]byte, 4096)
n, err := conn.Read(buffer)
if err != nil {
return "", err
}
return string(buffer[:n]), nil
}
```
### Python 客户端
```python
def send_request(function_code, hospital_code, data):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.connect(('localhost', 8080))
timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
json_data = json.dumps(data)
message = f"{function_code}{hospital_code}{timestamp}{json_data}"
full_message = f"{len(message):04d}{message}"
sock.send(full_message.encode('utf-8'))
response = sock.recv(4096).decode('utf-8')
length = int(response[:4])
json_response = response[4:4+length]
return json.loads(json_response)
finally:
sock.close()
```
## 常见问题
1. **连接被拒绝**: 检查服务器状态和端口
2. **医院编码错误**: 确认配置文件中的医院编码
3. **消息格式错误**: 检查长度计算和JSON格式
4. **超时**: 检查网络连接和服务器负载