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 (病人信息)
{
"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 (消费额度)
{
"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 (消费记录)
{
"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 (发票同步结果)
{
"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 客户端
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 客户端
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()
常见问题
- 连接被拒绝: 检查服务器状态和端口
- 医院编码错误: 确认配置文件中的医院编码
- 消息格式错误: 检查长度计算和JSON格式
- 超时: 检查网络连接和服务器负载