首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ACR122 NFC读取器读取苹果付费令牌

使用ACR122 NFC读取器读取苹果付费令牌
EN

Stack Overflow用户
提问于 2014-10-21 19:18:00
回答 1查看 1.3K关注 0票数 3

我有一个ACR122 NFC阅读器,并试图看看我是否能够读取由Apple生成的令牌。下面是Java中的一些代码,我正在尝试,但每次只返回一个4 alpha数字字符。Apple Pay iphone感知nfc阅读器--我是否需要发送特定的apdu命令来检索令牌?

代码语言:javascript
复制
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();
      }
    }
  }
}
EN

回答 1

Stack Overflow用户

发布于 2014-11-04 23:12:57

您发出的命令

代码语言:javascript
复制
FF CA 00 00 04

将获得iPhone的智能卡(安全元素)的防碰撞标识符(实际上是它的前4个字节,如果它有4个字节以上)。

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

顺便说一句。不要将支付令牌看作是一个字节串。远不止这些。EMV支付令牌可以是

  • 临时支付卡(限于单一/有限时间/有限交易次数),由临时“信用卡号码”(等等)组成以及用于生成事务授权的密钥(-> --这通常用于HCE应用程序,例如Google )
  • 永久支付卡(单独的,但固定的信用卡号码,有效期,密匙等)这是用来授权后来从链接信用卡中扣除的付款(->,这似乎适用于Apple -也被用于基于安全元素的Google )。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26494540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档