繁体   English   中英

使用ACR122 NFC阅读器阅读苹果支付令牌

[英]reading apple pay token using a ACR122 NFC reader

我有一个ACR122 NFC读卡器,试图看看我是否可以读取Apple Pay生成的令牌。 下面是我正在尝试的Java中的一些代码,但每次只返回一个4字母数字字符。 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();
      }
    }
  }
}

您发出的命令

FF CA 00 00 04

将为您提供iPhone的智能卡(安全元件)的防冲突标识符(或实际上,如果它有超过4个字节,则实际上是它的前4个字节)。

Apple Pay(通过非接触式接口)实现非接触式支付卡的EMV标准。 因此,为了与非接触式EMV支付卡进行通信,您需要实现该协议。

顺便说一句。 不要将支付令牌视为一串字节。 它远不止于此。 EMV支付令牌可以是

  • 临时支付“卡”(限于单个/有限时间/有限数量的交易使用),包括临时“信用卡号”(等)和用于生成交易授权的密钥( - >这是通常用于HCE应用程序,例如Google Wallet)

  • 永久支付卡(单独但固定的信用卡号,有效期,密钥等),用于授权以后从链接的信用卡中扣除的付款( - >这似乎与Apple Pay一起使用 - 并且还使用基于安全元素的Google Wallet)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM