APDU指令学习 如何读取NFC手机钱包的余额

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               


  // select PSF (1PAY.SYS.DDF01)

  /*--------------------------------------------------------------*/
  beijing.Util.log("select file: tag.selectByName(DFN_PSE)");
  if (tag.selectByName(DFN_PSE).isOkey()) {


  protected final static byte[] DFN_PSE = { (byte) '1', (byte) 'P',
   (byte) 'A', (byte) 'Y', (byte) '.', (byte) 'S', (byte) 'Y',
   (byte) 'S', (byte) '.', (byte) 'D', (byte) 'D', (byte) 'F',
   (byte) '0', (byte) '1', };  //1PAY.SYS.DDF01


name = DFN_PSE;
   
ByteBuffer buff = ByteBuffer.allocate(name.length + 6);
   buff.put((byte) 0x00); // CLA Class
   buff.put((byte) 0xA4); // INS Instruction
   buff.put((byte) 0x04); // P1 Parameter 1   SELECT by NAME
   buff.put((byte) 0x00); // P2 Parameter 2
   buff.put((byte) name.length); // Lc
   buff.put(name);  buff.put((byte) 0x00); // Le
   
SELECT命令参考
第1部分电子钱包电子存折应用卡片规范 之 
  表33 SELECT 命令报文    
  表34 SELECT 命令引用控制参数


如果返回结果结尾是 0x9000  ,就SELECT成功


==============================================
SFI_EXTRA_LOG = 4;
   // read card info file, binary (4)
   /*--------------------------------------------------------------*/
   INFO = tag.readBinary(SFI_EXTRA_LOG);
==============================================
SFI_EXTRA_CNT = 5;
   // read card operation file, binary (5)
   /*--------------------------------------------------------------*/
   CNT = tag.readBinary(SFI_EXTRA_CNT);
 
  public Response readBinary(int sfi) {
   final byte[] cmd = { (byte) 0x00, // CLA Class
     (byte) 0xB0, // INS Instruction
     (byte) (0x00000080 | (sfi & 0x1F)), // P1 Parameter 1
     (byte) 0x00, // P2 Parameter 2
     (byte) 0x00, // Le
   };
CNT = tag.readBinary(SFI_EXTRA_CNT);


参考:
第1部分电子钱包电子存折应用卡片规范 之 
 表25 READ BINARY 命令报文    
==============================================
读余额之前的操作
    // select Main Application  
byte[] DFI_EP = { (byte) 0x10, (byte) 0x01 };     
    /*--------------------------------------------------------------*/
    if (tag.selectByID(DFI_EP).isOkey()) {


public Response selectByID(byte[] name) {
   ByteBuffer buff = ByteBuffer.allocate(name.length + 6);
   buff.put((byte) 0x00); // CLA Class
   buff.put((byte) 0xA4); // INS Instruction  
   buff.put((byte) 0x00); // P1 Parameter 1  SELECT by ID
   buff.put((byte) 0x00); // P2 Parameter 2
   buff.put((byte) name.length); // Lc
   buff.put(name);  buff.put((byte) 0x00); // Le


   return new Response(transceive(buff.array()));
==============================================
读余额
CASH = tag.getBalance(true);  


  public Response getBalance(boolean isEP) {
   final byte[] cmd = { (byte) 0x80, // CLA Class
     (byte) 0x5C, // INS Instruction
     (byte) 0x00, // P1 Parameter 1
     (byte) (isEP ? 2 : 1), // P2 Parameter 2
     (byte) 0x04, // Le
   };


参考:
http://blog.csdn.net/jennyvenus/article/details/4183994
//Get Balance                       (defined by PBOC)
80 5C 00 02 04


PBOC 第2部分(电子钱包_电子存折应用规范)
 表2 命令的类别字节和指令字节
 读余额(GET BALANCE)
‘80’ ‘5C’ ‘00’ ‘0X’            

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值