MIS-POS系统详细设计_第1页
MIS-POS系统详细设计_第2页
MIS-POS系统详细设计_第3页
MIS-POS系统详细设计_第4页
MIS-POS系统详细设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、MIS-POS系统V4.0系统详细设计一、 服务端系统设计1.1 操作系统选型操作系统:RedHat AS4.0数据库:Oracle XE(4G数据库、1CPU、2G内存)1.2 系统模块划分系统模块划分及相互关系如下图所示:系统主要包括接入管理进程(umsCliSrvX-X为编号,根据不同接口而定,4.0系统标准接口为0)、业务处理进程(umsMainSrv)、输出处理进程(umsExtSrvXX为编号,代表不同的外部转接系统,银联接口为0)以及加密进程(umsPinSrv)。输入管理进程负责接收来自收银终端的各类请求,是系统的业务发起端。来自收银端的交易分为两类,一类是业务类交易,输入管理

2、进程负责解析报文,并将其转换为系统内部接口,将其转至业务处理进程进行具体的处理,并等待应答(同步通讯);另一类是管理类交易,由输入管理进程直接处理(如自动查错交易等)。业务处理进程负责接受来自输入管理进程的任务,并根据不同的业务进行处理,包括具体的业务逻辑处理以及数据库操作等;当业务逻辑需要将交易发往银联或其它第三方外部机构进行处理时,该进程将通过内部接口将任务转至输出处理进程,并等待输出处理进程的应答(同步通讯)。输出处理进程负责将内部通讯接口转换为外部标准接口,并按照外部系统的标准与协议规范将交易发往外部系统,完成相应的业务功能。加密进程负责操作具体的加密设备,为上层应用逻辑提供必须的加密

3、指令集,与外部通过消息队列或其它形式通讯(视加密机的类型而定)。1.3 模块详细设计输入管理进程设计输入管理进程的处理流程如下图所示:对于业务类交易,本进程仅负责接口转换及转发,无具体业务逻辑;对于管理类交易,由本进程直接处理,主要包括以下管理类交易:Ø 自动查错交易:前台系统提供自我诊断功能,其中一部分是检测服务端系统的状态及与外部系统的网络状态等,自动查错交易即用来诊断以上问题,具体业务流程如下图所示:Step1:检测umsCliSrv。如建立连接,直接返回A0即可。Step2:检测umsMainSrv。向该进程发测试交易,返回测试结果。Step3:检测umsPinSrv及密钥设

4、置情况。调用加密库,利用指定的WorkKey及密钥索引做加密运算, 业务处理进程设计输出处理进程设计1.4 模块间交互控制输出处理进程与外部系统一般采用TCP通讯,超时时间50秒。业务处理进程与输出处理进程之间采用本地Socket方式通讯,超时时间53秒。输入管理进程与业务处理进程之间采用本地Socket方式通讯,超时时间56秒。前台系统与输入管理进程之间采用TCP通讯,超时时间60秒。任何进程产生超时都将向上一级系统(进程)返回内部返回码E00只有前台系统与业务处理进程能够发起冲正。业务处理进程在遇到接收应答超时、收到内部返回码E00时,将直接发起冲正,并返回内部返回码E00;当前台系统遇到

5、接收应答超时或交易成功但后续操作失败(如打印签购单失败)时,将发起冲正交易,前台系统收到E00不需再发起冲正。1.5 接口定义前台接口定义收银端接口报文由【报文长度报文头报文体MAC】的结构构成。【报文长度】为两个字节的网络字节序整数,具体定义如下:#define u_int16 unsigned short u_int16 iPackLen;【报文头】采用结构体定义的定长格式,报文头为每个交易所必须的公共部分,具体定义如下:typedef struct tagTUMS_CLIENT_PKGHEADchar saVersion2 + 1;/主版本号1byte副版本号1byte,如10char

