zoukankan      html  css  js  c++  java
  • 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)
    

    文/闫鑫原创   转载请注明出处http://blog.csdn.net/yxstars/article/details/38225043


    Meet so Meet. C plusplus I-PLUS....
  • 相关阅读:
    05Mybatis_入门程序——根据id查询用户
    04Mybatis_搭建Mybatis的开发环境
    03Mybatis_mybatis框架原理——执行流程
    02Mybatis_原生态jdbc编程中的问题总结——从而引生出为什么要用Mybatis
    01Mybatis_课程安排
    21SpringMvc_异步发送表单数据到Bean,并响应JSON文本返回(这篇可能是最重要的一篇了)
    20SpringMvc_结果的转发可共享参数;重定向不能共享参数
    19SpringMvc_在业务控制方法中收集List集合中包含JavaBean参数
    18SpringMvc_在业务控制方法中收集数组参数
    阿里架构师,讲述基于微服务的软件架构模式(附资料)
  • 原文地址:https://www.cnblogs.com/iplus/p/4467160.html
Copyright © 2011-2022 走看看