涉及到第三方支付接口该如何测试?

article/2025/8/27 6:22:53

    现在有不少测试朋友做的项目中,可能也会涉及到支付相关的功能。比如:做商城的,做游戏的以及其他在线交易的网站、APP等。如果支付出了问题,或者用户拿少的钱通过篡改请求数据购买大金额的商品,如果是实物的话,发货前还有可能被发现。如果是虚拟商品话费、游戏币等就有可能造成损失。

    所以,不管是实物也好,虚拟商品也好,涉及到支付功能时,大家在测试的过程中一定要重视,否则,会造成很大损失。之前可能大家也都看到过或者听过一个bug损失4.6亿美金的惨痛教训或者身边也有发生过其他因为支付功能的bug导致直接损失的案例。

    给大家举个真实的案例:比如使用支付宝购买虚拟商品,往支付宝跳转时,篡改了小的金额,结果购买虚拟商品成功了。(原本10元的商品,0.01元就搞定了)。多么可怕的一个bug啊,当然这个问题可能对于一个做过支付有过经验的测试朋友来说,可能会想:哎呀,这个问题都发现不了,还做什么测试?是的,问题是很简单,对于一个刚入职场的测试朋友或者没有支付相关经验的测试朋友来说,很有可能会忽略。

    那么,问题来了,对于支付模块的相关测试,我们应该如何进行呢?比如,针对游戏来说,使用第三方支付往游戏充值游戏币功能,看起来是不是很简单?

大家主要思考下以下内容:

1. 支付都是与第三方支付(支付宝、微信、财付通、QQ钱包、短信支付等)进行对接,那么,是否了解了第三方接口有哪些?是否都能清楚我们的产品与第三方是如何交互的?是否能画出流程图?

2. 异常场景有哪些?

3. 有哪些风险,如何规避?

其实第三方支付的流程,与商户的对接方式基本相似,大同小异

    先看下流程图,是否对流程图有些了解,不仅仅是做支付功能相关测试才去搞清楚其中的流程,做其他的测试一样也要搞清楚流程,只有搞清楚流程,才能更好的评估其中的风险,才能有利于测试用例的设计。当然流程图中只是提到了商户与第三方是如何交互的,同样商户内部处理的流程也要有所了解及数据怎么存储的,涉及到哪些DB也要清楚。流程清楚之后,我们再来看看其中会涉及到哪些接口?

这个支付流程图里面就涉及到了第三方支付接口,比如:

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

支付接口:调用该接口时指定支付参数,完成买家账户向商户账户的支付,采用页面跳转交互模式和后台通知交互模式。(结果分为两路返回:一路为前台在return_url页面跳转显示支付结果;一路为后台在notify_url收到支付结果通知后进行响应。)

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

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

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

那么针对第三方的接口,我们大致也有所了解了,接下来针对测试过程中涉及到主要的测试点整理如下:

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

1. 首先要保证接口都能正常调用;

2. 生成一笔订单,支付完成后,同步或异步重复回调,只有一次有效;

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

4. 生成一笔订单,跳转到第三方时修改金额,无法到账,或者如果是游戏充值游戏币的话,到账为篡改后的金额对应的游戏币;

5. 异步通知屏蔽,同步有效,进行支付,同步能够正常到账;

6. 同步设置无效,异步有效,进行支付,异步能够正常到账;

7. 同步异步都设置无效,在第三方支付完成后,在重发机制时间范围内,设置异步有效,到下次通知时间点时,能够正常通知到账(补单机制的验证,如果商户收到第三方支付成功的通知后,要告知第三方支付收到了成功的通知,如果第三方支付收到商户应答不是ok或超时,第三方支付就会认为通知失败,会在规定的时间内持续调用notify_url,一般有时间或次数的限制);

8. 针对支付订单在数据库中存储是否完整和正确进行校验(比如:第三方订单号--方便与第三方对账和问题排查、订单金额、订单状态等);

9. 如果是用户购买实物商品,用户发起退货,要保证退货流程正常,资金能正常返还,要考虑下并发情况的验证以确保安全性;

10. 如果是用户购买虚拟商品,比如话费、油卡之类的商品,只有在发货失败的时候才能发起退货,注意验证;

遇到过的坑:

