消费交易允许持卡人使用电子存折或电子钱包的余额进行购物或获取服务.
特点:
1) --可以在销售点终端(POS)上脱机进行
2) --使用电子存折进行的消费交易必须提交个人识别码(PIN),使用电子钱包则不需要
步骤:
1) --参考复合应用消费交易
CPURESET() JE=00000001//消费金额 DPK= 00000000000000000000000000000055 00A40000021001 805C000204(消费前金额+9000) //(见JR/T 0025.2的5.2.9条) 805001020B+01+JE+000000000001+0F(XYSJ2+9000) YE=COPY(XYSJ2,1,8) //ED或EP余额 4 TJJYXH=COPY(XYSJ2,9,4) //脱机交易序号 2 //透支限额 3 //密钥算法版本号(DPK) 1 //算法标识(DPK) 1 WSJS=LAST(XYSJ2,8) //伪随机数(IC卡) 4 ECB_3DES_EN(WSJS+TJJYXH+0011,DPK,SESLK) //交易金额 + 交易类型标识 + 终端机编号 + 交易日期(终端)+ 交易时间(终端) 3DES_MAC(0000000000000000+JE+06+000000000001+20090225+153030+800000000000,SESLK,MAC1) //DEBIT FOR PURCHASE/CASH WITHDRAW(见JR/T 0025.2的5.2.3条) //终端交易序号 + 交易日期(终端)+ 交易时间(终端)+ MAC1 805401000F+00000011+20090225+153030+MAC1+08 //TAC 4 //MAC2 4 805C000204(消费后金额+9000)
CPURESET() 00A40000021001 //DPK 消费密钥 DPK=00000000000000000000000000000055 JE=00000001 //INTIALIZE FOR CAPP PURCHASE(见JR/T 0025.9的5.2.12条) 805003020B+01+JE+000000000001+0F(DATA+9000) YE=COPY(DATA,1,8) //电子钱包余额 4 XH=COPY(DATA,9,4) //电子钱包交易序号 2 //透支限额 3 //密钥算法版本号(DPK) 1 //密钥标识(DPK) 1 WS=LAST(DATA,8) //伪随机数(IC卡) 4 ZDJYXH=00000001 //计算过程密钥SESLK ECB_3DES_EN(WS+XH+0001,DPK,SESLK) //计算MAC1,数据为:交易金额 + 交易类型(社保要转为ACSII码) + 终端机编号 + 交易日期 + 交易时间 + 80(补足长度) 3DES_MAC(0000000000000000+JE+09+000000000001+20110106+120000+800000000000,SESLK,MAC1) //UPDATE CAPP DATA CACHE 80DC01C8+20+011E00030B200905260000000000000000000000000000000000000000000000 //DEBIT FOR CAPP PURCHASE 805401000F+ZDJYXH+20110106+120000+MAC1+08
特点:
1) --必须在金融终端上联机进行;
2) --必须提交个人识别码(PIN)
步骤:
1) --终端:发出初始化修改透支现额(INITIALIZE FOR UPDATE)命令启动修改透支限额交易
2) --IC卡:检查是否支持提供的密钥索引号(NO:9403),产生一个伪随机数(ICC)、一个过程密钥SESUK和一个报文鉴别码(MAC1)
3) --终端: 验证MAC1。
4) --终端: 用SESUK加密数据产生MAC2,并发出修改透支现额(UPDATE OVERDRAWLIMIT)命令
5) --IC卡:验证MAC2的有效性
6) --IC卡:交易处理
--------------------见JR/T 0025.2的5.5.6条(未)
CPURESET() JE=00000001//消费金额 DUK=7DAE5E53140A9170C21D5805EADB7E9A 00A40000021001 0020000003+888888 //校验密码 //(见JR/T 0025.2的5.2.9条) 密钥索引号+终端机编号 8050040107+01+000000000001(XYSJ2+9000) YE=COPY(XYSJ2,1,8) //ED余额 4 TJJYXH=COPY(XYSJ2,9,4) //ED联机交易序号 2 YZXE=COPY(XYSJ2,13,6) //原透支限额 3 //密钥版本号(DUK) 1 //算法标识(DUK) 1 WSJS=COPY(XYSJ2,23,8) //伪随机数(IC卡) 4 MAC1=LAST(XYSJ2,8) //MAC1 4 //SESUK:伪随机数(ICC)||电子存折联机交易序号||‘8000’ ECB_3DES_EN(WSJS+TJJYXH+8000,DUK,SESLK) //电子存折余额 + 透支限额 + 交易类型标识 + 终端机编号 3DES_MAC(0000000000000000+YE+YZXE+07+000000000001+8000,SESLK,_MAC1) //透支限额 + 交易类型标识 + 终端机编号 + 交易日期 + 交易时间 3DES_MAC(0000000000000000+YE+YZXE+07+000000000001+20090225+153030+800000,SESLK,MAC2) //新透支限额+交易日期(发卡方)+ 交易时间(发卡方)+ MAC2 805800000E+20090225+153030+MAC2(TAC+9000)
文/闫鑫原创