zoukankan      html  css  js  c++  java
  • QPBOC扩展应用交易流程


    1 Q扩展部分数据


    • 增加3DGI,分别为:A00180209020

    • 9103中增加DF609F38中),DF61

    • 增加DF62DF63



    1.1  A001扩展应用配置


    DGI    

    长度 

    值(示例)   

    A001       

    7*N     

    15 01 00 00 FF 00 00

    数据按7个字节为一个单元进行组织,每个单元对应一个扩展应用文件的配置信息,解析如下:

    1字节扩展应用文件SFI;

    1字节文件类型:01表示变长记录文件,

                           02表示循环记录文件;

    1字节读权限:00表示采用Read CAPP Cache指令读

    1字节写权限:00表示采用Update CAPP Cache指令更新

    1字节单条记录最大长度:限制可以使用记录的最大长度

    2字节文件大小配置:对于变长记录文件, 2字节表示预设的文件大小,00 00表示大小不限制;对于循环记录文件,为1字节记录条数和1字节记录大小。

    可以根据应用需要使用的扩展应用文件的实际数量和实际SFI,对该DGI的数据域进行调整。每7个字节组成的单元的数量和顺序,决定了后续8020数据域内开通密钥的数量和顺序,必须一一对应。

     


    1.2    8020扩展应用开通子密钥


    DGI数据组成及顺序如下,密钥顺序按照A001中定义的文件SFI顺序进行匹配,对应设置为每个文件的开通密钥。

    DGI     

    Len      

    Value

    8020

    10*N

    0x13文件扩展应用开通保护密钥(16字节)

    0x14文件扩展应用开通保护密钥(16字节)

    ……….

     



    1.3    9020:扩展应用开通密钥校验值

      

       DGI数据组成如下,其中校验值(KCV)由8020中的每条密钥对8字节00加密后取左3字节组成,校验值密钥顺序必须与8020中的密钥顺序一致。

    DGI

    Len

    Value

    9020

    03*N

    0x13文件复合应用开通保护密钥校验值(3字节)

    0x14文件复合应用开通保护密钥校验值(3字节)

    …….

     

     

     

    1.4     9103非接触返回值


    l  9F38中增加CAPP交易指示位DF60

    l  BF0C后面增加DF61

    如果终端不支持非接触扩展应用,则设置DF60为00

     


    1.5     0D01或0E01


    如果支持押金抵扣交易,增加DF62,DF63

     


    2     扩展应用指令



    2.1     READ CAPP DATA


    //TEST
    CPURESET()
    00A4040008A000000333010101
    80B400A8020570  //读取0X15变成文件,ID为0570的记录
    00B201F400       //读取0X1E循环文件,第一条记录
     
     
    //16 RMAC
    <commad 80B400b00A05701234567812345678 />
    <return 057007000000000000001C895F11(4字节的RMAC) />
     
    //校验MAC
    KEY=D5F1FE4A7F8C20FDEC49150BA2E00EDF
    3DES_MAC(1234567812345678 05700700000000000000800000000000,KEY,MAC)</span>


    l  强制带有MAC,用来确认指令来自合法的终端

    l  ID由支付系统定义,不足位数后补0

    l  在同一SFI下,ID应保持唯一。

    l  卡片支持RMAC,返回4字节MAC,用行业应用管理密钥计算MAC验证,初始向量为终端发送的随机数。

    l  扩展应用支持应用失效功能,在更新应用数据时将应用有效标志置0.

     



    2.2     APPEND RECORD

     

    <span style="font-family:Microsoft YaHei;">CPURESET()
    00A4040008A000000333010101
    80CA9F3605(ATC+9000)
    ATC=COPY(ATC,7,4)
    ATC=000000000000+ATC
    CAPPK1= D5F1FE4A7F8C20FDEC49150BA2E00EDF//应用开通密钥
    CAPPK2= D5F1FE4A7F8C20FDEC49150BA2E00EDF//行业应用管理密钥
     
    //写入0X16变成文件记录  B0:10110 000
    ECB_3DES_EN(CAPPK2,CAPPK1,KEY2)
    HMD=04E200A81E+KEY2+057007+STRING(0,07)  // TLV
    3DES_MAC(ATC+HMD+8000000000,CAPPK1,MAC)
    HMD+MAC
     
    //写入0X1e循环文件记录
    ECB_3DES_EN(CAPPK2,CAPPK1,KEY2)
    HMD=04E200F01E+KEY2+057007+STRING(0,07)
    3DES_MAC(ATC+HMD+8000000000,CAPPK1,MAC)
    HMD+MAC</span>


    l  扩展应用开通时,用来新增行业应用记录。

    l  加密加MAC方式,强制带有MAC,用来确认指令来自合法的终端,MAC计算过程参考8.2 安全机制

    l  持卡人在专用设备上开通。

    l  循环记录开通业务时,可预先增加一条。该文件对应一条行业应用管理密钥。

    l  卡片判断记录长度是否超出,是返回6A80.

    l  卡片判断文件空间是否足够,否返回6A84.

     

     


    2.3     UPDATE CAPP DATA CACHE


    <span style="font-family:Microsoft YaHei;">//UPDATE CAPP DATA:
    DATA=05700700000000002212
    KEY= D5F1FE4A7F8C20FDEC49150BA2E00EDF
    3DES_MAC(000000000000+ATC+84DE00+ID+0E+DATA+8000000000000000, KEY,MAC)
    84DE00+ID+0E+DATA+MAC //RETURN 9000
     
    //RMAC
    <commad 84DE00b00e0570070000000000000017B8E975 />
    <return 57C6C544(4字节的RMAC) />
     
    //校验MAC  初始向量=4字节0+MAC  响应报文
    KEY=D5F1FE4A7F8C20FDEC49150BA2E00EDF
    3DES_MAC(00000000 17B8E975 9000 800000000000,KEY,MAC)</span>


    更新的文件不存在,返回6A82

    前续命令GPO命令或UPDATE CAPP 命令,返回6985.

    变成文件,需检查是否存在此ID,否则返回6A83.

    检查更新的长度是否与原来一致,否则返回6A80或6A84.

    暂存数据,读记录完成后,更新。

    循环文件,更新最新一条记录。

     

     


    2.4     GET TRANS PROVE

     

    <span style="font-family:Microsoft YaHei;">CPURESET()
    //2> 应用初始化(必备):
    00A4040008A000000333010101
    80CA9F3605(ATC+9000)
    ATC=COPY(ATC,7,4)
    //取脱机交易密文TC
    805A000002+ATC+08</span>

    l  终端在无法接收到最后一条交易指令响应数据的情况下,重新上电并发送此命令,获取上笔交易TC,如果命令响应成功,则终端判断上笔交易成功,否则,按交易失败处理。

    l  如果最近一笔交易是脱机预授权交易,返回全0.

    l  该命令只能获取最近一笔卡片成功完成的扩展应用交易的TC。

     



    3     交易流程



    3.1     分时分段扣费交易



    3.1.1          实例

    <span style="font-family:Microsoft YaHei;">CPURESET()
    //2> 应用初始化(必备):
    00A4040008A000000333010101
    //2.1> READ CAPP DATA:
    80B400b0020570
    //2.2> 交易前金额:
    80CA9F7900
    80CADF6200 //抵扣限额
    80CADF6300 //已抵扣金额
     
    //DF60=01   9F02 = 000000000100   实际金额=9F79+DF62-DF63
    80A80000248322270000800000000001000000000000000156000000000001561410220111223344 01
     
    //2.3>UPDATE CAPP DATA:
    80CA9F3605(ATC+9000)
    ATC=COPY(ATC,7,4)
     
    DATA=05700700000000002212
    3DES_MAC(000000000000+ATC+84DE00b00e+DATA+8000000000000000,D5F1FE4A7F8C20FDEC49150BA2E00EDF,MAC)
    84DE00B00e+DATA+MAC;UPDATE APPDATA CACHE
    80B400B0020570(AFTER+9000);READ APPDATA     //没有真正被改写,只是缓存
     
     
    //3> 读应用数据(必备):
    00B2011400
    00B2021400
    00B2031400
    00B2021c00
    00B2023400
     
    //13.2> 交易后金额:
    80CA9F7900
     
    80CADF6200 //抵扣限额
    80CADF6300 //已抵扣金额
     </span>


     

    3.1.2          流程图


     

     

     

     

     

    3.1.3          注意事项

     

    1.  先缓存,后更新。交易扣款和扩展应用记录的更新必须确保同时执行,RECORD READ成功读取最后一条AFL命令记录时统一进行更新,卡片保持本次TC

    2.  验证方式fdda0001.

    3.  验证9F698字节与DF61值是否一致

    4.  支持押金抵扣功能,需增加DF62DF63. 以手机话费为例,DF62为可透支额,DF63为已透支额。

    5.  交易前余额=9F79+DF62-DF63,交易后DF63=9F02-9F799F79=09F79=9F79-9F02

    6.  圈存先抵消DF63,再增加9F79.

    7.  修改DF62,值必须大于DF63,否则返回6A80.

     

     


    3.2     脱机预授权交易

     


    3.2.1          实例

    <span style="font-family:Microsoft YaHei;">CPURESET()
    //2> 应用初始化(必备):
    00A4040008A000000333010101
    //2.1> READ CAPP DATA:
    ID=C0 //A8 B0 B8 C0
    80B400+ID+020570
     
    //2.2> 交易前金额:
    80CA9F7900
    80CADF6200 //抵扣限额
    80CADF6300 //已抵扣金额
     
    //DF60=02   9F02 = 000000000200  9F381B 9F6604 9F0206 9F03069F1A0295055F2A029A039C019F3704 DF6001
    80A80000248322 270000800000 00000200 0000000000000156000000000001561410220111223344 02
     
    //2.3>UPDATE CAPP DATA:
    80CA9F3605(ATC+9000)
    ATC=COPY(ATC,7,4)
     
    ID=C0
    DATA=05700700000000002212
    3DES_MAC(000000000000+ATC+84DE00+ID+0e+DATA+8000000000000000,D5F1FE4A7F8C20FDEC49150BA2E00EDF,MAC)
    84DE00+ID+0e+DATA+MAC;UPDATE APPDATA CACHE
    80B400+ID+020570(AFTER+9000);READ APPDATA     //没有真正被改写,只是缓存
     
    //循环文件
    DATA=01020700000000002212
    3DES_MAC(000000000000+ATC+84DE00+f0+0e+DATA+8000000000000000,D5F1FE4A7F8C20FDEC49150BA2E00EDF,MAC)
    84DE00+f0+0e+DATA+MAC;UPDATE APPDATA CACHE
    //00B201F400 过程中,不允许读?
     
     
    80CA9F7900
    //3> 读应用数据(必备):
    00B2011400
    00B2021400
    00B2031400
    00B2021c00
    00B2023400
     
    //13.2> 交易后金额:
    80CA9F7900
     
    80CADF6200 //抵扣限额
    80CADF6300 //已抵扣金额
     
    //13> 卡片日志:
    00B2015c00
    00B2025c00
    00B2035c00</span>


     

    3.2.2          流程图




     

     

    3.2.3          注意事项

     

    1.  是特殊的分时,分段扣费交易,分为预授权(冻结金额),预授权完成(扣款)。表示选择或执行脱机预授权交易:DF60的值02,表示选择或执行脱机预授权完成交易: DF60的值03

    2.  不支持押金抵扣功能。

    3.  更新的行业记录内容由行业自行定义,但是建议包括脱机预授权状态,脱机预授权金额和脱机预授权日期或者有效期。

    4.  CAPP=2 9F79=9F79-预授权金额;CAPP=3 9F79=9F79+预授权金额-实际消费金额。

    5.  支持3个脱机预授权交易,第4个返回6971.(pboc3.0可以,pboc2.0不可以,UPDATE返回6985)

    6.  CAPP=2.同行业同应用(SFI相同ID),连续执行,返回6972.

    7.  CAPP=3,无对应ID,返回6973. (pboc 3.0可以,pboc 2.0不可以,UPDATE返回6985)

    8.  脱机预授权,不返回TC密文(9F26)。

    9.  在最后一条记录被读出后,检测当前更新的CAPP记录是否与最后一条READ CAPP记录一致,否则返回6974.交易失败,余额返还。

    10.Fdda01时,比较9F698字节与DF61值。

    11.Fdda完成后,终端保存相关信息,以便上传。

    12.多扣的钱优先补到DF63,少扣的钱从9F79取。

    13.圈存时,余额上限9F77必须大于等于9F79+未完成的金额,否则返回6A80

     

     

     


    4     扩展应用专有文件

     


    4.1     变成记录文件

     


     

    4.2     循环文件

     

     

    支持换乘优惠的应用应将本次交易明细记录在扩展应用循环记录文件中,在换乘优惠时,可读取循环记录文件中的内容作为换乘优惠的依据。

     

     

    4.3     文件类型




    参考资料:中国金融集成电路(IC)卡规范 第14部分:非接触式IC卡小额支付扩展应用规范.pdf

     



    
  • 相关阅读:
    The XOR Largest Pair
    似乎在梦中见过的样子 (KMP)
    Censoring(栈+KMP)
    KMP解决最小循环节问题
    收集雪花 (贪心+双指针+离散化)
    「POI2010」反对称 Antisymmetry (manacher算法)
    A Horrible Poem (字符串hash+数论)
    leetcode103——二叉树的锯齿形层次遍历
    leetcode102 ——二叉树的层序遍历
    二叉树——100 相同的树(easy)
  • 原文地址:https://www.cnblogs.com/iplus/p/4467101.html
Copyright © 2011-2022 走看看