支付功能测试的重要性:如何避免因支付漏洞导致的巨额损失

2025-01-06
来源:网络整理

我的很多朋友目前正在做的项目可能也涉及到支付相关的功能。例如:制作商城、游戏等在线交易网站和APP的人,如果支付出现问题,或者用户通过篡改请求数据,用少量的钱购买了大量的商品,如果是实物产品,可能在发货前就发现了。如果是虚拟物品、话费、游戏币等,可能会造成损失。

因此,无论是实体商品还是虚拟商品,在涉及到支付功能的时候,大家在测试过程中一定要注意,否则会造成很大的损失。您之前可能见过或听说过一个bug造成4.6亿美元损失的惨痛教训,或者您身边也曾出现过因支付功能bug而造成直接损失的案例。

我给你举一个真实的案例:比如你用支付宝购买虚拟商品。当你跳转到支付宝时,你篡改了少量,虚拟物品就购买成功了。 (原价10元的产品只需0.01元即可购买)。多么可怕的错误啊。当然,这个问题可能会让有过支付经验的测试人员朋友想:哎呀,这个问题找不到,那我该怎么测试呢?是的,问题很简单。对于刚进入职场的测试朋友或者没有支付相关经验的测试朋友来说,很可能会被忽略。

那么,问题来了,我们应该如何进行支付模块的相关测试呢?比如对于游戏来说,使用第三方支付来充值游戏币,看起来非常简单。您应该主要考虑以下几点:

1.支付全部接入第三方支付(支付宝、微信、财付通、QQ钱包、支付宝等)。那么,你知道第三方接口有哪些吗?我们都知道我们的产品如何与第三方互动吗?能画个流程图吗?

2、异常情况有哪些?

3. 有哪些风险以及如何避免?

第三方支付流程与商户对接方式基本类似,略有差异。 (题外话推荐:下面流程图使用的插件:,个人觉得比较好用。)

付款流程:

退款流程:

查询流程:

首先看一下流程图,看看你是否对流程图有一定的了解。不仅在做支付功能相关的测试时需要了解流程,在做其他测试时也需要了解流程。只有了解了这个过程,才能做出更好的评价。所涉及的风险可能有利于设计。当然,该流程图只是提到了商家如何与第三方交互。同样,也必须了解商家的内部处理流程,数据是如何存储的,涉及到哪些DB。

对接第三方支付要多久_对接第三方支付收费吗_第三方支付怎么对接

流程清楚之后,我们看看涉及到哪些接口?此支付流程图涉及到第三方支付接口:

· 下单接口:商户向第三方支付接口提交下单请求。第三方收款成功后,向商户系统返回订单成功结果。 (下单接口最终处理结果分为下单成功和下单失败,如果没有收到明确的结果,可以调用下单查询接口查询结果。)

·支付接口:调用该接口时指定支付参数,完成买家账户到商户账户的支付,采用页面跳转交互方式和后台通知交互方式。 (返回结果有两种方式:一种是前台跳转页面显示支付结果;一种是后端收到支付结果通知后响应。)

·退款接口:调用第三方支付的支付请求接口返回支付成功后,需要退款处理时,调用退款请求接口发起退款处理。 (退款接口最终处理结果分为退款成功和退款失败,如果没有收到明确的结果,可以调用退款查询接口查询结果。)

·单笔订单查询接口:根据订单号查询单笔订单的信息和状态。

·退款订单查询接口:调用第三方支付退款接口并返回后,如需查看退款请求的状态,可以调用退款订单查询接口查询退款订单的状态和订单信息。

这样我们对第三方接口就有了一个大概的了解。接下来,将测试过程中涉及到的主要测试点总结如下:

测试过程中需要注意的主要测试点及异常场景:

·首先确保接口可以正常调用;

·生成订单,支付完成后同步或异步重复回调,且仅有效一次;

·生成订单,复制订单号和金额,再次生成订单,设置断点,用第一次完成的订单号和金额替换现有订单号和金额,无法完成支付;

·生成订单且跳转第三方时修改金额时,无法到账,或者如果是使用游戏币进行游戏充值,则会到账被篡改金额对应的游戏币;

·异步通知被阻塞,同步有效,支付成功,同步可以正常到达;

第三方支付怎么对接_对接第三方支付收费吗_对接第三方支付要多久

·同步设置无效,异步设置有效,支付成功,异步支付可以正常接收;

·同步、异步设置无效。第三方支付完成后,在重发机制的时间范围内,异步设置有效。到下次通知时间,即可正常通知账户(充值机制验证,如果商户收到第三方支付成功通知后,需要通知第三方支付已收到成功)如果第三方支付收到商家的响应不ok或者超时,第三方支付会认为通知失败,会在规定的时间内继续调用。或频率限制);

·验证存储的支付订单是否完整、正确(例如:第三方订单号——方便与第三方对账及故障排除、订单金额、订单状态等);

·若用户购买实物商品,用户发起退货,需保证退货流程正常,资金能正常退回,并考虑并发情况验证,确保安全;

·如果用户购买虚拟商品,如话费、油卡等,只有在发货失败时才能发起退货,请注意验证;

遇到的坑:

·用户购买100元游戏币时,到第三方支付系统将金额从100元改为0.01元。结果他花了0.01元充值了100元游戏币。无法验证订单金额导致此类后果,损失比较大。在测试过程中,大家一定要注意对服务器端进行验证,支付过程中任何数据的篡改都要进行验证。

·同步和异步通知同时存在时,未收到异步通知(第三方支付成功后台通知),导致部分用户无法充值,引发客户投诉。当同步和异步共存时,必须分别检查同步和异步,确保两者都能正常接收。

我们做的产品大部分都涉及到第三方支付,所以支付功能一定很重要。作为互联网产品测试的一员,我们必须保证支付安全。

那么,如何规避支付风险呢?

为了进一步增强支付功能的安全性,还可以适当增加一些监控机制。例如,可以使用运行批次来将订单与第三方订单进行比较。当我们完成付款后,会从数据库中检查订单并与第三方订单进行比较。当查询接口查询到的同一订单金额出现异常时,可以通过报警通知及时发现并处理,甚至出现异常时也会终止创建的订单,从而最大程度地减少损失。

分享