联想金融事业部:SOP报文API使用说明_第1页
联想金融事业部:SOP报文API使用说明_第2页
联想金融事业部:SOP报文API使用说明_第3页
联想金融事业部:SOP报文API使用说明_第4页
联想金融事业部:SOP报文API使用说明_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.联想电脑金融应用服务事业部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 - 失败*/int InitConEnv(int iUseEucp

2、Flag);/* 模块名 : 释放转换环境 参 数 : 无 返回值 : 无*/void DestoryConEnv(void);/* 模块名 : SOP报文拆包函数 参 数 : pRecordBuf - 报文 iRecordBufLen - 报文长度 pczPktFmt - 报文格式 返回值 : 0 - 成功 <0 - 失败 说 明 : pczPktFmt - 报文格式 格式文件名格式类型 格式类型: S - 上传报文,R - 下传报文 比如: O61400S,O61401R*/int ConvertPktToPool(char * pRecordBuf, int iRecordBufL

3、en, char *pczPktFmt);/* 模块名 : SOP报文打包函数 参 数 : pRecordBuf - 报文缓冲区 iRecordBufLen - 报文缓冲区长度 pczPktFmt - 报文格式 返回值 : 0 - 成功 <0 - 失败*/int ConvertPoolToPkt(char * pRecordBuf, int iRecordBufLen, char *pczPktFmt);/* 模块名 : 在POOL池中放入一字符串数据 参 数 : c_pczName - 数据项的名字 c_pczVal - 数据项的值 返回值 : 0 - 成功 -1 - 失败*/int

4、PPutStr(char *c_pczName,char *c_pczVal);/* 模块名 : 从POOL池中取出一字符串数据 参 数 : c_pczName - 数据项的名字 c_pczBuf - 数据缓冲区 c_iBufLen - 数据缓冲区长度 返回值 : >=0 - 数据项值的长度 -1 - 失败 -2 - 数据项未找到*/int PGetStr(char *c_pczName,char *c_pczBuf,int c_iBufLen);/* 模块名 : 在POOL池中放入一内存数据 参 数 : c_pczName - 数据项的名字 c_pVal - 数据项的值 c_iValL

5、en - 数据项值的长度 返回值 : 0 - 成功 -1 - 失败*/int PPutMem(char *c_pczName,void *c_pVal,int c_iValLen);/* 模块名 : 从POOL池中取出一内存数据 参 数 : c_pczName - 数据项的名字 c_pBuf - 数据缓冲区 c_iBufLen - 数据缓冲区长度 返回值 : >=0 - 数据项值的长度 -1 - 失败 -2 - 数据项未找到*/int PGetMem(char *c_pczName,void *c_pBuf,int c_iBufLen);/* 模块名 : 打印POOL池中的所有数据项 参

6、 数 : 无 返回值 : 无*/void POOL_PrintData();/* 模块名 : 在日志文件中打印POOL池中的所有数据项 参 数 : 无 返回值 : 无*/void POOL_TraceData();7. 常见错误1、 初始化转换环境失败原因:未设置环境变量SOPHOME2、 生成SOP的上/下传报文失败原因:首先比较两端的mapfile是否一致,其次检查通讯的返回报文是否正确,其他原因请查看log目录下的日志文件8. 有关打印对象的支持由于打印的行列坐标生成在SOP的报文中,而mafile文件中并不包含打印坐标的定义,为了增加对打印坐标的支持,在原mafile文件9列的基础上,

7、在后面增加3列(仅仅针对打印对象),分别为行坐标、列坐标、打印模式,而报文API也做了相应的改动。SOP对象格式中的打印属性(行坐标、列坐标、打印模式)在打印对象中才用到。至于打印控制命令,若没有特殊需要,不需使用。以下关于mapfile文件格式的介绍没有包含此新增3列。9. 有关表格的操作表格的格式如下:本报文API并不对表格对象的具体内容进行打/拆包,而是把表格内容的整段报文打入/读出POOL池。以上面的表格为例,拆包时,拆包函数把表格名开始的报文内容按照名字”F01”打入POOL池,由应用自行对表格内容进行处理;打包时,应用先自行组织表格内容,然后按照名字”F01”把表格内容打入POOL

8、池,再调用打包函数。本报文API提供两个对表格进行操作的通用函数,大家可以根据需要自行选择使用。 int SOP_PackForm(char *c_pczFormName,char c_cPrintFlag, char *c_pcBuf,int c_iBufLen,int *c_piRetLen); c_pczFormName - 表格名 c_cPrintFlag - 是否打印表格,'0'-非打印表格,'1'-打印表格,对于打印表格,格式文件中的字段定义后加多3列,分别为行坐标、列坐标、打印模式 c_pcBuf - 输出缓冲区 c_iBufLen - 输出缓冲区

