恒生T2SDK下单例子

分享到:
  来源:急速科技  发布时间:2013-10-15  浏览次数:8771

  恒生T2SDK下单例子 T2SDK demo

     最近在做恒生接口T2SDK的二次开发,根据接口提供的demo和文档,测试登录和查询功能都没有问题。然后自己根据demo进行测试333002(委托下单)功能,但是结果出现了一个奇葩的问题:要么提示【无此客户操作权限】,要么提示Unkown error !!

让人摸不着头脑啊~~  抓狂中。。。 想想出现错误嘛,总的来个提示。。。。 由于本人第一次接触金融这方面的开发,信心得到极大的推惨啊,  没办法还得找出原因啊!!!

查了很多资料(其实资料也很少),问了恒生的技术支持,得到的答复是说有可能是参数的问题。那就只好修改参数了,参考接口文档和股票证券的代码(上交所和深交所的区别),吧参数全都动了一遍问题还是依旧,汗~~~  然后又跟技术支持沟通,发现参数中的stock_account和client_id不一样,而fund_account和client_id的值是一样的(这里还发现一个奇葩的问题参数user_token文档中指定的char长度为40,而调用功能号331100(用户登录)返回的长度却有44位,这个到目前为止还不知道原因),然后再stock_account中输入正确的值(上交所和深交所的stock_account不一样,所以根据不同的stock_code这个值要变化,设定参数的时候要注意),这个问题解决之后,由于user_token可能有问题,所以这个参数就空着不输入了。最后检查了一遍参数,并对照了开发文档,觉得应该没有问题了,最后debug。。。 心里真是又惊有喜 ~~~  但是出来的错误还是依旧@##@# 悲催,这下感觉自己都陷入绝境,头顶笼罩着一篇乌云,估计不仅仅是参数的问题了。没办法只好苦苦哀求技术支持了,结果还好技术回复我说有个家伙碰到跟我一样的问题,而他已经解决了这个问题。仿佛绝望的心情又看到了一片光明,振作精神,在经过漫长的等待之后终于得到了下单的demo(在这里感谢要特别感谢这位技术支持和那位解决问题的仁兄)。

   过了遍代码后突然发现以下代码(请看图片),激动人心的时刻终于到了(码农的屌态)。原来是少了两个参数,没办法找了很多资料都没有找到这方面的资料。调试结果你懂得,返回了正常的错误信息。

下面附上下单部分的代码有需要的朋友可以参考下,在此再次感谢大家的帮忙,特别感谢恒生的技术支持和那位解决问题的仁兄。

//获取打包器

IF2Packer* pack = NewPacker(2);
 
pack->AddRef();
 
//创建一个业务包
pack->BeginPack();
 
//增加字段名称
pack->AddField("identity_type",'C');
pack->AddField("op_branch_no",'S');
pack->AddField("op_entrust_way",'C');
pack->AddField("op_station",'S');
pack->AddField("password",'S');//密码
pack->AddField("branch_no",'S');
pack->AddField("fund_account",'S');//资金账户
 
pack->AddField("exchange_type",'C');//交易类别
pack->AddField("stock_account",'S');
pack->AddField("stock_code",'S');//orderfield.StockCode
pack->AddField("entrust_amount",'S');
pack->AddField("entrust_price",'S');
pack->AddField("entrust_bs",'C');
pack->AddField("entrust_prop",'C');
pack->AddField("batch_no",'S');
pack->AddField("client_id",'S');
pack->AddField("password_type",'C');
pack->AddField("user_token",'S');
//pack->AddField("entrust_no",'S');//委托编号
 
//增加字段的值  
pack->AddChar('1');  
pack->AddStr("2901");//op_branch_no
pack->AddChar('7');//op_entrust_way
pack->AddStr("1234567890"); //op_station
pack->AddStr("********"); //密码 password,在此以星号代替
pack->AddStr("2901");//branch_no
pack->AddStr("2901xxxxxxxxxxxx"); //资金账户,以实际为准
 
pack->AddChar('2');//exchange_type  1=上海  2=深圳
//上海 A*********  //深圳 00********
pack->AddStr("00********"); //stock_account 股东账号
pack->AddStr("000016");//orderfield.StockCode    由于000开头的是深交所的所以要用深交所的账号
pack->AddStr("100"); //entrust_amount  委托数量
pack->AddStr("1"); //entrust_price
pack->AddChar('1'); //entrust_bs  1买 2 卖
pack->AddChar('0'); //entrust_prop
pack->AddStr(""); //batch_no  100
pack->AddStr("**********"); //client_id  在此以星号代替
pack->AddChar('2');//password_type
pack->AddStr("");//user_token
//pack->AddStr("");//entrust_no  100000
 
pack->EndPack();
 
void *Pointer = NULL;
 
//sysnode_id 在用户登录后的返回值中
// 333002是功能号  
//if ((ret = lpConnection->PRI_SendBiz(333002, pack)) < 0)
if ((ret = lpConnection->PRI_SendBiz(333002, pack, 0, sysnode_id)) < 0)
{
puts(lpConnection->PRI_GetErrorMsg(ret));
}
else
{
// 默认超时时间为1秒
ret = lpConnection->PRI_RecvBiz(ret, &Pointer);
 
switch (ret)
{
case 0:
{
//puts("业务操作成功。");
ShowPacket((IF2UnPacker *)Pointer);
break;
}
 
case 1:
{
puts("业务操作失败。");
ShowPacket((IF2UnPacker *)Pointer);
break;
}
 
case 2:
{
printf(lpConnection->PRI_GetErrorMsg(ret));
//puts((char *)Pointer);
break;
}
 
case 3:
{
//puts("业务包解包失败。");
break;
}
 
default:
{
puts(lpConnection->PRI_GetErrorMsg(ret));
break;
}
}
}
 
//free(pack->GetPackBuf());
pack->Release();
 

知识文章分类

C/C++

阅读排行