前言
支付宝的“碰一下”功能已经推出一段时间了,现在他们又在收款码和红包码里加上了这个好玩的功能。这种新的支付方式既新鲜又方便。在这篇文章里,我会解释它是怎么工作的,还会教你如何自己动手做一个“碰一下”标签来玩玩看。
原理分析
支付宝的“碰一下”功能虽然利用了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 贴纸标签。
这样一来,你就能自制一个功能齐全的“碰一下”标签了,是不是很简单呢?
首先获取到收款二维码的链接
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 里,按照以下步骤可以轻松创建并写入支付宝“碰一下”标签:
- 点击
Write Tags
,然后选择New dataset
来新建一个数据集。 - 接着选择
Launch Application
,在应用列表中找到并选择支付宝,或者直接手动输入支付宝的包名:com.eg.android.AlipayGphone
。 - 点击
SAVE&WRITE
保存这个启动应用的设置,再点击ADD MORE RECORD
添加更多记录。 - 选择
Link
类型来添加链接。Description 可以留空不用填写。 - 对于 URI type,选择
https://
(尽管实际链接可能不同,但这样能确保兼容性)。 - 在 URI data 里输入你之前构造好的 URI 地址。
- 完成后,依次点击
SAVE&WRITE
和WRITE
,就可以把所有信息写入到 NFC 标签上了。
这样一来,你就成功制作了一个“碰一下”标签。具体操作可以参考下图,如果有图示的话会更方便理解。
此外,你还可以把链接中的 {URL}
换成其他自定义的网址,这样当别人用支付宝“碰一下”时,就能直接打开你指定的网页。为了让大家更方便地生成这些链接,我还开发了一个小程序,只要输入你想跳转的地址,它就能自动帮你生成对应的支付宝链接。这样一来,创建个性化“碰一下”标签就变得更加简单快捷了。
3 条评论
足够专业,赞
满屏的雪花飘落比较好看,但是下落速度有点快会有点影响阅读体验,个人感觉。
鼠标点击的爆炸气球效果,当点击输入框时会有点卡顿,而且初始气球过大,视觉效果有点过于突出了,个人感觉。
而且下面的 ipc 备案信息展示的条,把【发表评论】按钮盖住了
感谢您的建议,体验了一下,确实有这种情况,我会尽快优化一下~