6、saTransCode4 + 1;/交易代码(功能号)char saCrypt2 + 1;/加密方式1byte,0不加密,1DES,23DES,其它保留char saOperNo20 + 1;/收银员编号char saMchtCode20 + 1;/商户编号(系统内部编号,可以与银联的商户代码一致,也可自行分配,通过商户编号与收银台号对应一个机台,并在服务器端根据不同的应用映射真实的商户代码与终端号,如银联应用、储值卡应用等)char saCounterNo10 + 1;/收银台号(前台统一设置收银台号,由后台自动映射终端编号)char saSerial20 + 1;/标识该笔交易的序列号,应

7、答报文应原样返回,格式” YYYYMMDDHHMISS”,序列号+商户编号+终端号唯一标识一笔交易,后台应做校验,目前暂定14位,后补0char saRecNum4 + 1;/记录条数(报文体中含有多条信息时适用,一般报文填0001)char saNextPkg1 + 1;/是否有后续包(0没有,1有)char saRetNo3 + 1;/内部返回码(返回提示信息saRetMsg由于是可变长字段,一般定义在报文体的第一个字段中,不得超过250个字节)char saTrack2Len2 + 1;/二磁道信息长度,压缩之前的长度char saTrack224 + 1;/二磁道信息char iTra

8、ck33 + 1;/三磁道长度char saTrack364 + 1;/三磁道信息 TUMS_CLIENT_PKGHEAD;报文头共计176个字节【报文体】报文体采用竖线分割的变长结构(报文体中不得出现不可见字符,否则一律使用BCD码展开;最后一个字段之后没有分隔符),具体定义如下报文体的最大长度为1280个字节,不得越界。红色部分字段为必填项。【MAC】视交易而定,不需要MAC的交易,该字段为8个字节的/0银联POSP应用类交易(功能号头两位01)取工作密钥(向服务器取工作密钥)ums_cup_getworkkey(0101)上送字段名字段长度描述ums_cup_getworkkey(010

9、1)返回字段名字段长度描述saRetMsg/返回内容描述,可为空saPinKey16saMacKey16消费(需要MAC)ums_cup_pca(0102)上送字段名字段长度描述saAmt/单位元,小数点二位saEncPin16saKey32前台保存的PINKEY+MACKEYsaEnFlag10返回中文,1返回英文,涉及到的返回字段:saMchtName 、saBankName、saAdvsaAnnId20099循环取数,标识当前公告的版本,如版本不一致,则下发新的公告内容,如不需要公告,则传-1saExFlow20收银系统的小票流水号(二次开发时使用,记入流水库,与收银系统对帐匹配时使用)

10、返回内部错误时(返回码E开头):ums_cup_pca(0102)返回字段名字段长度描述saRetMsg/返回内容描述,可为空saAnnId2最新公告版本saAnnounce公告内容(不得含有|)返回码A开头:ums_cup_pca(0102)返回字段名字段长度描述saRetMsg/返回内容描述,可为空saAnnId2最新公告版本saAnnounce公告内容(不得含有|)saCupRetNo2银联POSP应用的返回码saCupRetMsg/应用返回码描述saCupRetHelp/应用返回错误时的提示操作saMchtCode15银联POSP应用的具体商户代码saMchtName/商户名称saTe

11、rmNo8银联POSP应用的终端号saBankCode8发卡银行编号saBankName/发卡银行名称saCardNo/卡号saRefSeq12中心流水saDate14交易日期YYYYMMDDHHMISSsaExDate4卡有效日期saBatchNo6批次号saSeqNo6流水号saAuthNo6授权号saAmt/交易金额,元为单位,小数点2位saAdv/签购单上打印的额外信息,如为空则不打印(譬如中奖信息等等);换行通过分割saSDBankCode8收单银行代码saSDBankName/收单银行名称iAppId/1-银联卡应用,2-银商储值卡,3-瑞富通卡注:·返回E07,则表示前

