核查某笔卡付款的3DS验证记录时读取Charge中的three_d_secure属性
要核查一笔卡付款是否走过3DS、验证结果如何,读取该笔付款对应Charge对象中payment_method_details下卡信息的three_d_secure属性。Stripe会在客户尝试对卡片进行身份验证时填充这个属性,其中的three_d_secure.result表示验证结果。这个字段记录的是验证尝试及其结果,不解释3DS机制本身,也不代表对交易结果的判断。
先找正确的Charge
这项核查的第一步不是读字段,而是确认手里的Charge确实对应你想查的那笔卡付款。Charge是付款记录的载体,payment_method_details.card描述这笔付款所用的卡及卡上的验证信息。如果取错了Charge,后面读到的three_d_secure再准确也答非所问。
实际操作中,先按你掌握的业务标识定位到目标付款,再取该付款对应的Charge对象;确认这是一笔卡付款后,才进入字段核对环节。把“找Charge”和“读字段”分成先后两步,可以避免在错误的记录上得出关于3DS的结论。
再核对threedsecure
定位到正确的Charge后,沿payment_method_details找到卡信息部分,读取其中的three_d_secure。核对分两层。
第一层看属性是否存在。按照Stripe文档的说明,这个属性在客户尝试对卡片进行身份验证时被填充。也就是说,属性出现本身,就对应着一次验证尝试的发生。字段缺失时如何解读,材料没有展开,因此不宜单凭有无该属性对未尝试验证下绝对结论,应结合该笔付款的其他信息一并查看。
第二层在属性存在的前提下,读取three_d_secure.result。文档明确result指示验证结果。“是否尝试过”由属性被填充来体现,“尝试的结果”由result体现,两者不要混为一谈:属性存在不等于验证通过,也不能把某一具体结果外推到其他付款。
这个字段回答什么、不回答什么
three_d_secure回答的是一个范围明确的问题:这笔卡付款在身份验证环节有没有发生尝试,以及该次尝试的结果是什么。它是对既成事实的记录,属于事后核查,不改变付款本身的处理路径。
它不回答的问题同样需要明确。文档材料没有展开该属性全部取值的含义,因此不宜在本文中逐一解释各个取值,也不应把某个取值当作通用结论套用到其他付款。需要完整取值语义时,应以对应API参考中的字段定义为准。此外,读取该字段不构成对交易结果、合规或资金安全的判断依据。
把任务收束为一句话:先确认Charge对应的是你要查的那笔卡付款,再在该Charge的payment_method_details.card.three_d_secure上看属性是否存在、result记录了什么。两步都落实,核查才算完成。