1 Q扩展部分数据

  • 增加3个DGI,分别为:A001,8020,9020

  • 9103中增加DF60(9F38中),DF61

  • 增加DF62,DF63

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.  验证方式fdda。00或01.

3.  验证9F69第8字节与DF61值是否一致

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

5.  交易前余额=9F79+DF62-DF63,交易后DF63=9F02-9F79,9F79=0或9F79=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.Fdda为01时,比较9F69第8字节与DF61值。

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

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

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

4     扩展应用专有文件

4.1     变成记录文件

4.2     循环文件

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

4.3     文件类型

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





QPBOC扩展应用交易流程的更多相关文章

  1. Fabric 1.0交易流程

    这篇文章详细介绍fabric的交易流程,以图片加文字的形式呈现. Fabric 1.0交易流程 fabric中的所有交易都是通过chaincode执行 1.应用程序客户端通过SDK调用证书服务(CA) ...

  2. PBOC电子现金的交易流程

    做一个电子现金的交易: 第一步当然是选中当前的应用, 方法是调用select命令, 传入当前的应用AID号, 如果卡片的状态码返回9000,则表示选中成功. 下面举一个例子: 发送: 00 a4 04 ...

  3. HyperLedger Fabric 1.4 交易流程(6.3)

    区块链最主要的特性之一是去中心化,没有了中心机构的集中处理,为了达成数据的一致性,就需要网络中全民参与管理,并以某种方法达成共识,所以区块链的交易流程也就是共识的过程.       在Fabric中, ...

  4. [转] 深度探索Hyperledger技术与应用之超级账本的典型交易流程

    转自: https://blog.csdn.net/HiBlock/article/details/80212499 个人感觉对交易流程描述的比较清楚,转载以备查看. 1 典型交易流程 下图所示为Hy ...

  5. 详细讲解:零知识证明 之 ZCash 完整的匿名交易流程

    作者:林冠宏 / 指尖下的幽灵 博客:http://www.cnblogs.com/linguanh/ 掘金:https://juejin.im/user/587f0dfe128fe100570ce2 ...

  6. Hyperledger交易流程

    Hyperledger Fabric Network中的角色 在Hyperledger中,由三种类型的角色: Client:应用客户端,用于将终端用户的交易请求发送到区块链网络: Peers:负责维护 ...

  7. 架构设计 | 基于电商交易流程,图解TCC事务分段提交

    本文源码:GitHub·点这里 || GitEE·点这里 一.场景案例简介 1.场景描述 分布式事务在业务系统中是十分常见的,最经典的场景就是电商架构中的交易业务,如图: 客户端通过请求订单服务,执行 ...

  8. 区块链Fabric 交易流程

    1. 提交交易预案 1)应用端首先构建交易的预案,预案的作用是调用通道中的链码来读取或者写入账本的数据.应用端使用 Fabric 的 SDK 打包交易预案,并使用用户的私钥对预案进行签名. 应用打包完 ...

  9. Elasticsearch扩展X-pack实施流程-实施

    Elasticsearch扩展X-PACK实施流程 elasticsearch5.2.1安装X-PACK,对ES集群进行监控,报警,安全验证,报告,图形化操作 注意 版本号需要固定,小版本都不能差,要 ...

随机推荐

  1. 紧张:飞测独家のJmeter秘籍,限量发放

    飞测说:数月前,小怪我牺牲了周末时间,做了fiddler的扩展开发,从fiddler将请求导出,保存为jmx格式的文件,然后使用jmeter来调用.随后,小怪和同事(心&阳)一同研究jmete ...

  2. 华为OJ平台——完美数

    import java.util.Scanner; /** * * 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数. * 它所有的真因子(即除了自身以外的约数)的和(即 ...

  3. javascript代码复用模式(二)

    前面说到,javascript的代码复用模式,可分为类式继承和非类式继承(现代继承).这篇就继续类式继承. 类式继承模式-借用构造函数 使用借用构造函数的方法,可以从子构造函数得到父构造函数传任意数量 ...

  4. centos custom iso

    http://www.smorgasbork.com/2012/01/04/building-a-custom-centos-6-kickstart-disc-part-1/ Create a dir ...

  5. jquery selector 使用方法

    <select class="selector"></select> 1 设置value为pxx的项选中 $(".selector"). ...

  6. Linux下多线程编程

    一.为什么要引入线程? 使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式.在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维 ...

  7. 【MVC】关于Action返回结果类型的事儿(上)

    一. ASP.NET MVC 1.0 Result 几何? Action的返回值类型到底有几个?咱们来数数看. ASP.NET MVC 1.0 目前一共提供了以下十几种Action返回结果类型: 1. ...

  8. /proc/cpuinfo

    /proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间. 它以文件系统的方式为访问系统内核数据的操作提供接口. 用户和应用程序可以通过 proc得到系统的信息,并可以改变内核的某些参数 ...

  9. 七、Action动作类

    七.Action动作类(一般用**Action结尾) 1.编写动作类的三种方式 动作类不实现.也不继承任何的接口和类.即动作类是一个非常普通的JavaBean. public class HelloA ...

  10. [视频]物联网应用-ARM mbed-来至MultiTech Systems的解决方案

    ARM公司面向物联网及可穿戴市场,近期可谓是动作频频,先是发布了专为物联网及可穿戴领域而生的Cortex-M7架构,接着又发布了mbed物联网操作系统.意图在物联网领域构筑一套坚不可摧的生态系统. 这 ...