9、长度 c_piRetLen - 实际表格报文的长度 int SOP_UnpackForm(char c_cPrintFlag,char *c_pcPkt,int c_iPktLen); c_cPrintFlag - 是否打印表格 c_pcPkt - 表格报文 c_iPktLen - 表格报文的长度 使用方法:/* 准备表格数据 */iRows=3;for (i=0;i<iRows;i+)sprintf(aczSuff,"_%d",i);POOL_SetPutSuff(aczSuff);/* 设置POOL池数据名后缀 */PPutStr("PAAAAA&quo

10、t;,"");PPutStr("PABBBB","");PPutStr("PACCCC","");POOL_SetPutSuff("");/* 清除POOL池数据名后缀,非常重要,出错退出时请不要忘记 */* 设置表格的行数 */PPutMem("F61401_Rows",&iRows,sizeof(int);/* 调用表格打包函数 */iRetCode=SOP_PackForm("F61401",'0',acB

11、uf,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(&

12、quot;F61401_Rows",&iRows,sizeof(int);/* 使用表格数据 */for (i=0;i<iRows;i+)sprintf(aczSuff,"_%d",i);POOL_SetGetSuff(aczSuff);/* 设置POOL池数据名后缀 */PGetStr("PAAAAA",);PGetStr("PABBBB",);PGetStr("PACCCC",);POOL_SetGetSuff("");/* 清除POOL池数据名后缀,非常重要,出错退

13、出时请不要忘记 */10. 有关应答报文的组织memset(aczBuf,0,sizeof(aczBuf);/* 系统信息头 system_head.cfg */* 报文长度由系统自动加入 */PPutMem("sysSADDR",aczBuf,4);/* 源地址 */PPutMem("sysDADDR",aczBuf,4);/* 目的地址 */PPutMem("sysRSRVD",aczBuf,1);/* 系统保留位 */aczTemp0=0x01;PPutMem("sysEFLAG",aczTemp,1);/*

14、 信息结束标志 */PPutMem("sysSEQNUM",aczBuf,2);/* 报文序号 */PPutMem("sysMACFLAG",aczBuf,1);/* 校验标志 */PPutMem("sysMACVALUE",aczBuf,8);/* 校验值 */* 公共交易头 cmtran_rcv_head.cfg */PPutStr("PDTRCD","6140");/* 交易代码 */PPutStr("PDLDTC","");/* 联动交易码 */P

15、PutStr("PDTRDT","20021010");/* 交易日期 */iNow=htonl(91020);/* 09:10:20 */PPutMem("PDTRTM",(char *)&iNow,4);/* 交易时间 */PPutStr("PDTLSQ","888888880001");/* 柜员流水号 */PGetMem("PDTRSQ",aczTemp,2);PPutMem("PDERTR",aczTemp,2);/* 出错交易序号 */

16、PPutStr("TPU_RetCode","AAAAAAA");/*返回码,不超过7位,AAAAAAA代表成功应答,其它为失败应答*/* 组织下传报文的交易数据 */* 生成SOP的下传报文 */iSendLen=ConvertPoolToPkt(aczSendMsg,sizeof(aczSendMsg),"O61401R");if ( iSendLen<0 )printf("生成SOP的下传报文失败(%d)n",iSendLen);DestoryConEnv();return -1;11. 有关失败应答报

17、文的组织首先,在公共交易头中的TPU_RetCode变量不是AAAAAAA,/* 组织失败应答报文的交易数据 */PPutStr(“TPU_Ctx1”,”ERR000”);/* 失败对象名,固定为”ERR000” */PPutStr(“TPU_Ctx2”,”-1”);/* 错误码,固定为”-1” */PPutStr(“TPU_RetMsg”,”XXXXX”);/* 返回信息,不超过82位 */成功应答报文和失败应答报文的打/拆包使用同一函数和参数。12. Mapfile的文件格式通讯打包数据的配置,包括对象配置文件和GRID配置文件,其格式为:第一行指明该对象的输出方向,WINDOW代表窗口,

18、PRINTER代表打印机,从第二行起格式如下:(可以有任意行)FLD|GRD:name len type scale align fillchar turnmode string encrypt(对于GRID,只能有FIELD,配置文件名就是GRID的名字),具体字段的含义由应用层定(都是由后台接口文件自动生成)。其意义分别是:FLD|GRD字段或表格标识,当为GRD时,后面只有name项namefield字段名称或表格Grid名称len字段长度,为实际的存储长度,如整型为4type字段类型,n-short,N-integer,L-long,D-decimal,S-char,Q-date ,T-time,H-hex,B-CHNscale小数点后位数align对齐方式,0-左对齐 1-右对齐 2-中对齐 3-无对齐fillchar填充字符turnmode转换模式,1-将传回的数据转为汉字金额2-转换为列表中的内容3-将数据转换为日期大写4-为空不打印5-不管为不为空都不打印string如果要转换成列表内容,则指明列表名,否则为空(填NULL)encrypt加密标志,1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论