联想金融事业部SOP报文API使用说明.docx
- 文档编号:6968703
- 上传时间:2023-01-13
- 格式:DOCX
- 页数:11
- 大小:103.74KB
联想金融事业部SOP报文API使用说明.docx
《联想金融事业部SOP报文API使用说明.docx》由会员分享,可在线阅读,更多相关《联想金融事业部SOP报文API使用说明.docx(11页珍藏版)》请在冰豆网上搜索。
联想金融事业部SOP报文API使用说明
SOP报文API使用说明
1.概述
SOP报文API是为了方便在外挂系统中使用SOP报文而提供的一套库函数,以节省第三方的开发时间。
2.SOP报文结构
请参照《SOP通讯规则》。
3.总体结构
4.目录结构
syscfg—系统配置文件
mapfile—交易格式文件
log—日志
api—SOP报文API及相关文档
5.环境变量
SOPHOME—SOP目录
6.API函数说明
/******************************************************
模块名:
初始化转换环境
参数:
iUseEucpFlag-转换类型,固定为USE_COP
返回值:
0-成功
<0-失败
******************************************************/
intInitConEnv(intiUseEucpFlag);
/******************************************************
模块名:
释放转换环境
参数:
无
返回值:
无
******************************************************/
voidDestoryConEnv(void);
/******************************************************
模块名:
SOP报文拆包函数
参数:
pRecordBuf-报文
iRecordBufLen-报文长度
pczPktFmt-报文格式
返回值:
0-成功
<0-失败
说明:
pczPktFmt-报文格式
格式文件名@格式类型
格式类型:
S-上传报文,R-下传报文
比如:
O61400@S,O61401@R
******************************************************/
intConvertPktToPool(char*pRecordBuf,
intiRecordBufLen,
char*pczPktFmt);
/******************************************************
模块名:
SOP报文打包函数
参数:
pRecordBuf-报文缓冲区
iRecordBufLen-报文缓冲区长度
pczPktFmt-报文格式
返回值:
0-成功
<0-失败
******************************************************/
intConvertPoolToPkt(char*pRecordBuf,
intiRecordBufLen,
char*pczPktFmt);
/******************************************************
模块名:
在POOL池中放入一字符串数据
参数:
c_pczName-数据项的名字
c_pczVal-数据项的值
返回值:
0-成功
-1-失败
******************************************************/
intPPutStr(char*c_pczName,char*c_pczVal);
/******************************************************
模块名:
从POOL池中取出一字符串数据
参数:
c_pczName-数据项的名字
c_pczBuf-数据缓冲区
c_iBufLen-数据缓冲区长度
返回值:
>=0-数据项值的长度
-1-失败
-2-数据项未找到
******************************************************/
intPGetStr(char*c_pczName,char*c_pczBuf,intc_iBufLen);
/******************************************************
模块名:
在POOL池中放入一内存数据
参数:
c_pczName-数据项的名字
c_pVal-数据项的值
c_iValLen-数据项值的长度
返回值:
0-成功
-1-失败
******************************************************/
intPPutMem(char*c_pczName,void*c_pVal,intc_iValLen);
/******************************************************
模块名:
从POOL池中取出一内存数据
参数:
c_pczName-数据项的名字
c_pBuf-数据缓冲区
c_iBufLen-数据缓冲区长度
返回值:
>=0-数据项值的长度
-1-失败
-2-数据项未找到
******************************************************/
intPGetMem(char*c_pczName,void*c_pBuf,intc_iBufLen);
/******************************************************
模块名:
打印POOL池中的所有数据项
参数:
无
返回值:
无
******************************************************/
voidPOOL_PrintData();
/******************************************************
模块名:
在日志文件中打印POOL池中的所有数据项
参数:
无
返回值:
无
******************************************************/
voidPOOL_TraceData();
7.常见错误
1、初始化转换环境失败
原因:
未设置环境变量SOPHOME
2、生成SOP的上/下传报文失败
原因:
首先比较两端的mapfile是否一致,其次检查通讯的返回报文是否正确,其他原因请查看log目录下的日志文件
8.有关打印对象的支持
由于打印的行列坐标生成在SOP的报文中,而mafile文件中并不包含打印坐标的定义,为了增加对打印坐标的支持,在原mafile文件9列的基础上,在后面增加3列(仅仅针对打印对象),分别为行坐标、列坐标、打印模式,而报文API也做了相应的改动。
SOP对象格式中的打印属性(行坐标、列坐标、打印模式)在打印对象中才用到。
至于打印控制命令,若没有特殊需要,不需使用。
以下关于mapfile文件格式的介绍没有包含此新增3列。
9.有关表格的操作
表格的格式如下:
本报文API并不对表格对象的具体内容进行打/拆包,而是把表格内容的整段报文打入/读出POOL池。
以上面的表格为例,拆包时,拆包函数把表格名开始的报文内容按照名字”F01”打入POOL池,由应用自行对表格内容进行处理;打包时,应用先自行组织表格内容,然后按照名字”F01”把表格内容打入POOL池,再调用打包函数。
本报文API提供两个对表格进行操作的通用函数,大家可以根据需要自行选择使用。
intSOP_PackForm(char*c_pczFormName,charc_cPrintFlag,
char*c_pcBuf,intc_iBufLen,int*c_piRetLen);
c_pczFormName--表格名
c_cPrintFlag--是否打印表格,'0'-非打印表格,'1'-打印表格,对于打印表格,格式文件中的字段定义后加多3列,分别为行坐标、列坐标、打印模式
c_pcBuf--输出缓冲区
c_iBufLen--输出缓冲区长度
c_piRetLen--实际表格报文的长度
intSOP_UnpackForm(charc_cPrintFlag,char*c_pcPkt,intc_iPktLen);
c_cPrintFlag--是否打印表格
c_pcPkt--表格报文
c_iPktLen--表格报文的长度
使用方法:
/*准备表格数据*/
iRows=3;
for(i=0;i { sprintf(aczSuff,"_%d",i); POOL_SetPutSuff(aczSuff);/*设置POOL池数据名后缀*/ PPutStr("PAAAAA",""); PPutStr("PABBBB",""); PPutStr("PACCCC",""); POOL_SetPutSuff("");/*清除POOL池数据名后缀,非常重要,出错退出时请不要忘记*/ } /*设置表格的行数*/ PPutMem("F61401_Rows",&iRows,sizeof(int)); /*调用表格打包函数*/ iRetCode=SOP_PackForm("F61401",'0',acBuf,sizeof(acBuf),&iLen); if(iRetCode<0) return-1; /*把表格报文放入POOL池*/ PPutMem("F61401",acBuf,iLen); /*从POOL池中取出表格报文*/ iLen=PGetMem("F61401",acPkt,sizeof(acPkt)); /*调用表格拆包函数*/ iRetCode=SOP_UnpackForm('0',acPkt,iLen); if(iRetCode<0) return-1; /*取出表格的行数*/ PGetMem("F61401_Rows",&iRows,sizeof(int)); /*使用表格数据*/ for(i=0;i { sprintf(aczSuff,"_%d",i); POOL_SetGetSuff(aczSuff);/*设置POOL池数据名后缀*/ PGetStr("PAAAAA",,); PGetStr("PABBBB",,); PGetStr("PACCCC",,); POOL_SetGetSuff("");/*清除POOL池数据名后缀,非常重要,出错退出时请不要忘记*/ } 10.有关应答报文的组织 memset(aczBuf,0,sizeof(aczBuf)); /*系统信息头system_head.cfg*/ /*报文长度由系统自动加入*/ PPutMem("sysSADDR",aczBuf,4);/*源地址*/ PPutMem("sysDADDR",aczBuf,4);/*目的地址*/ PPutMem("sysRSRVD",aczBuf,1);/*系统保留位*/ aczTemp[0]=0x01; PPutMem("sysEFLAG",aczTemp,1);/*信息结束标志*/ PPutMem("sysSEQNUM",aczBuf,2);/*报文序号*/ PPutMem("sysMACFLAG",aczBuf,1);/*校验标志*/ PPutMem("sysMACVALUE",aczBuf,8);/*校验值*/ /*公共交易头cmtran_rcv_head.cfg*/ PPutStr("PDTRCD","6140");/*交易代码*/ PPutStr("PDLDTC","");/*联动交易码*/ PPutStr("PDTRDT","20021010");/*交易日期*/ iNow=htonl(91020);/*09: 10: 20*/ PPutMem("PDTRTM",(char*)&iNow,4);/*交易时间*/ PPutStr("PDTLSQ","888888880001");/*柜员流水号*/ PGetMem("PDTRSQ",aczTemp,2); PPutMem("PDERTR",aczTemp,2);/*出错交易序号*/ PPutStr("TPU_RetCode","AAAAAAA");/*返回码,不超过7位,AAAAAAA代表成功应答,其它为失败应答*/ /*组织下传报文的交易数据*/ /*生成SOP的下传报文*/ iSendLen=ConvertPoolToPkt(aczSendMsg,sizeof(aczSendMsg),"O61401@R"); if(iSendLen<0) { printf("生成SOP的下传报文失败(%d)\n",iSendLen); DestoryConEnv(); return-1; } 11.有关失败应答报文的组织 首先,在公共交易头中的TPU_RetCode变量不是AAAAAAA, /*组织失败应答报文的交易数据*/ PPutStr(“TPU_Ctx1”,”ERR000”);/*失败对象名,固定为”ERR000”*/ PPutStr(“TPU_Ctx2”,”-1”);/*错误码,固定为”-1”*/ PPutStr(“TPU_RetMsg”,”XXXXX”);/*返回信息,不超过82位*/ 成功应答报文和失败应答报文的打/拆包使用同一函数和参数。 12.Mapfile的文件格式 通讯打包数据的配置,包括对象配置文件和GRID配置文件,其格式为: 第一行指明该对象的输出方向,WINDOW代表窗口,PRINTER代表打印机,从第二行起格式如下: (可以有任意行) {FLD|GRD}: namelentypescalealignfillcharturnmodestringencrypt(对于GRID,只能有FIELD,配置文件名就是GRID的名字),具体字段的含义由应用层定(都是由后台接口文件自动生成)。 其意义分别是: FLD|GRD字段或表格标识,当为GRD时,后面只有name项 namefield字段名称或表格Grid名称 len字段长度,为实际的存储长度,如整型为4 type字段类型,n-short,N-integer,L-long, D-decimal,S-char,Q-date, T-time,H-hex,B-CHN scale小数点后位数 align对齐方式,0-左对齐1-右对齐2-中对齐3-无对齐 fillchar填充字符 turnmode转换模式,1-将传回的数据转为汉字金额 2-转换为列表中的内容 3-将数据转换为日期大写 4-为空不打印 5-不管为不为空都不打印 string如果要转换成列表内容,则指明列表名,否则为空(填NULL) encrypt加密标志,1-加密,0-不加密 例如: O93132 WINDOW FLD: GUIYDH8S0000NULL0 FLD: GUIYXM22S0000NULL0 FLD: QISHRQ8Q0000NULL0 FLD: ZZHIRQ8Q0000NULL0 GRD: F931301 F931301 PRINTER FLD: HUOBDH2S0000NULL0 FLD: JIEDBZ1S0000NULL0 FLD: XJDFSE13D2000NULL0 FLD: XJDFBS7L0000NULL0 FLD: ZZDFSE13D2000NULL0 FLD: ZZDFBS7L0000NULL0 13.表格报文(SOP格式)的打包/拆包 如果你对自己打/拆SOP格式的表格报文没有把握,可以使用APP_PUB_PackForm和APP_PUB_UnpackForm,头文件在applib.h中,库文件为libapppub.a,源程序在src/pub/applib.c中。 函数原形如下: 14.其它 1、Tuxedo的buffer类型使用CARRAY 2、若需要调试拆包前或打包后的报文,请置上环境变量SOPDEBUG,报文日志在$SOPHOME/log/sop.log中 3、若应答报文中包含多个对象,用,隔开,比如O10012,O10013@R 4、资料仅供参考 5、 6、 7、资料仅供参考 8、 9、 10、
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 联想 金融 事业部 SOP 报文 API 使用说明
![提示](https://static.bdocx.com/images/bang_tan.gif)