12、台存放密钥过期,新密钥通过报文PCA应答带回,存放在报文体saRetMsg中(32个字节,PINKEYMACKEY)中,前台应用应更新保存密钥,同时重新驱动密码键盘,提示用户再次输入密码并再次上送。如连续两次上送。·返回E00,表示交易超时,但前台应用不需发起冲正;只有在交易无应答或后续操作失败的情况下,可发起冲正。·内部返回码E开头,则表示系统内部错误,无需判断应用返回码;A开头,则系统操作无误,需判断应用返回码。内部返回码A01,应用返回码00,则表示已中奖,应提示收银员并将中奖信息saAdv打印在签购单上。消费冲正(需要MAC)ums_cup_ pcc(0152)上送

13、字段名字段长度描述saOrSerial14原交易序列号saAmt/单位元,小数点二位,用于校验ums_cup_ pcc(0152)返回字段名字段长度描述saRetMsg/返回内容描述,内部返回码E开头时有效,可为空注:冲正通过“序列号+商户编号+终端号”唯一标识原交易,其中商户编号及终端编号在报文头中,序列号在报文体中所有银联冲正应答结构都采用统一格式撤销(需要MAC)ums_cup_pra(0103)上送字段名字段长度描述saAmt/单位元,小数点二位saBatchNo6原批次号saSeqNo6原流水号saEncPin16密码密文saKey32前台保存的PINKEY+MACKEYsaEnFl

14、ag1同消费报文saAnnId2最新公告版本saExFlow20收银系统的小票流水号(二次开发时使用,记入流水库,与收银系统对帐匹配时使用)ums_cup_pra(0103)返回字段名字段长度描述saRetMsg/返回内容描述,可为空saAnnId2最新公告版本saAnnounce公告内容(不得含有|)saCupRetNo2银联POSP应用的返回码saCupRetMsg/应用返回码描述saCupRetHelp/应用返回错误时的提示操作saMchtCode15银联POSP应用的具体商户代码saMchtName/商户名称saTermNo8银联POSP应用的终端号saBankCode8发卡银行编号s

15、aBankName/发卡银行名称saCardNo/卡号saRefSeq12中心流水seDate14交易日期YYYYMMDDHHMISSsaExDate4卡有效日期saBatchNo6批次号saSeqNo6流水号saAuthNo6授权号saAmt/交易金额,元为单位,小数点2位saAdv/签购单上打印的额外信息,如为空则不打印(譬如中奖信息等等)saSDBankCode8收单银行代码saSDBankName/收单银行名称iAppId/1-银联卡应用,2-银商储值卡, 3-瑞富通卡注:·若服务器未找到匹配的原交易,则返回E08·同消费报文处理撤销冲正(需要MAC)ums_cup

16、_prc(0153)上送字段名字段长度描述saOrSerial14原交易序列号saAmt/单位元,小数点二位,用于校验ums_cup_prc(0153)返回字段名字段长度描述saRetMsg/返回内容描述,内部返回码E开头时有效,可为空注:冲正通过“序列号+商户编号+终端号”唯一标识原交易,其中商户编号及终端编号在报文头中,序列号在报文体中查询余额(需要MAC)ums_cup_inq(0104)上送字段名字段长度描述saEncPin16密码密文saKey32前台保存的PINKEY+MACKEYsaAnnId2最新公告版本ums_cup_inq(0104)返回字段名字段长度描述saRetMsg/

17、返回内容描述,可为空saAnnId2最新公告版本saAnnounce公告内容(不得含有|)saCupRetNo2银联POSP应用的返回码saCupRetMsg/应用返回码描述saCupRetHelp/应用返回错误时的提示操作saAmt/余额,元为单位,小数点2位查询交易明细(不需要MAC)ums_cup_schtxn(0120)上送字段名字段长度描述saAmt/单位元,小数点二位saBatchNo6原批次号saSeqNo6原流水号查询失败返回:ums_cup_schtxn(0120)返回字段名字段长度描述saRetMsg/返回内容描述,可为空查询成功返回(记录条数在报文头中指定,报文最大长度控

18、制明细笔数):ums_cup_schtxn(0120)返回字段名字段长度描述Lst1Lst2LstN每笔明细内容(通过分割)(148个字节一笔)saMchtCode15银联POSP应用的具体商户代码saTermNo8银联POSP应用的终端号saBankCode8发卡银行编号saBankName8发卡银行名称saCardNo20(max)卡号saRefSeq12中心流水saDate14交易日期YYYYMMDDHHMISSsaBatchNo6批次号saSeqNo6流水号saAuthNo6授权号saAmt13(max)交易金额,元为单位,小数点2位saOperNo20(max)操作员编号saTxnN

