首页 > 代码库 > ED/EP系列5——消费指令

ED/EP系列5——消费指令

1. 消费交易


    消费交易允许持卡人使用电子存折或电子钱包的余额进行购物或获取服务.

特点:
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)




2. 复合应用消费交易


    复合应用消费交易允许持卡人使用电子钱包的余额进行购物或获取服务。此交易可以在终端设备或其它读卡设备上脱机进行。此交易无需提交个人识别码(PIN)--(电子钱包专用).

特点:
--可以在终端设备或其它读卡设备上脱机进行;
        --无需提交个人识别码(PIN)


步骤:
     --终端:发出INITIALIZE FOR CAPP PURCHASE命令启动复合应用消费交易
     --IC卡:检查提供的密钥索引号(NO:9403);检查钱包是否被灰锁(NO:9408);检查电子钱包余额是否大于或等于交易金额(NO:9401);产生一个伪随机数(ICC)和过程密钥
   --SESPK:伪随机数(ICC)||电子钱包交易序号||终端交易序号的最右两个字节
   --终端:产生MAC1,供IC卡来验证PSAM的合法性
   --终端发出UPDATE CAPP DATA CACHE命令
--IC卡:检查是否存在与SFI值相同的文件(NO:6A82);查询标识符的记录(NO:6A83);检查应用锁定标志字节(NO:9407);检查数据域长度是否大于相应记录的长度(NO:6A84)
   --终端:发出DEBIT FOR CAPP PURCHASE命令
   --IC卡:验证MAC1的有效性(NO:9302)
--IC卡:交易处理,扣减消费金额,交易序号加1,更新消费交易记录,产生报文签别码(MAC2)
   --终端:验证MAC2 


    注:持卡人如需使用非接触式金融IC卡在特定应用环境中进行交易,需先在卡片中增加相应复合应用类型,即启用此类型的复合应用。——交易类型标识‘09’


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




3. 修改透支限额交易


透支功能是一种基于电子存折应用的有限信用功能。如果透支限额存在,电子存折的余额是实际圈存余额与透支限额之和。

特点:
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)