做一个电子现金的交易:

第一步当然是选中当前的应用, 方法是调用select命令, 传入当前的应用AID号, 如果卡片的状态码返回9000,则表示选中成功.

下面举一个例子:

发送: 00 a4 04 00 08 A0 00 00 04 44 01 01 05 00    最后的一个字节是Le

卡片返回:

6f 45 84 08 a0 00 00 04 44 01 01 05 a5 39 50 0a 50 42 4f 43 20 44 45 42 49 54 87 01 01 9f 38 09 9f 7a 01 9f 02 06 5f 2a 02 5f 2d 02 7a 68 9f 11 01 01 9f 12 0a 50 42 4f 43 20 44 45 42 49 54 bf 0c 05 9f 4d 02 0b 0a 90 00

先看发送的指令, 其中AID=A0 00 00 04 44 01 01 05这八个字节就是当前应用的AID号. 卡片返回的最后两个字节是90 00, 表示发送成功. 状态码之前是数据域. 数据域是一个TLV结构的FCI(文件控制信息), 其中V里面可能也会有TLV结构的数据, 所以,FCI可能是一个嵌套的TLV结构. 6f是整个数据域的tag, 它标识卡片响应的整个FCI. 45表示长度(十六进制),也就是它后面数据域部分的所有字节数.

不分析所有的数据了, 只说一下里面比较重要的一个数据PDOL. PDOL表示卡片要求终端提供的数据,从而激活当前选择的应用,找到这一串数据;

9f 38 09 9f 7a 01 9f 02 06 5f 2a 02

9f38是PDOL的tag, 09表示长度. 9f 7a 01表示卡片要求终端提供tag为9f7a的元素的值,长度是01, 9f 02 06表示卡片要求终端提供tag为9f02的元素的值,长度是06,5f 2a 02表示卡片要求终端提供tag为5f2a的元素的值,长度是02. 这三个tag的意义如下:

9f7a:电子现金终端指示器

9f02:授权金额

5f2a:交易货币代码

对于基于电子现金的应用, 这三个元素是必不可少的, 或者说,卡片要求终端至少提供这三个元素的值.

下一步就是终端需要把上面三个元素通过GPO命令传送给卡片.       (终端  =====GPO指令=====》卡片)

后面两个元素比较容易填, 授权金额就是你的实际交易金额,交易货币代码固定为0156(人民币), 那么电子现金终端指示器的值是什么呢?

根据PBOC 2.0的规范, 只有满足下面三个条件时,电子现金终端指示器(即是走电子现金还是借贷记流程的标识位)的值才能为1, 否则为0. 这三个条件是:

1 终端支持电子现金交易

2 授权金额小于终端交易限额

3 终端交易类型为消费交易

前面两个条件好理解, 为什么会有第三个条件呢?

如果卡片接收到的电子现金终端指示器的值是1, 它就认为当前做的是一个电子现金的交易, 而不是普通的借贷记交易, 那么它在GPO指令的响应中就会返回电子现金的AIP和AFL, 而不是普通借贷记的AIP和AFL, 两者区别主要在AFL的不同. 如果卡片认为当前是一个电子现金的交易, 它会返回给终端”电子现金发卡行授权码”, 而电子现金发卡行授权码是用于脱机交易中, 存放在清算报文的授权码中. 而PBOC的消费交易是联机交易, 这就是为什么会有第三个条件.

另外,PBOC的圈存交易规定必须联机处理,所以我们也可以得出, 对于基于电子现金的圈存交易,它从AFL中读到的数据其实就是普通借贷记的数据,其交易流程也是借贷记的流程.

下面是有一个电子现金的卡片做的一个测试,如果电子现金终端指示器的值为0, 卡片返回的AFL如下:

08 01 02 00, 10 01 03 01, 18 01 02 00, 20 01 01 00

当电子现金终端指示器的值为1时, 卡片响应GPO命令返回下面六组AFL

