客户如需要看穿式监管认证接入,可以参考以下范例:
1) CTP 交易 API 接口的 ReqAuthenticate 函数的参数中需要设置以下几个字段
BrokerID //期货公司代码
UserID //客户账号
AppID //客户交易终端软件的唯一标识码
AuthCode //从我司获取的认证码,为 16 位字符
2) CTP 交易 API 接口的 ReqUserLogin 函数的参数中需要设置以下几个字段
BrokerID //期货公司代码
UserID //客户账号
Password //密码
3) 在交易 API 的 OnFrontConnected 回调函数中,先进行认证,即调用 ReqAuthenticate
进行登录前认证
4) 在交易 API 的 OnRspAuthenticate 回调函数中,判断认证结果,如通过,再调用
ReqUserLogin 进行登录。(直连模式中,调用交易 API 接口的 ReqUserLogin 函数会
自动采集客户交易终端的信息,并连同登录请求信息一起被发送)
void SimpleTrader::OnFrontConnected( )
{
RequestAuth( ); //请求认证
}
void SimpleTrader::RequestAuth( )
{
CThostFtdcReqAuthenticateField authField;
memset(&authField, 0, sizeof(authField));
strcpy(authField.BrokerID, BrokerID); //期货公司代码
strcpy(authField.UserID, UserID); //客户账号
strcpy(authField.AppID, AppID); //客户交易终端软件的唯一标识码
strcpy(authField.AuthCode, AuthCode); //与上述标识配套取得的认证码
m_pTraderApi->ReqAuthenticate(&authField, 0);
}
void SimpleTrader::OnRspAuthenticate(CThostFtdcRspAuthenticateField *pRspAuthenticateField,
CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
if (pRspInfo != NULL)
{
if (pRspInfo->ErrorID == 0) //认证通过
{
RequestLogin( ); //请求登录
}
else
{
// 认证错误处理,做相应记录、提示
}
}
}
void SimpleTrader::RequestLogin( )
{
CThostFtdcReqUserLoginField traderLoginField;
memset(&traderLoginField, 0, sizeof(traderLoginField));
strcpy(traderLoginField.BrokerID, BrokerID); //期货公司代码
UserID, UserID); //客户账号
strcpy(traderLoginField.Password, Password); //密码
m_pTraderApi->ReqUserLogin( &traderLoginField, 0 ); //接口内部会采集客户交易终端信息(直连模式)
}
void SimpleTrader::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin,
CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
//对登录结果的处理
}
客户在程序中可能要留意以下错误代码,供参考:
errorid=0 prompt="CIP:正确
<errorid=3 prompt="CTP:不合法的登录"/>需要留意是否因仿真和生产的 Brokered不同,导致无法登录
<errorid=63 prompt="CIP:客户端认证失败"/>认证没有成功,需要检查标识报备是否完成,认证码是否有误
<errorid-64 prompt="CTP:客户端未认证"/>检査是否没有做认证就直接登录了