前言

支付宝的“碰一下”功能已经推出一段时间了,现在他们又在收款码和红包码里加上了这个好玩的功能。这种新的支付方式既新鲜又方便。在这篇文章里,我会解释它是怎么工作的,还会教你如何自己动手做一个“碰一下”标签来玩玩看。

原理分析

支付宝的“碰一下”功能虽然利用了NFC技术,但其工作方式与传统的手机NFC支付模式(如电子公交卡、Apple Pay等)有所不同。在传统模式中,钱包信息被安全地加密存储在手机内部,支付时直接通过NFC将支付信息传递给POS机完成交易,整个过程无需手机联网,甚至部分设备支持关机状态下付款。

相比之下,支付宝的“碰一下”并不依赖于手机本地存储的钱包信息。当用户使用“碰一下”功能时,实际上是通过NFC触发了支付宝应用的启动,并引导至在线支付流程。这意味着手机需要连接网络来完成支付操作,因为实际的支付信息和验证是在线处理的。因此,从用户体验的角度来看,“碰一下”的效果与扫描二维码相似,都是为了简化用户的支付步骤,减少操作。

支付宝提供了两种主要的“碰一下”收款方式:一种是商家可以预先设定金额的专用收款机,用户只需轻轻一碰即可跳转到定额支付页面;另一种则是无源感应标签形式的收款码,用户碰触后会跳转到一个页面,允许他们手动输入支付金额。此外,还有基于相同原理的各种“碰一下”应用场景,例如发放红包或点餐服务等。

无论是哪种“碰一下”方式,其核心原理都是相似的:手机读取NFC标签中的信息,然后依据该信息启动支付宝应用并导航到特定的支付或互动页面。本文接下来将深入探讨支付宝提供的“碰一下”收款码及红包码的实际申请和使用情况。

碰一下贴纸

使用 NFC Tools PRO 应用对支付宝的“碰一下”收款码和红包码进行扫描后,可以观察到这些标签内部采用了复旦微电子提供的NFC芯片。每个NDEF(NFC Data Exchange Format)消息中包含两条记录:一条是URI记录,另一条是Android Application Record (AAR)。

  • URI 记录:这条记录包含了指向支付宝相关页面的链接。当用户的手机触碰标签时,NFC读取器会解析这个URI,并根据其内容启动相应的在线支付或互动流程。
  • Android Application Record (AAR):这条记录指定了应被启动的应用程序包名,在本例中即为支付宝应用的包名(通常是com.eg.android.AlipayGphone)。这确保了无论用户当前正在使用哪个应用程序,只要触碰了NFC标签,系统都会自动打开支付宝应用并执行预设的操作。

这种设计不仅简化了用户的操作步骤,还保证了支付过程的安全性和准确性。通过这种方式,“碰一下”功能能够快速引导用户进入支付宝的特定页面,如支付、领取红包等,从而提供了一个流畅且便捷的用户体验。

读取贴纸

支付宝“碰一下”功能的URI数据结构展示了其背后的技术设计和逻辑。具体分析如下:

  • 收款码 URI

    • 格式:render.alipay.com/p/s/ulink/sn?s=dc&scheme=alipay%3A%2F%2Fnfc%2Fapp%3Fid%3D10000007%26actionType%3Droute%26codeContent%3D{URL}
    • 特点:此链接指向支付宝服务器上的一个特定端点 /p/s/ulink/sn,用于处理收款请求。{URL} 是经过两次URL编码后的二维码链接,通常位于 qr.alipay.com 域名下。
  • 红包码 URI

    • 格式:render.alipay.com/p/s/ulink/nrps?s=dc&scheme=alipay%3A%2F%2Fnfc%2Fapp%3Fid%3D10000007%26actionType%3Droute%26codeContent%3D{URL}
    • 特点:与收款码类似,但使用了不同的端点 /p/s/ulink/nrps,专门用于处理红包相关操作。同样地,{URL} 是经过两次URL编码的红包链接。

关键差异

  • 端点不同:收款码和红包码的主要区别在于它们所调用的服务器端点不同。收款码使用 /p/s/ulink/sn,而红包码使用 /p/s/ulink/nrps
  • URL 编码:在两种类型的URI中,{URL} 部分都是基于 qr.alipay.com 的链接,并且经过了两次URL编码。这确保了即使链接中包含特殊字符,也可以安全地通过NFC协议传输。
  • noT 参数:值得注意的是,带有 noT 参数的交易可以享受特定的“碰一下”支付优惠。这个参数在直接扫描二维码时并不存在,仅当用户通过NFC触碰标签时才会出现,为用户提供了一种额外的激励机制。

自制标签

根据上面的分析,你会发现只要有对应的二维码,就可以自己动手做一个“碰一下”标签。首先,要选择合适的NFC标签类型。因为我们需要存储的数据量超过了230字节,而NTAG213的最大用户内存只有144字节,所以不足够用。更好的选择是NTAG215(504字节)或NTAG216(888字节),这两种标签都能轻松容纳我们的数据。

接下来,你可以使用 NFC Tools PRO 这个应用来把数据写入标签。它能帮助你简单快捷地完成整个过程。下图展示的就是我在测试时使用的 NTAG216 贴纸标签。

这样一来,你就能自制一个功能齐全的“碰一下”标签了,是不是很简单呢?
NFC卡片

首先获取到收款二维码的链接

https://qr.alipay.com/xxxxxxxxxxxxxxxxxxxxxxx

将其进行两次 URL Encode,得到

https%253A%252F%252Fqr.alipay.com%252Fxxxxxxxxxxxxxxxxxxxxxxx

使用收款码的 Endpoint 构造完整的 URI 记录

render.alipay.com/p/s/ulink/sn?s=dc&scheme=alipay%3A%2F%2Fnfc%2Fapp%3Fid%3D10000007%26actionType%3Droute%26codeContent%3Dhttps%253A%252F%252Fqr.alipay.com%252Fxxxxxxxxxxxxxxxxxxxxxxx

NFC Tools PRO 里,按照以下步骤可以轻松创建并写入支付宝“碰一下”标签:

  1. 点击 Write Tags,然后选择 New dataset 来新建一个数据集。
  2. 接着选择 Launch Application,在应用列表中找到并选择支付宝,或者直接手动输入支付宝的包名:com.eg.android.AlipayGphone
  3. 点击 SAVE&WRITE 保存这个启动应用的设置,再点击 ADD MORE RECORD 添加更多记录。
  4. 选择 Link 类型来添加链接。Description 可以留空不用填写。
  5. 对于 URI type,选择 https://(尽管实际链接可能不同,但这样能确保兼容性)。
  6. 在 URI data 里输入你之前构造好的 URI 地址。
  7. 完成后,依次点击 SAVE&WRITEWRITE,就可以把所有信息写入到 NFC 标签上了。

这样一来,你就成功制作了一个“碰一下”标签。具体操作可以参考下图,如果有图示的话会更方便理解。

制作过程

此外,你还可以把链接中的 {URL} 换成其他自定义的网址,这样当别人用支付宝“碰一下”时,就能直接打开你指定的网页。为了让大家更方便地生成这些链接,我还开发了一个小程序,只要输入你想跳转的地址,它就能自动帮你生成对应的支付宝链接。这样一来,创建个性化“碰一下”标签就变得更加简单快捷了。

小程序支付宝NFC
小程序支付宝NFC
支付宝NFC小程序截图
支付宝NFC小程序截图

如果觉得我的文章对你有用,可以赞助本站,使本站更好的发展