08 01 02 00, 10 05 06 01, 10 08 08 00, 18 01 02 00, 20 01 01 00, 28 01 01 00  (DGI0501

其中电子现金发卡行授权码就是文件标识符为28 的文件中.

(卡片=====AIP和AFL====>终端)

如果终端能收到卡片返回的AIP和AFL, 就可以根据卡片提供的AFL, 读出卡片提供给终端的所有数据, 并保存在终端, 以备后续的交易使用. 这些数据就包括PAN号等在内的卡片数据, 举个例子, 我用测试卡s读到的发卡行授权码(tag=9f74)的值如下:45 43 43 30 30 31, 对应的ASCII字符就是ECC001.

PBOC电子现金的交易流程的更多相关文章

  1. 读取PBOC电子现金指令流

    该指令流仅适用于T=0协议卡片.   终端对IC卡的响应: 60 须要额外的工作等待时间,说明IC卡端数据还未处理好. 61 发送GET RESPONSE命令取应答数据 6C 加上取字节数,命令重发 ...

  2. PBOC电子钱包与电子现金及QPBOC

    电子钱包:EP 电子现金:EC,在PBOC规范中的13部分定义了<基于借贷记应用的小额支付规范中> QPBOC:在PBOC规范的12部分中定义了<费接触式IC卡支付规范> PB ...

  3. 电子现金、电子钱包、qPBOC、闪付、UPCash

    一.关于金融IC卡领域的规范 由Europay.Mastercard.Visa三大国际信用卡组织联合制定的金融集成电路(IC)卡金融支付标准,称为EMV规范,其目的是为金融IC卡.金融终端.支付系统以 ...

  4. PBOC2.0协议中电子存折/电子钱包中圈存交易流程

    通过圈存交易,持卡人可将其在银行相应账户上的资金划入电子存折或电子钱包中.这种交易必须在金融终端上联机进行并要求提交个人识别码(PIN)(无论电子存折还是电子钱包应用). 交易流程图如下: 1.1 发 ...

  5. QPBOC扩展应用交易流程

    1 Q扩展部分数据 增加3个DGI,分别为:A001,8020,9020 9103中增加DF60(9F38中),DF61 增加DF62,DF63 1.1  A001扩展应用配置 DGI 长度 值(示例 ...

  6. EMVTag系列11《电子现金发卡行授权码》

    按照银联个人化模板的建议,如卡片支持非接触快速支付应用(qPBOC),则推荐将电子现金授权码(9F74)作为qPBOC 应用AFL列表中的最后一条记录,且最后一条记录仅包含该数据元. 原因是:在某些情 ...

  7. 基于PBOC电子钱包的消费过程详解

    智能卡金融行业应用电子钱包的消费交易流程,开发人员可参考 首先终端和卡片有一个共同的密钥叫做消费密钥:PurchKey (针对每种特定的交易,比如,圈存,消费,都有特定的密钥与之对应) 假设Purch ...

  8. PBOC2.0中消费交易流程

    消费交易允许持卡人使用电子存折或电子钱包的余额进行购物或获取服务.此交易可以在销售点终端(POS)上脱机进行.使用电子存折进行的消费交易必须提交个人识别码(PIN),使用电子钱包则不需要. 1.1 终 ...

  9. Fabric 1.0交易流程

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

随机推荐

  1. 工作JS总结

    获取 <inpout type="checkbox" value="1" /> 多选项的value /*获取checkbox的全部选中项 使用方法: ...

  2. python 异常处理,约束

    异常处理: 在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是显示一个提示的页面. try: pass except Exception,ex: pass 例如: whi ...

  3. python文本挖掘模版

    import xlrd import jieba import sys import importlib import os #python内置的包,用于进行文件目录操作,我们将会用到os.listd ...

  4. PdfPCell对齐方式,边框,边框颜色的使用 (转)

    原文:http://www.cnblogs.com/LifelongLearning/archive/2011/06/22/2086802.html PdfPTable和PdfPCell对象,我们可以 ...

  5. JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招

    一般商业网站都有一个语言的需求,就是为了照顾使用正体中文的国人,会特地提供一个切换到正体中文的选项(或曰“繁体中文”).传统做法是在服务端完成的,即通过某些控件或者过滤器转换文本语言.这里笔者介绍一种 ...

  6. ColorPic 一套簡單好用的顏色選擇器!

    做美工的時候,常常會有配色.抓取顏色及獲取顏色代碼的困擾,專業人士可能有很好的工具來協助,但對於偶爾需要或非經常接觸美工的人來說,即便是有很好的工具,也還要花很多時間進行學習,常常就是看到一個漂亮的顏 ...

  7. SQLSERVER出错提示:此上下文中不允许使用''。此处只允许使用常量、表达式或变量。不允许使用列名。

    在执行一段SQL语句时出现了这样的一段错误提示,在网上找了不少答案,都说的不是很详细,反复修改试验,最终解决了此问题.原SQl语句为: insert into shoufei(djbh,sflb,jk ...

  8. HDU2546题解

    解题思路:先对价格排序(顺序或倒序都可以),然后,对前n-1(从1开始.排序方式为顺序)做容量为m(卡上余额)-5的01背包(背包体积和价值相等).假设dp[i][j]表示从前i个背包中挑选体积不超过 ...

  9. 示例文件下载demo

    页面: 后台: package com.js.ai.modules.shwindow.util; import java.io.BufferedInputStream; import java.io. ...

  10. python‘s third day for me 字符串方法

    基 础 数 据 类 型 初 始   int  运算.+  -  *  /  **  %... bool: 判断,真假,作为条件. str:  存储少量的数据.操作简单,便于传输. list:  列表[ ...