19、ame10(max)交易类型重打印查询(不需要MAC)ums_cup_reprint(0121)上送字段名字段长度描述saBatchNo6原批次号,如果为空,则系统自动查找当日上一笔交易返回saSeqNo6原流水号saEnFlag1同消费报文查询失败返回:ums_cup_reprint(0121)返回字段名字段长度描述saRetMsg/返回内容描述,可为空注:未找到原交易,返回E08。查询成功返回(与消费交易格式一致):ums_cup_reprint(0121)返回字段名字段长度描述saRetMsg/返回内容描述,可为空saCupRetNo2银联POSP应用的返回码saCupRetMsg/应用

20、返回码描述saCupRetHelp/应用返回错误时的提示操作saMchtCode15银联POSP应用的具体商户代码saMchtName/商户名称saTermNo8银联POSP应用的终端号saBankCode8发卡银行编号saBankName/发卡银行名称saCardNo/卡号saRefSeq12中心流水saDate14交易日期YYYYMMDDHHMISSsaExDate4卡有效日期saBatchNo6批次号saSeqNo6流水号saAuthNo6授权号saAmt/交易金额,元为单位,小数点2位saAdv/签购单上打印的额外信息,如为空则不打印(譬如中奖信息等等)saTrnName8交易类型sa

21、SDBankCode8收单银行代码saSDBankName/收单银行名称iAppId/1-银联卡应用,2-银商储值卡, 3-瑞富通卡终端换批服务器收到换批交易后,依次向中心发送结算、签退以及签到交易(如某一步交易无法成功,则直接返回错误步骤及原因,不需继续往下做),并将结果返回前台。前台在做完换批交易后,应联机做签到交易,更新密钥。ums_cup_chgBatch(0105)上送字段名字段长度描述ums_cup_chgBatch(0105)返回字段名字段长度描述saRetMsg/返回内容描述,可为空管理类交易(功能号头两位00)检测密码键盘密钥有效性ums_manage_chkPinPad(0

22、001)上送字段名字段长度描述saEncPin/加密的密码密文ums_manage_chkPinPad(0001)返回字段名字段长度描述saRetMsg/返回内容描述,可为空注:交易约定输入的密码明文为123456,PinKey密文:1234567890ABCDEF,服务器端应预先保留加密正确的密文结果(CheckValue),以便检测时核对;返回检测结果根据内部返回码判定,A00检测通过,E02检测不通过,返回其它则为其它错误,无法认定检测结果。检测网络状态ums_manage_chkNet(0002)上送字段名字段长度描述ums_manage_chkNet(0002)返回字段名字段长度描述

23、saRetMsg/返回内容描述,可为空iStep/检测步骤,详见注解注:检测网络分为几个步骤,返回iStep必须有返回值,一项未检测,iStep=0;iStep小于最后一项的步骤,说明中间存在问题,未全部检测通过·iStep=1:收银台到服务器网络通畅,后续步骤未检测·iStep=2:正在检测服务器到路由器网络,成功返回A00,失败返回E02·iStep=3:正在检测服务器到银联网络(发模拟报文检测),收到银联应答,则返回A00,否则返回E02检测服务器状态ums_manage_chkSrv(0003)上送字段名字段长度描述ums_manage_chkSrv(00

24、03)返回字段名字段长度描述saRetMsg/返回内容描述,可为空iStep/检测步骤,详见注解注:检测网络分为几个步骤,返回iStep必须有返回值,一项未检测,iStep=0;iStep小于最后一项的步骤,说明中间存在问题,未全部检测通过·iStep=1:检测数据库是否正常。后续步骤未检测。登陆成功,返回A00,无法登陆返回E04·iStep=2:检测加密进程状态。成功返回A00,失败返回E03·IStep=3:检测加密机主密钥。以123456为PIN明文,1234567890ABCDEF为PinKey密文,调用加密指令加密PIN,与预先设置的CheckValu

25、e进行比对,如全部检测通过,返回A00,否则返回E03,saRetMsg应包含检测哪组主密钥未通过的相关信息。·IStep=4:检测业务处理进程状态。通过发检测报文测试,收到应答返回A00,否则返回E02。收银机公告ums_manage_announce(0004)上送字段名字段长度描述idx/公告索引(可设置多个公告信息)ums_manage_announce(0004)返回字段名字段长度描述saRetMsg/返回内容描述,可为空saAnnId2最新公告版本saAnnounce公告内容(不得含有|)注:公告内容可设置多项,具体由监控管理平台提供设置界面,公告应能设置有效期、公告范围

26、(即收银台号范围),后台根据合法性校验,判别是否发送公告内容,需要发送返回A00,无公告信息最新saAnnId以及空的saAnnounce字段,否则返回其它错误。身份认证ums_manage_chkOper(0005)上送字段名字段长度描述saPass/收银员登陆密码(收银员号在报文头)iType/验证类别ums_manage_chkOper(0005)返回字段名字段长度描述saRetMsg/返回内容描述,可为空saOperName20(max)操作员姓名注:iType表示验证类别0收银员登陆认证1收银主管授权认证某些特殊的交易需要收银主管认证,譬如撤销时的主管认证等等。2系统管理员认证一些管

27、理类功能的授权认证,譬如设置系统参数等等。认证通过,返回A00,否则返回E06·普通收银员登陆,后台可配置是否校验密码,一个终端同时只能由一个收银员登陆,不能覆盖,只能由收银程序发送收银换班交易,统计信息清零后才能覆盖。系统初始化在收银程序启动时调用,用于与后台同步终端信息,包括:1、 检查终端参数设置有效性(如商户代码、终端号等)2、 检查该终端是否已有收银员登陆,若有则取回收银员信息,若无,则提示收银员登陆3、 取回公告信息ums_manage_initSys(0006)上送字段名字段长度描述saEnFlag1同消费报文注:报文头中saOperId为空ums_manage_ini

28、tSys(0006)返回字段名字段长度描述saRetMsg255(max)返回内容描述,可为空saOperId20(max)收银员号,若为空,前台提示收银员登陆,并做登陆交易saOperName20(max)收银员姓名saAnnId2最新公告版本saAnnounce256(max)公告内容(不得含有|)saFunc32开通功能saPinKey16最新的密钥saMacKey16最新的密钥saMchtName根据saEnFlag返回中文或英文商户名称开通功能字段说明:每一位代表一项功能是否开通,1开通,其它屏蔽具体功能位定义如下(以Delphi格式定义,后期可扩充): TOpenFuncDef =

29、 (ofdReserved, ofdPCA, ofdPRA, ofdSchTxn, ofdReprint, ofdManage, ofdAuthGroup, ofdInq, ofdChongZhi, ofdMaxField);收银员换班(不需要MAC)ums_manage_ChgOper(0007)上送字段名字段长度描述saPass/收银员登陆密码(收银员号在报文头),可根据后台配置是否验证密码失败返回:ums_manage_ChgOper(0007)返回字段名字段长度描述saRetMsg/返回内容描述,可为空注:换班由商户号终端号收银员号确定(规定一个商户号终端号下面只能由一个收银员号上机,

30、除非该收银员下机后,其它收银员才能继续上机操作)未登记收银员上机记录(一般均需先登陆),返回E09。成功返回:ums_manage_ChgOper(0007)返回字段名字段长度描述saRetMsg/返回内容描述,可为空saSum直接打印的要素saList1直接打印的要素saList2直接打印的要素直接打印的要素saListN直接打印的要素收银员换班1(不需要MAC)ums_manage_ChgOper1(0010)上送字段名字段长度描述saPass/收银员登陆密码(收银员号在报文头),可根据后台配置是否验证密码失败返回:ums_manage_ChgOper1(0007)返回字段名字段长度描述s

