注册用户终端信息,用于中继服务器多连接模式
需要在终端认证成功后,用户登录前调用该接口
◇ 1. 函数原型
virtual int RegisterUserSystemInfo(CThostFtdcUserSystemInfoField *pUserSystemInfo) = 0;
◇ 2. 参数
CThostFtdcUserSystemInfoField :用户系统信息
| 字段类型 | 字段名称 | 含义 | 值 |
|---|---|---|---|
| TThostFtdcBrokerIDType | BrokerID | 经纪公司代码 | 必填 |
| TThostFtdcUserIDType | UserID | 用户代码 | 必填 |
| TThostFtdcClientSystemInfoType | ClientSystemInfo | 用户端系统内部信息 | 必填 |
| TThostFtdcIPAddressType | ClientPublicIP | 终端IP端口 | 必填 |
| TThostFtdcTimeType | ClientLoginTime | 登录成功时间 | 必填 |
| TThostFtdcAppIDType | ClientAppID | App代码 | 必填 |
| TThostFtdcSystemInfoLenType | ClientSystemInfoLen | 用户端系统内部信息长度 | 必填 |
| TThostFtdcIPPortType | ClientIPPort | 终端IP端口 | 必填 |
| TThostFtdcOldIPAddressType | reserve1 | 保留的无效字段 | 否 |
| TThostFtdcClientLoginRemarkType | ClientLoginRemark | 客户登录备注2 | 否 |
ClientSystemInfoLen:存储的为加密后的用户终端系统内部信息的长度
ClientSystemInfo:存储的为加密后的用户终端系统内部信息。
ClientPublicIP:存储的为用户终端IP,由中继服务器采集和填写
ClientLoginTime:存储的为用户登录中继时间,由中继服务器采集和填写
ClientAppid:存储的为用户终端的appid,由中继服务器采集和填写
◇ 3. 返回
0 正确
-1 字段长度不对
-2 非CTP采集的终端信息
-3 当前终端类型非多对多中继
-5 字段中存在非法字符或者长度超限
-6 采集结果字段错误
-7 采集库的版本类型和生产库的不一致
◇ 4. 调用示例
//多对多中继终端使用流程
Step 1 终端侧采集信息 向中继发起登录 并将终端信息发送给中继
char pSystemInfo[344];
int len;
CTP_GetSystemInfo(pSystemInfo, len);
Step 2 中继收到终端的登录请求,发起终端认证
ReqAuthenticate();
Step 3 终端认证成功后,中继上报用户信息
RegisterUserSystemInfo()
{
char pSystemInfo[344];
int len;
////将从终端得到的信息赋值给下面结构体
CThostFtdcUserSystemInfoField field;
memset(&field, 0, sizeof(field));
strcpy(field.BrokerID, "9999");
strcpy(field.UserID, "00001");
memcpy(field.ClientSystemInfo, pSystemInfo, len);
field.ClientSystemInfoLen = len;
strcpy(field.ClientPublicIP, "127.0.0.1");
field.ClientIPPort = 65535;
strcpy(field.ClientLoginTime, "11:28:28");
strcpy(field.ClientAppID, "aaa");
m_pUserApi->RegisterUserSystemInfo(&field);
}
Step 4 中继上报成功后,发起登录
ReqUserLogin();
Step 5 中继登录成功
◇ 5. FAQ
采集信息上报时候总是提示operation not permitted,这是为什么?
|
如果提示operation not permitted,可能是AppID类型错误。例如,直连模式的AppID,却错误调用了SubmitUserSystemInfo。 此错误不会通过特定接口返回,只在标准输出中提示,例如直接在屏幕上打印出来。 |
不上报采集信息,会影响登录吗?
|
不影响登录,CTP不做控制,但这样不符合监管要求。 |
多对多中继代理模式的AppID怎么填?是填RelayAppID还是ClientAppID?
|
认证时用relayappid,上报时填客户端的appid。 |
使用中继模式,已经认证成功了。用工具查看不到采集获得的信息,但是在代码里看到的pSystemInfo不为空的。这可能是什么原因?
|
采集不落库,基本上都是采集的数据在转储时被截断了。 一定要使用memcpy,不要把采集的数据当成字符串,他不是字符串。 还有一种常见错误,ClientSystemInfoLen不按照采集库的返回值填写,而是自己用strlen()之类的函数去获取。 |

< 前页 回目录 后页 >