防止重复支付方法、装置、终端及存储介质与流程

文档序号:33016599发布日期:2023-01-20 16:16阅读:62来源:国知局
防止重复支付方法、装置、终端及存储介质与流程

1.本技术涉及数字化交易技术领域,具体而言,涉及一种防止重复支付方法、装置、终端及存储介质。


背景技术:

2.在支付系统中,由于系统设计缺陷容易造成重复支付,尤其是高并发请求场景下,会给支付系统带来资金损失。因此,如何在高并发请求场景下防止重复支付成为亟待解决的问题。
3.目前,针对高并发请求场景,防止重复支付均是通过给交易增加一个交易状态标识,当判断到支付成功后,就不再发起重复的支付。
4.然而,仅通过交易状态标识的方法,当同样请求并发重试时,多份请求同时查询交易状态标识均为“未支付”,进而都执行支付,如果后续流程不加以控制则仍会造成重复支付问题。


技术实现要素:

5.本技术的主要目的在于提供一种防止重复支付方法、装置、终端及存储介质,以解决相关技术中发生重复支付的问题。
6.为了实现上述目的,第一方面,本技术提供了一种防止重复支付方法,包括:
7.接收目标业务订单对应的支付请求,其中,支付请求中至少包括目标业务订单对应的外部订单号;
8.基于初始订单关系数据和外部订单号,生成支付订单号;
9.基于支付订单号更新初始订单关系数据,确定更新结果;
10.基于更新结果,确定是否等待银行系统反馈的支付结果。
11.在一种可能的实现方式中,基于初始订单关系数据和外部订单号,生成支付订单号,包括:
12.查询是否存在与外部订单号所对应的初始订单关系数据;
13.若不存在,生成支付订单号。
14.在一种可能的实现方式中,方法还包括:
15.若存在,遍历初始订单关系数据中的支付订单号和支付订单号的支付状态;
16.若支付订单号的支付状态为第一支付状态和第三支付状态,且第一支付状态和第三支付状态对应的支付订单号的数目均大于或等于1,系统出现异常状况,终止目标业务订单;
17.若支付订单号的支付状态为第二支付状态,银行系统完成目标业务订单对应的支付请求,其中,第一支付状态用于表征“进行中”的支付订单,第二支付状态用于表征“失败”的支付订单,第三支付状态用于表征“成功”的支付状态。
18.在一种可能的实现方式中,方法还包括:
19.若支付订单号的支付状态不是第二支付状态,判断支付订单号的支付状态是否为第一支付状态;
20.若支付订单号的支付状态为第一支付状态,等待银行系统反馈支付结果。
21.在一种可能的实现方式中,方法还包括:
22.若支付订单号的支付状态不是第一支付状态,且支付订单号的支付状态为第二支付状态,执行基于支付订单号更新初始订单关系数据,确定更新结果的步骤。
23.在一种可能的实现方式中,基于支付订单号更新初始订单关系数据,确定更新结果,包括:
24.基于支付订单号更新初始订单关系数据,生成目标订单关系数据,更新结果为成功。
25.在一种可能的实现方式中,基于更新结果,确定是否等待银行系统反馈的支付结果,包括:
26.向银行系统发送支付指令,等待银行系统基于发送指令反馈的支付结果。
27.在一种可能的实现方式中,基于支付订单号更新初始订单关系数据,确定更新结果,包括:
28.基于支付订单号更新初始订单关系数据,未生成目标订单关系数据,更新结果为失败。
29.在一种可能的实现方式中,基于更新结果,确定是否等待银行系统反馈的支付结果,包括:
30.在初始订单关系数据中查询支付订单号对应的支付状态;
31.若支付状态为第一支付状态,等待银行系统基于支付订单号反馈的支付结果。
32.在一种可能的实现方式中,方法还包括:
33.若支付状态不是第一支付状态,系统出现异常,终止目标业务订单。
34.在一种可能的实现方式中,基于更新结果,确定是否等待银行系统反馈的支付结果,包括:
35.若支付订单号的支付状态为第一支付状态和第三支付状态,且第一支付状态和第三支付状态对应的支付订单号的数目均大于或等于1,系统出现异常状况,终止目标业务订单。
36.第二方面,本发明实施例提供了一种防止重复支付装置,包括:
37.接收模块,用于接收目标业务订单对应的支付请求,其中,支付请求中至少包括目标业务订单对应的外部订单号;
38.订单号生成模块,用于基于初始订单关系数据和外部订单号,生成支付订单号;
39.更新判断模块,用于基于支付订单号更新初始订单关系数据,确定更新结果;
40.支付结果确定模块,用于基于更新结果,确定是否等待银行系统反馈的支付结果。
41.第三方面,本发明实施例提供了一种终端,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如上任一种防止重复支付方法的步骤。
42.第四方面,本发明实施例提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现如上任一种防止重复支付方法的步
骤。
43.本发明实施例提供了一种防止重复支付方法、装置、终端及存储介质,包括:接收目标业务订单对应的支付请求,先基于初始订单关系数据和外部订单号,生成支付订单号,然后基于支付订单号更新初始订单关系数据,确定更新结果,再基于更新结果,确定是否等待银行系统反馈的支付结果。本发明对于接收到的一笔支付请求,根据该笔请求的“外部订单号”,相应地生成一个“支付订单号”,然后再请求银行系统发起支付指令。一笔“外部订单号”只允许关联至多一笔成功支付的“支付订单号”,以及多笔支付失败的“支付订单号”。因此,当支付系统在接收请求方对同一笔外部订单号发起的并发、重复请求时,都能正确的保障至多只有一笔支付请求可以成功,从而避免了重复支付。
附图说明
44.构成本技术的一部分的附图用来提供对本技术的进一步理解,使得本技术的其它特征、目的和优点变得更明显。本技术的示意性实施例附图及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
45.图1是本发明一实施例提供的一种防止重复支付方法的实现流程图;
46.图2是本发明一实施例提供的支付订单状态的示意图;
47.图3是本发明另一实施例提供的支付订单状态的示意图;
48.图4是本发明实施例提供的订单关系数据结构的示意图;
49.图5是本发明另一实施例提供的一种防止重复支付方法的实现流程图;
50.图6是本发明另一实施例提供的一种防止重复支付方法的实现流程图;
51.图7是本发明实施例提供的一种防止重复支付装置的结构示意图;
52.图8是本发明实施例提供的终端的示意图。
具体实施方式
53.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
54.本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。
55.应当理解,在本发明的各种实施例中,各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
56.应当理解,在本发明中,“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
57.应当理解,在本发明中,“多个”是指两个或两个以上。“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。“包含a、b和c”、“包含a、b、c”是指a、b、c三者都包含,“包含a、b或c”是指包含a、b、c三者之一,“包含a、b和/或c”是指包含a、b、c三者中任1个或任2个或3个。
58.应当理解,在本发明中,“与a对应的b”、“与a相对应的b”、“a与b相对应”或者“b与a相对应”,表示b与a相关联,根据a可以确定b。根据a确定b并不意味着仅仅根据a确定b,还可以根据a和/或其他信息确定b。a与b的匹配,是a与b的相似度大于或等于预设的阈值。
59.取决于语境,如在此所使用的“若”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”或“响应于检测”。
60.下面以具体地实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
61.首先,为使本发明方案清楚易懂,对专业词汇进行解释说明,具体如下:
62.重复支付:指对于一笔交易指令,被支付多次。
63.外部订单号:指支付系统接收到一笔支付请求时,该笔支付请求通过支付接口传入的唯一订单号,用于标识一笔唯一的支付请求。
64.支付订单号:指支付系统向银行系统发起支付请求时,由支付系统向银行系统传入的支付订单号,用于唯一标识一笔由支付系统发起的支付请求。
65.进一步地,为使本发明的目的、技术方案和优点更加清楚,下面将结合附图通过具体实施例来进行说明。
66.在一个实施例中,如图1所示,提供了一种防止重复支付方法,包括以下步骤:
67.步骤s101:接收目标业务订单对应的支付请求。
68.其中,目标业务订单包括采用系统(即支付系统)支付的任何业务订单,如通过美团app点外卖、用滴滴打车等。
69.其中,支付请求中包括支付请求参数,支付请求参数包括外部订单号,金额,支付账户等信息。
70.当支付系统接收到如滴滴打车订单的支付请求,先执行初始化工作,其中,初始化工作可包括但不限于检查支付请求参数、检查支付状态、存储支付信息等。
71.步骤s102:基于初始订单关系数据和外部订单号,生成支付订单号。
72.在阐述本步骤之前,需要对支付状态进行说明,如图2所示,本技术中的支付状态(支付订单状态)包括三类,即第一支付状态、第二支付状态和第三支付状态,其中,第一支付状态用于表征“进行中”的支付订单,“进行中”表示一笔支付请求正在处理当中,但尚未从银行系统得到最终支付结果;第二支付状态用于表征“失败”的支付订单,“失败”表示银行系统已返回响应,该笔支付失败,支付系统可根据需求重试该笔支付请求,或终止,本方案公开的实现支持重试;第三支付状态用于表征“成功”的支付状态,“成功”表示银行系统已返回响应,该笔支付已成功。
73.进一步地,图3定义了支付系统接到一笔唯一编号“外部订单号”标识的支付请求,支付系统内部在每次请求银行系统之前,都需要生成一个唯一编号“支付订单号”,一笔外部订单号可以对应n个支付状态为“失败”的支付订单号,其中,n为大于1的整数,因为请求
银行系统可能会出现多次失败,而同一时刻,只能存在至多一笔支付状态为“进行中”或是“成功”的支付订单号,即,如果已经向银行发起了请求,在未得到银行响应结果之前,是不能再次请求银行的,以免出现重复支付问题。
74.图4是根据图3中所定义外部订单号与支付订单号的关系,即订单关系数据,设计了存储数据结构,以外部订单号为唯一键,其值域为一个数组结构,记录每笔支付订单号及其支付状态。该结构可存入内存缓存比如redis,或是关系型数据库比如mysql等。
75.下面结合图2-图5对基于初始订单关系数据和外部订单号,生成支付订单号进行说明,具体如下:
76.当对目标业务订单进行初始化工作后,需要查询是否存在与外部订单号所对应的初始订单关系数据,若不存在,生成支付订单号;若存在,遍历初始订单关系数据中的支付订单号和支付订单号的支付状态,以通过支付订单号和支付订单号的支付状态来判断对目标业务订单进行如何处理。
77.通过支付订单号和支付订单号的支付状态来判断对目标业务订单进行的处理主要分为四种情况:
78.第一种情况:若支付订单号的支付状态为第一支付状态和第三支付状态,且第一支付状态和第三支付状态对应的支付订单号的数目均大于或等于1,系统出现异常状况,终止目标业务订单;
79.第二种情况:若支付订单号的支付状态为第二支付状态,银行系统完成目标业务订单对应的支付请求。
80.第三种情况:若支付订单号的支付状态不是第二支付状态,判断支付订单号的支付状态是否为第一支付状态,若支付订单号的支付状态为第一支付状态,等待银行系统反馈支付结果。
81.第四种情况:若支付订单号的支付状态不是第一支付状态,且支付订单号的支付状态为第二支付状态,执行基于支付订单号更新初始订单关系数据,确定更新结果的步骤。
82.步骤s103:基于支付订单号更新初始订单关系数据,确定更新结果。
83.结合图6,当生成支付订单号后,组成如图4所示的数据结构,然后需要通过支付订单号来更新初始订单关系数据(即图6中的更新订单关系),即往存储系统中更新以“外部订单号”为键的值域。
84.如果基于支付订单号更新初始订单关系数据,生成目标订单关系数据,更新结果为成功;如果基于支付订单号更新初始订单关系数据,未生成目标订单关系数据,更新结果为失败。
85.步骤s104:基于更新结果,确定是否等待银行系统反馈的支付结果。
86.在更新结果为成功的情况下,可向银行系统发送支付指令,需传入支付订单号、金额、账户信息等参数,然后等待银行系统基于发送指令反馈的支付结果。
87.在更新结果为失败的情况下,特别是出现了数据更新冲突,此时说明系统有多个请求并发执行并产生了冲突,需要再次查询订单关系数据。即在初始订单关系数据中查询支付订单号对应的支付状态,具体地:
88.若支付状态为第一支付状态,等待银行系统基于支付订单号反馈的支付结果。
89.若支付状态不是第一支付状态,系统出现异常,终止目标业务订单。
90.若支付订单号的支付状态为第一支付状态和第三支付状态,且第一支付状态和第三支付状态对应的支付订单号的数目均大于或等于1,系统出现异常状况,终止目标业务订单。
91.本发明实施例提供了一种防止重复支付方法,包括:接收目标业务订单对应的支付请求,先基于初始订单关系数据和外部订单号,生成支付订单号,然后基于支付订单号更新初始订单关系数据,确定更新结果,再基于更新结果,确定是否等待银行系统反馈的支付结果。本发明对于接收到的一笔支付请求,根据该笔请求的“外部订单号”,相应地生成一个“支付订单号”,然后再请求银行系统发起支付指令。一笔“外部订单号”只允许关联至多一笔成功支付的“支付订单号”,以及多笔支付失败的“支付订单号”。因此,当支付系统在接收请求方对同一笔外部订单号发起的并发、重复请求时,都能正确的保障至多只有一笔支付请求可以成功,从而避免了重复支付。
92.应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
93.以下为本发明的装置实施例,对于其中未详尽描述的细节,可以参考上述对应的方法实施例。
94.图7示出了本发明实施例提供的一种防止重复支付装置的结构示意图,为了便于说明,仅示出了与本发明实施例相关的部分,一种防止重复支付装置包括接收模块71、订单号生成模块72、更新判断模块73和支付结果确定模块74,具体如下:
95.接收模块71,用于接收目标业务订单对应的支付请求,其中,支付请求中至少包括目标业务订单对应的外部订单号;
96.订单号生成模块72,用于基于初始订单关系数据和外部订单号,生成支付订单号;
97.更新判断模块73,用于基于支付订单号更新初始订单关系数据,确定更新结果;
98.支付结果确定模块74,用于基于更新结果,确定是否等待银行系统反馈的支付结果。
99.在一种可能的实现方式中,订单号生成模块72还用于查询是否存在与外部订单号所对应的初始订单关系数据;若不存在,生成支付订单号。
100.在一种可能的实现方式中,装置还包括第一判断模块,第一判断模块用于若存在,遍历初始订单关系数据中的支付订单号和支付订单号的支付状态;若支付订单号的支付状态为第一支付状态和第三支付状态,且第一支付状态和第三支付状态对应的支付订单号的数目均大于或等于1,系统出现异常状况,终止目标业务订单;若支付订单号的支付状态为第二支付状态,银行系统完成目标业务订单对应的支付请求,其中,第一支付状态用于表征“进行中”的支付订单,第二支付状态用于表征“失败”的支付订单,第三支付状态用于表征“成功”的支付状态。
101.在一种可能的实现方式中,装置还包括第二判断模块,第二判断模块用于若支付订单号的支付状态不是第二支付状态,判断支付订单号的支付状态是否为第一支付状态;若支付订单号的支付状态为第一支付状态,等待银行系统反馈支付结果。
102.在一种可能的实现方式中,装置还包括第三判断模块,第三判断模块用于若支付订单号的支付状态不是第一支付状态,且支付订单号的支付状态为第二支付状态,执行基
于支付订单号更新初始订单关系数据,确定更新结果的步骤。
103.在一种可能的实现方式中,更新判断模块73还用于基于支付订单号更新初始订单关系数据,生成目标订单关系数据,更新结果为成功。
104.在一种可能的实现方式中,支付结果确定模块74还用于向银行系统发送支付指令,等待银行系统基于发送指令反馈的支付结果。
105.在一种可能的实现方式中,更新判断模块73还用于基于支付订单号更新初始订单关系数据,未生成目标订单关系数据,更新结果为失败。
106.在一种可能的实现方式中,支付结果确定模块74还用于在初始订单关系数据中查询支付订单号对应的支付状态;若支付状态为第一支付状态,等待银行系统基于支付订单号反馈的支付结果。
107.在一种可能的实现方式中,装置还包括第四判断模块,第四判断模块用于若支付状态不是第一支付状态,系统出现异常,终止目标业务订单。
108.在一种可能的实现方式中,支付结果确定模块74还用于若支付订单号的支付状态为第一支付状态和第三支付状态,且第一支付状态和第三支付状态对应的支付订单号的数目均大于或等于1,系统出现异常状况,终止目标业务订单。
109.图8是本发明实施例提供的终端的示意图。如图8所示,该实施例的终端8包括:处理器81、存储器82以及存储在存储器82中并可在处理器81上运行的计算机程序83。处理器81执行计算机程序83时实现上述各个防止重复支付方法实施例中的步骤,例如图1所示的步骤101至步骤104。或者,处理器81执行计算机程序83时实现上述各个防止重复支付装置实施例中各模块/单元的功能,例如图7所示模块/单元71至74的功能。
110.本发明还提供一种可读存储介质,可读存储介质中存储有计算机程序,计算机程序被处理器执行时用于实现上述的各种实施方式提供的防止重复支付方法。
111.其中,可读存储介质可以是计算机存储介质,也可以是通信介质。通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。计算机存储介质可以是通用或专用计算机能够存取的任何可用介质。例如,可读存储介质耦合至处理器,从而使处理器能够从该可读存储介质读取信息,且可向该可读存储介质写入信息。当然,可读存储介质也可以是处理器的组成部分。处理器和可读存储介质可以位于专用集成电路(application specific integrated circuits,简称:asic)中。另外,该asic可以位于用户设备中。当然,处理器和可读存储介质也可以作为分立组件存在于通信设备中。可读存储介质可以是只读存储器(rom)、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。
112.本发明还提供一种程序产品,该程序产品包括执行指令,该执行指令存储在可读存储介质中。设备的至少一个处理器可以从可读存储介质读取该执行指令,至少一个处理器执行该执行指令使得设备实施上述的各种实施方式提供的防止重复支付方法。
113.在上述设备的实施例中,应理解,处理器可以是中央处理单元(英文:central processing unit,简称:cpu),还可以是其他通用处理器、数字信号处理器(英文:digital signal processor,简称:dsp)、专用集成电路(英文:application specific integrated circuit,简称:asic)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
114.以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1