31、aRetMsg/返回内容描述,可为空注:换班由商户号终端号收银员号确定(规定一个商户号终端号下面只能由一个收银员号上机,除非该收银员下机后,其它收银员才能继续上机操作)未登记收银员上机记录(一般均需先登陆),返回E09。成功返回:ums_manage_ChgOper1(0010)返回字段名字段长度描述saRetMsg/返回内容描述,可为空iCnt后续list明细的数量saList1应用名称<FS>交易名称<FS>笔数<FS>金额,<fs>为0x1CsaList2同上同上saListN同上收银员改密ums_manage_chgPass(0008)上

32、送字段名字段长度描述saOldPass/旧密码(需要后台校验,看后台是否配置了校验密码)saNewPass/收银员新密码(收银员号在报文头)Ums_manage_chgPass(0008)返回字段名字段长度描述saRetMsg/返回内容描述,可为空EMV-POS应用类交易(功能号头两位03,如外卡业务)透明转发报文(需要MAC)ums_emv_trans(0301)上送字段名字段长度描述saPkg/不含头两位的长度字段,长度由包头确定返回A00时返回:ums_emv_trans(0301)返回字段名字段长度描述saPkg如不为A00,则为空注:saRetMsg返回错误信息复用返回包头结构中的s

33、aTrack3字段当返回包文头结构中saRetNo(内部返回码)字段为EXX时表示此交易需要POS终端发起冲正交易。POS交易上送服务器(功能号头两位05)POS交易上送服务器(需要MAC)ums_emv_trans(0501)上送字段名字段长度描述saRetCode2POSP交易处理返回信息,如交易成功为“00”,密码错误“55”等saBankCode8发卡银行代码saAcqCode8结算银行代码saCardNo19银行卡卡号saHostSer12POSP中心主机流水号saTrTime14POS交易时间,其格式为YYYYMMDDHHMMSSsaExpire4卡有效期saPatchNo6批次号

34、saPserial6流水号saAuthNo6授权号saAmt12交易金额,小数点saTrCode4交易类型,上送MIS请求交易类型,与EMV-POS上送保持一致saTrState2交易方式,01-正常交易, 02-拨号交易,03脱机交易saOldPserial6原流水号saOldAuthNo6原授权号saAcqDate4清算日期,格式MMDDsaAuthDate4授权日期,格式MMDDsaCardType6卡类型,如银联卡为CUPsaNeedRev200-无需冲正,01-需冲正交易saSrvRetCode3服务器返回代码saSrvRetMsg/服务器返回错误信息返回:ums_emv_trans

35、(0501)返回字段名字段长度描述saCupRetMsg+saCupRetHelp/返回A00时有效,放在一个字段内,格式:“【saCupRetMsg】【saCupRetHelp】”,如上送时saRetCode为00,则该字段为空注:saRetMsg返回错误信息复用返回包头结构中的saTrack3字段POS交易上送服务器(需要MAC)ums_emv_resendtrans(0502)上送字段名字段长度描述saRetCode2POSP交易处理返回信息,如交易成功为“00”,密码错误“55”等saBankCode8发卡银行代码saAcqCode8结算银行代码saCardNo19银行卡卡号saHos

36、tSer12POSP中心主机流水号saTrTime14POS交易时间,其格式为YYYYMMDDHHMMSSsaExpire4卡有效期saPatchNo6批次号saPserial6流水号saAuthNo6授权号saAmt12交易金额,小数点saTrCode4交易类型,上送MIS请求交易类型,与EMV-POS上送保持一致saTrState2交易方式,01-正常交易, 02-拨号交易,03脱机交易saOldPserial6原流水号saOldAuthNo6原授权号saAcqDate4清算日期,格式MMDDsaAuthDate4授权日期,格式MMDDsaCardType6卡类型,如银联卡为CUPsaNe

