我有一个ACR122 NFC阅读器,并试图看看我是否能够读取由Apple生成的令牌。下面是Java中的一些代码,我正在尝试,但每次只返回一个4 alpha数字字符。Apple Pay iphone感知nfc阅读器--我是否需要发送特定的apdu命令来检索令牌?
import java.io.*;
import java.util.*;
import javax.smartcardio.*;
public class CardTest {
final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();
public static String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
int v;
for ( int j = 0; j < bytes.length; j++ ) {
v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
public static void main(String[] args) throws Exception {
TerminalFactory factory = TerminalFactory.getInstance("PC/SC", null);
System.out.println(factory);
List<CardTerminal> terminals = factory.terminals().list();
System.out.println("Terminals: " + terminals);
if (terminals.isEmpty()) {
throw new Exception("No card terminals available");
}
CardTerminal terminal = terminals.get(0);
// Keep looping looking for cards until the application is closed
while( true )
{
terminal.waitForCardPresent( 0 );
try {
Card card = terminal.connect("*");
CardChannel channel = card.getBasicChannel();
CommandAPDU command = new CommandAPDU(new byte[]{(byte)0xFF,(byte)0xCA,(byte)0x00,(byte)0x00,(byte)0x04});
ResponseAPDU response = channel.transmit(command);
byte[] byteArray = response.getBytes();
System.out.println( bytesToHex( byteArray ) );
Thread.sleep(1000);
} catch (CardException e) {
e.printStackTrace();
}
}
}
}发布于 2014-11-04 23:12:57
您发出的命令
FF CA 00 00 04将获得iPhone的智能卡(安全元素)的防碰撞标识符(实际上是它的前4个字节,如果它有4个字节以上)。
Apple (通过非接触式界面)实现了非接触式支付卡的EMV标准。因此,为了与非接触式EMV支付卡通信,您需要实现该协议。
顺便说一句。不要将支付令牌看作是一个字节串。远不止这些。EMV支付令牌可以是
https://stackoverflow.com/questions/26494540
复制相似问题