* 用户购买100元游戏币时,前往第三方支付跳转进行金额的篡改由100元改成0.01元,结果就拿了0.01元充值了100元的游戏币。对订单金额没有做校验导致这样的后果,损失比较大。大家在测试的过程中一定要注意对服务端进行校验,支付时数据的篡改一定要有校验。

* 当同步、异步通知都存在的情况的,异步通知(第三方支付成功后台通知),没有到账,导致部分用户充值不到账,引起客诉。当同步、异步并存的时候,一定要分别对同步和异步进行检验,确保都能正常到账。

我们所做的绝大多少的互联网产品都会涉及到第三方支付,所以支付功能必然是重要的,作为测试互联网产品的一员,我们必须要做好支付的安全性。

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

    为了进一步的加强支付功能的安全,也可以适当的增加一些监控机制,比如:订单与第三方订单进行对比,可以使用跑批完成,当我们完成支付的订单从数据库中查出来与通过第三方订单查询接口查询出来的同一个订单金额有异常时,进行报警通知能够及时发现处理,甚至当有异常情况进行创建订单的终止,从而把损失降到最低。

    当一个支付请求被发送到支付渠道方,支付渠道会很快返回一个结果。但是这个结果,只是告诉你调用成功了,不是扣款成功,这叫同步调用。很多新手会拿这个结果当作支付成功了,那就会被坑死,结果就是支付成功率特别高,伴随着一堆无法解释的坏账率,测试人员尤其要注意测试数据的篡改:金额,同步返回结果,订单号等。

    同步请求参数里面会有一个回调地址,这个地址是支付渠道在扣款成功后调用的,这叫异步调用。一般同步接口仅检查参数是否正确,签名是否无误等。异步接口才告诉你扣款结果。一般异步接口有5秒以内的延迟。调用不成功会重试。有时候是这边成功了,但支付渠道侧没收到返回,于是会继续调。当天的支付到第二天还在被异步调用也都是正常的。这也是开发人员需要特别注意的地方,不要当做重复支付。测试人员也要对重复回调进行测试,应只有一次有效。这还不是最坑的,一般支付渠道侧,只有支付成功了才通知你。要是支付失败了,压根儿都不告诉你。 另一方面,如何老收不到异步结果呢?那就得查查了。同步结果不可靠,异步调用不可靠,那怎么确定支付结果?最终的杀招就是查单了,反查,一般支付渠道侧都会提供反查接口,定时获取DB中待支付的订单调用支付渠道侧的反查接口,最终把支付渠道侧扣款成功的订单完成掉。

微信大致流程为:APP端将订单信息提交到后台,后台通过微信统一下单接口到微信去下单,微信端返回相关信息到PHP后台,后台先将订单保存到数据库成功后,返回签名信息给APP端去实现真正的支付

支付宝大致流程为:APP端将订单信息提交到后台,后台通过支付宝规定的签名算法将签名信息返回给APP端,APP端调用支付宝SDK去实现支付


http://chatgpt.dhexx.cn/article/0yqGxGQf.shtml

相关文章

第三方支付api接口是什么?

由于移动互联网的不断发展,从而产生了第三方和第四方支付,而第三方成为商业交易的环节不可缺失的一个总要部分,作为第三方,通过央行的授权,一般都覆盖了很多支付通道,给予需求企业最便捷、高效的接入方式&a…

Java 调用第三方接口方法

Java 调用第三方接口方法 一、 通过JDK网络类Java.net.HttpURLConnection 1.java.net包下的原生java api提供的http请求 使用步骤: 1、通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection)。 2、设…

Java调用第三方接口示范

人工智能,零基础入门!http://www.captainbed.net/inner 在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口。 使用流程 【1】准备工作:在项目的工具包下导入HttpClientUtil这个工具类,或者…

调用第三方接口