37、edRev200-无需冲正,01-需冲正交易saSrvRetCode3服务器返回代码saSrvRetMsg/服务器返回错误信息返回:ums_emv_resendtrans(0502)返回字段名字段长度描述saCupRetMsg+saCupRetHelp/返回A00时有效,放在一个字段内,格式:“【saCupRetMsg】【saCupRetHelp】”,如上送时saRetCode为00,则该字段为空注:saRetMsg返回错误信息复用返回包头结构中的saTrack3字段公共事业缴费交易(功能号头两位06,如充值通等)公共事业缴费(需要MAC)ums_emv_trans(0601)上送字段名字段长

38、度描述saTrcode2交易代码10签到交易 11缴费交易 12交易查询13交易统计14定制交易saPayWay1支付方式1-银行卡交易,0-现金,2-无磁(手输卡号)saBankCard20银行卡号saAmt13交易金额,带小数点saPin16银行卡密码saVender2服务提供商,详见附表saTtype2业务类型,详见附表saCustid30服务提供商的客户标识号saTrSer30合作方业务流水saF1128备用字段返回代码为E开头时:ums_emv_trans(0601)返回字段名字段长度描述saRetMsg64系统返回错误信息返回代码为A开头时:ums_emv_trans(0601)返

39、回字段名字段长度描述saRetMsg64系统返回错误信息saRetCode2中心返回码saSerial10终端流水saMchtId15中心商户号saTermId8中心终端号saBankCard20银行卡号saPbatch6批次号saPserial6流水号saAuthNo6授权号saCserial12中心流水号saAcqDate4清算日期saExpiry4有效期saInscode8发卡行saAcqcode8收单行saTser20业务受理流水 saPinfo1是否带打印信息,0-无,>0则为打印小票联数saPrtInfo640缴费等交易为打印信息,如为签到则为终端密钥匙,前40位32位pin

40、key+8位checkval,后40为32位mackey+8位checkval,均为BCD展开字符应该是16个字节注:查询交易的时候saTrSer如果不为空则表示为原交易终端流水,如果为空则读取saF1原交易外部流水号(原交易包头的流水),然后由后台系统根据此值取的原交易终端流水。附:算法说明磁道信息压缩算法普通磁道信息在传输过程中应根据银联POSP规范进行BCD码的转换,即将ASCII编码的磁道信息压缩为BCD码,其中=号需事先转换为D字符,原则上后台不保存磁道信息,如有需要,后台数据库只允许保存二磁道信息的前12个字节,作为交易索引MAC算法【报文头】+【报文体】部分按每8位异或,最后不足

41、部分使用0填充,结果通过BCD算法展开,取前8个字节作为MAC。内部接口定义兼容接口定义1.6 数据库定义1.7 数据字典定义内部返回码返回码含义A00交易成功A01交易成功,有中奖信息E00通讯超时E01非法交易类型E02内部检测不通过E03加密机操作失败E04数据库操作失败E05无公告信息E06身份认证失败E07终端密钥与主机存放密钥不符E08服务器上未找到对应原交易E09未登记收银员上机记录E10后台交易记录已成功(前台流水一致),应提示到后台查询并重打印该笔交易E99POS交易包转发成功,系统内部处理失败,需冲正外部返回码银联返回码定义:其它返回码定义:其它1.8 命名规范二、 客户端

42、系统设计2.1 系统选型操作系统:Windows(标准版)数据库:无2.2 系统模块划分客户端由单一主应用进程(umsClient.exe)构成。主程序分为底层硬件驱动层、应用逻辑层及主应用程序三层。底层硬件驱动层负责操作收银机外设,根据收银机的不同提供不同的外设驱动库;应用逻辑层负责具体的应用逻辑,包括操作硬件驱动、采集交易必须的输入内容、组织通讯逻辑报文、与后台服务端通讯等功能,应用逻辑根据不同的应用封装,以便于日后升级维护;主应用程序负责组织应用程序的框架、初始化应用环境等功能。2.3 模块详细设计硬件驱动层设计所有硬件驱动库必须包含以下公共接口:² 获取驱动库信息接口proc

