第三方支付软件大致支付流程

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Webpay支付

一、接受商户订单请求信息

test.jsp界面跳转到test2.jsp界面,此跳转主要是进行MD5加密,

加密字符串="MERCHANTID="+商户ID(comm_code)+"&ORDERSEQ="+订单号+"&ORDERDATE="+订单日期+"&ORDERAMOUNT="+订单金额;

如果clientIP不为空加密字符串+"&CLIENTIP"=ip+"&KEY="+key

Key 根据商户的商户ID 获取商户key(comm_key)

调用CryptTool.md5Digest(加密字符串);

得到test2.jsp页面上mac的值

订单号:日期字符串,调用StringTools.getCurrentDate

订单日期:日期字符串,调用StringTools.getTodayDate2()

订单金额:测试页面默认1

二、根据请求得到界面数据

三、对界面数据非空判断

四、校验商户域名

request.getHeader("Referer")得到商户请求域名

根据得到的商户请求域名和商户Id检验商户域名:请求的域名正则处理跟商户表中domain_name域名是否相同(equalsIgnoreCase:不区分大小比较)。

检验为true为正常,否则检验不通过在UP_ANTIFISH_NOTICE表中插入异常信息。五、分账校验

取商户关系,根据界面传入的商户代码作为分账父商户代码(parent_comm_code)查询商户表得到所有符合条件的商户代码集。(divDetailes)商户代码:金额 | 商户代码:金额...中间以“|”分开的格式。

取出每个商户的交易金额叠加跟结算金额比对,商户集若包含商户代码,如有一个不符合则分账明细参数不正确。

六、商户IP校验

首先获取clientIp(客户端Ip)不为空则校验,再得到商户的商户IP是否校验(IS_IP_VAL),该字段为空则表明商户配置IP不校验,不为空则判断商户真正请求ip 不为空且跟clientIp相等否则IP地址异常,交易存在风险,记录异常信息。

七、对MAC码校验

字符:check = "MERCHANTID=" + merchantID + "&ORDERSEQ=" + orderId + "&ORDERDATE=" + orderDate + "&ORDERAMOUNT=" + transAmount+= "&CLIENTIP="+clientIp+"&KEY="+key;

对check MD5处理。

由界面test2.jsp得到的mac校验域跟check对比

八、检查商户业务类型和支付类型开通情况

调用UP_COMM_ORDER_CHECK_CORE.best_comm_check过程查询业务类型和支付方式开通情。

根据商户ID(comm_code)和支付方式ID (pay_type_id)且状态(status=0:开通的情况下)查询up_comm_open_paytype(商户开通支付方式表),得到支付方式代码(pay_type_id)

根据商户ID(comm_code)和业务类型(comm_busi_code)且状态(status=0:开通的情况下)查询up_comm_open_busi(商户开通业务类别表),得到商户开通的业务类型(comm_busi_code)

返回值:

0000:成功

1010:商户未开通相应支付方式

1020:商户未开通相应业务类型

1030:没有配置商户业务类型或者商户支付方式

九、封装界面数据位payModel实体

十、数据校正

十一、接收商户订单请求

1)对支付请求验证

调用UP_COMM_ORDER_CHECK_CORE.UP_COMM_ORDER_CHECK_CORE_main对支付请求验证

a)对商户注册情况和状态检查

查询商户表(up_comm)status字段,

A、商户已注册但未审批;

B、商户已注册,已审批,但未开通;

C、商户已开通;

D、商户已注销。

b)商户业务开通情况检查

根据业务代码查询商户开通业务表(up_comm_open_busi),如查询到记录则商户已开通此业务,可以正常交易,否则商户未开通此业务或商户为注册等其他异常。

c)商户订单检查

查询商户交易信息表( up_comm_tran_detail)表,根据商户代码、订单流水、订单日期来检查,检查 TRAN_STATUS 的状态。

i.首先判断交易金额是否小于等于0

ii.部分商户限制金额

iii.判断订单请求流水当天是否唯一

查商户订单请求信息表(up_comm_order_detail)order_req_tran_seq=商户请求交易流水号或者(order_seq =商户定单号且order_status=A)

如果有记录,订单正在交易中,不允许再次交易。

iv.判断是否有订单交易成功的记录

首先查询出当天该订单号是否支付过,并且状态是B

from up_comm_tran_detail uc,up_bank_tran_detail ub

where uc.up_tran_seq = ub.up_tran_seq

and m_code = in_comm_code

and (ub.tran_status = 'B' or ub.tran_status = 'D')

如有记录:订单交易成功,不允许再次交易。

v.商户订单查询

首先查询出当天该订单号支付过,但状态是A或C的

调用过程check_bank_tran_status银行交易是否成功检查

from 银行交易日志信息表(up_bank_tran_detail)

and (tran_status = 'B' or tran_status = 'D')

如果无记录:订单交易失败,允许再次交易

如商户订单不存在或订单支付失败,可以正常交易。

d)商户订单插入订单信息表

插入商户订单信息表UP_COMM_ORDER_DETAIL。

2)支付请求验证成功

调用UP_COMM_ORDER_ATTACH_INSERT.insert_order_attach_web过程

插入商户订单请求附加表up_comm_order_attach,成功后

调用UP_COMM_TRAN_ATTACH_INSERT.insert_comm_attach 插入商户交易附加表

up_comm_tran_attach。

十二、新增某些支付机构需要借记卡和信用卡通道

select

t.*,ubs.description,ubs.logo_img_path,ubs.pay_info_html_path,ubs.

TAB_SIGN

from up_bank_comm_relation t,up_bank_sub ubs

where m_code = '0018888888'

andt.bank_code = ubs.bank_code and t.sub_bank_id = ubs.sub_bank_id andt.status = '0' and t.sub_bank_type = '1002'

order by sort_numasc

相关文档
最新文档