快速使用:调用第三方接口获取数据(简易版)_myme95的博客-CSDN博客_调用第三方接口 controller层 private String jokeApiKey "40ff81dexxxxxxxxxxxx97a39d39";AutowiredApiService apiService;/*** 京东万象-笑话api*/GetMapping(…

国内7款API供应平台功能对比及详细介绍

我们都知道一句话“巧妇难为无米之炊”,数据源就是数据产生价值中的那些大米。那大数据时代企业需要哪些数据呢?根据我个人理解我觉得可以大致分为以下几类: 1、(内部)企业自身业务生产经营环节产生的内部数据【包括销…

Java Web系统常用的第三方接口

1. Web Service 接口 1.1 接口方式说明和优点 在笔者的开发生涯中,当作为接口提供商给第三方提供接口时,以及作为客户端去调用第三方提供的接口时,大部分时候都是使用 Web Service接口, Web Service作为接口使用广泛的…

进制转换2

进制之间的转换 本文转自:http://www.bloghome.cn/posts/38472 数学 /bullly 发表于2006-07-11, 18:08 不同进制之间的转换纯粹是数学上的计算。不过,你不必担心会有么复杂,无非是乘或除的计算。 生活中其实很多地方的计数方法都多少有点不…

计算机二进制

二进制转十进制 不考虑符号为 十进制转二进制 奇数要算一次 1 / 2 偶数不需要 计算 1 / 2 奇数要算一次 1 / 2 偶数不需要 计算 1 / 2 奇数要算一次 1 / 2 偶数不需要 计算 1 / 2 奇数要算一次 1 / 2 偶数不需要 计算 1 / 2 奇数要算一次 1 / 2 偶数不需要 计算 1 / 2 奇数…

-2进制

http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?id4435 懵~ 后来问别人,他让我试着用二进制反推十进制,就晓得了(用(-2)^n)。 这个是学长写的代码 //我写的时候,将它先变成二进制,再给每…

进制.2

转自: http://www.d2school.com/bhcpp_book/5_8.php 5.8.1 十六进制 说到十六进制,首先会问:总共只有10个阿拉伯数字:0、1、2、3、4、5、6、7、8、9,如何表达“逢16进1”的概念呢?方法是用英文字母&#x…

二进制及二进制转换

二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二” 二进制数(binaries)是逢2进位的进位制,0、1是基本算符 [2] &#xff1…

二进制?十进制!

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 给定两个十进制整数 : AAA,BBB 你需要把它们的二进制形式以十进制的运算法则相加输出结果。 例如: A3,B2A 3 , B 2A3,B2 的时候,AAA 的二进制表示是 : 111111 , BB…

关于二进制???

文章目录 二进制二进制转化为十进制十进制转化成二进制无符号数和有符号数原码反码补码 二进制的计算规则 二进制 二进制转化为十进制 二进制是一套计数方法,每个数位有0、1两种可能,类比在日常生活中我们使用的十进制,每个数位有0-9十种可…

二进制及二进制的转换

二进制(binary)是在数学和数字电路中指以2为基数的记数系统,是以2为基数代表系统的二进位制。这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示 [1] 。数字电子电路中&a…

二进制转换

1、十进制数45转换为二进制 (1)除二取余法 除数被除数余数24512220211125122021120 自下往上:101101 (2)2的幂做加法 45 32 841 对应的是101101 2、二进制转负整数 以11010011为例子 先减1 11010010 按…

什么是二进制,进制之间是如何转换的,浅显易懂的,一看就会

什么是二进制呢? 二进制数据是用0和1两个数码来表示的数,它的基数为2,进位规则是逢二进一 加法:000;101;011;110(等价于10,向前进一) 案例(前面用0补齐) 1110,10111,111100,1001101,1011110,1101111,11111000 ... 减法: 0-00,1-01&#xf…

二进制详解

在计算机的世界里,只有0和1,也就是二进制。 那如何把一个十进制的数转成二进制或者其他进制,请下图: 十进制转二进制 十进制的123转成二进制就是1111011,转成几进制都是一个道理。 一、二进制 1.1 二进制是计算机采…

几何平均数

几何平均数是n个变量值连乘积的n次方根。 [2] 分为简单几何平均数与加权几何平均数。 1、简单几何平均数: 几何平均数示意图 2、加权几何平均数: 转载于:https://www.cnblogs.com/kakaisgood/p/9981420.html

算术平均、几何平均、调和平均、平方平均和移动平均

本文内容 算术平均几何平均调和平均平方平均移动平均 算术平均、几何平均、调和平均、平方平均和移动平均跟计算编程有什么关系:Just One Word,不能只会算术平均数,还有其他很多选择,以及不同场景使用不同的平均数。 算术平均 算…

加权平均数的例子_加权平均值和算术平均值的区别与公式

某些数值占较高比重的平均值,平均值,在计算一个简单的平均值时,每个数值的比重都是相同的,这是 1、2、3 和 4 的平均值: 把数值相加,然后除以个数: 平均值 1 2 3 4 10 2.5 4 4 权数我们可…