APDU指令學習 如何讀取NFC手機錢包的餘額
阿新 • • 發佈:2018-12-20
// 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.DDF01name = DFN_PSE;ByteBuffer buff = ByteBuffer.allocate(name.length + 6);buff.put((byte) 0x00); // CLA Classbuff.put((byte) 0xA4); // INS Instructionbuff.put((byte) 0x04); // P1 Parameter 1SELECT by NAMEbuff.put((byte) 0x00); // P2 Parameter 2buff.put((byte) name.length); // Lcbuff.put(name);buff.put((byte) 0x00); // LeSELECT命令參考第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 Classbuff.put((byte) 0xA4); // INS Instructionbuff.put((byte) 0x00); // P1 Parameter 1SELECT by IDbuff.put((byte) 0x00); // P2 Parameter 2buff.put((byte) name.length); // Lcbuff.put(name);buff.put((byte) 0x00); // Lereturn 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 04PBOC 第2部分(電子錢包_電子存摺應用規範)表2 命令的類別位元組和指令位元組讀餘額(GET BALANCE)‘80’ ‘5C’ ‘00’ ‘0X’