43、edure UmsPub_vGetDrvInfo(var iType: Integer; saDesp: PChar);iType:输出,驱动库类型,0密码键盘、1刷卡器、2打印机saDesp:输出,驱动中文描述,用于快速判别驱动功能a)密码键盘驱动密码键盘驱动必须实现以下接口:² 初始化动态库环境外部应用在使用本驱动时必须首先调用,否则其它接口将直接报错 sint UmsPinPad_iInit(char *saDevName, int iBoudrate, int iMin, int iMax)参数:saDevName:密码键盘接口,如"COM1"iBoudr

44、ate:波特率,如1200、9600iMin:输入密码的最小长度,<0时不设置iMax:输入密码的最大长度,<1时不设置返回:0成功,<0失败² 设置工作密钥(此函数在随即改变工作密钥时使用)该函数在UmsPinPad_iReadPin中已联动调用,上层应用可根据情况选择是否调用int UmsPinPad_iSetWorkKey(char *saPinKey, char *saMacKey)参数: saPinKey:新的Pin工作密钥密文(已使用主密钥加密,NULL则不修改)saMacKey:新的Mac工作密钥密文(已使用主密钥加密,NULL则不修改)返回:0成功,

45、<0失败² 使密码键盘提示输入密码、显示金额并发出语音,使用ANSI9.8算法进行运算 int UmsPinPad_iReadPin(char *saEncPin, char *saPinKey, char *saCardNo, int iTimeOut, double dAmt)参数:saEncPin:函数返回的Ansi运算出的密文saPinKey:Pin工作密钥密文(为NULL则不修改工作密钥而使用以前的)saCardNo:参加ANSI9.8运算的卡号(如果为NULL则不使用ANSI9.8算法)iTimeOut:超时时间dAmt:在显示屏上显示的金额,如<0,则不显示

46、返回值:0 成功,非0 失败² 下传数据使用ECB算法计算MAC(数据长度不得大于256字节) Int UmsPinPad_iGenMac(char *saMacKey, int iDataLen, char *saDataBuf, int iTimeOut, char *saMacBuf)参数:MacKeyTmp:工作密钥的密文iDataLen:数据长度(不超过256字节,超过按前256个字节计算MAC)saDataBuf:数据iTimeOut:超时时间saMacBuf:返回MAC数据(8字节)返回值:0成功,非0失败b) 刷卡器驱动刷卡器驱动必须实现以下接口:² 获取磁

47、道信息通用接口function UmsTrack_iGetTrack(saDevName: PChar; iBoudrate, iMaxWaitTime, iCfgTrackNum: Integer;var iLen2, iLen3: Integer; saTrack2, saTrack3: PChar): Integer; stdcall;iMaxWaitTime:输入,最大等待刷卡时间(单位秒),一般为18iCfgTrackNum:输入,刷卡器回车数目,一般为1或2iLen2、iLen3:输出,2、3磁道长度saTrack2、saTrack3:输出,2、3磁道信息c) 打印机驱动²

48、; 初始化驱动(一些驱动需要打开端口及其它初始化操作)上层应用调用打印驱动必须首先调用初始化procedure UmsPrn_vInitPrn(iCom: Integer);stdcall;iCom:端口号,如COM1(或PRT1),则iCom=1,² 关闭驱动(一些驱动需要关闭端口,打印结束之后调用)上层应用调用打印驱动后,必须调用procedure UmsPrn_vClosePrn;stdcall;² 打印一行信息procedure UmsPrn_vPrintLine(const prnCom: Integer; info: PChar);stdcall;prnCom:端口地址(写端口模式适用),如888,1000等info:要打印的内容² 使用软字库打印一行信息procedure UmsPrn_vPrintLi

温馨提示

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

评论

0/150

提交评论