对接浦发银行支付(六)-- 请求退款接口与查询退款结果接口

一、概述

本文介绍浦发银行支付的请求退款和查询退款结果两个接口,浦发银行的退款流水号是以5901开头。发起退款的时候,浦发银行返回浦发银行退款流水号给我们(这里的我们是指对接浦发银行支付的一方,于浦发银行而言,就是商户);我们在查询退款结果的时候,依据便是浦发银行退款流水号。

接口调用的先后顺序如下:
在这里插入图片描述
下面将详细介绍这两个接口的调用以及报文示例:

二、请求退款接口

退款接口是同步的,和微信退款不同,后者还需要额外对接退款回调逻辑。

  • 接口名称:对公收款支付退货
  • 接口URI:/api/corporateAccounts/payments/ordersReturn
  • 请求方式:POST
  • 必填的请求参数:

因为接口的入参数量比较多,就不一一贴出,而实际上发起退款,核心就是支付流水号和退款金额。

  • frmrMrchOrdrNo:浦发银行支付流水号。在支付下单的时候返回,并保存至支付订单。
  • bussLstNo:商户支付流水号。由支付系统生成的唯一单号。
    在这里插入图片描述
  • 返回参数

响应报文的参数数量多得吓人,其实我们也只需要两个值(tranOrdrNo和tranDate)。对于响应报文中的transNo(交易流水号),但是程序用不上,注意别混淆了二者。

  • tranOrdrNo:浦发银行退款流水号

在这里插入图片描述

报文示例

  • 请求报文
{"mrchId": "310319982990001","bussLstNo": "062404171015030170B15","mrchOrdrNo": "R062B40417105220017504","mrchTm": "20240417105220","tranAmt": "0.01","frmrMrchOrdrNo": "1901041710141000674832060267","origTranDate": "20240417"
}
  • 响应报文

同查询支付结果的返回报文一样,也不会返回平台退款流水号。
重要字段:{
“statusCode”: “0000”,
# 浦发银行退款流水号
“tranOrdrNo”: “5901041710511111585791059835”,
# 浦发银行交易日期
“tranDate”: “20240417”,
“tranAmt”: “0.01”,
“ordrSt”: “00”
}

{"statusCode": "0000","transNo": "04972404176851052204509115","retGdsAmt": "","totalAmt": "","ordrAmt": "","transAmt": "0.01","cashRfndAmt": "","rfdAmt": "","vcherNum": "","byrOfAlipayAcctNO": "","fndChngFlg": "","wthdrwnUsAmtCnl": "","mrchStrNm": "","userId": "","ccy": "","mrchOrigOrdrNo": "","tranOrdrNo": "5901041710511111585791059835","tranDate": "20240417","tranAmt": "0.01","mrchId": "310319982990001","mrchOrdrNo": "062404171015030170B15","clrgDate": "","ordrSt": "00","dcnRfdDtl": "","rfndAcceptTime": "","thdPltfrmTm": "","byrRfndAmnt": "","dscntRfndAmnt": "","mdsctRfndAmnt": "","actRfndAmt": "","bussRetCd": "","returnInfo": "","bussRetInfo": "退货交易成功","errCode": "","errInfo": "","trdChnl": "","bussBranchId": "","tranTellerNo": "","rsrvFld1": "","rsrvFld2": "","rsrvFld3": "","rsrvFld4": "","rsrvFld5": "","rsrvFld6": "","rsrvFld7": "","remark": "","corpRcvPyRetInfo": []
}

三、查询退款结果

  • 接口名称:对公收款交易查证
  • 接口URI:/api/corporateAccounts/payments/status
  • 请求方式:GET

请求参数

交易日期tranDate作为必填字段,无疑是画蛇添足了。本来支付服务只需要保存浦发银行退款流水号即可,现在可好,还需要额外保存它。
那你可不可以不保存它,采用平台退款订单的创建时间代替它呢?
这里会存在创建退款的时间和交易日期不在同一天,也即跨天的可能。

  • tranOrdrNo:必填,浦发银行退款流水号,在请求退款接口中返回。
  • mrchOrdrNo:非必填,平台退款流水号。既然是非必填,浦发银行方对该字段不作要求,更说明它是以浦发银行退款流水号为依据。
    在这里插入图片描述

对tranDate字段的处理

  • 1、请求退款,接口返回的tranDate,保存至退款订单中的refundOkDate。(refundOkDate原本是实际退款成功的时间。特别是像微信退款,发起退款的时候,refundOkDate还是空;待退款回调处理时,更新refundOkDate为实际退款时间)
    这里会有个问题,实际退款的时间只能精确到年月日,不知道具体的时分秒。(可以从退款订单的创建时间大概推断出退款日期的时分秒)
  • 2、在查询退款结果的时候,查询退款订单中的refundOkDate;(如果它为空,意味着请求退款的时候出错,则取退款订单的创建时间)该接口会返回实际退款时间,而我们说了,请求退款接口是同步的,却未返回实际退款时间,只返回了交易日期yyyyMMdd。
  • 3、处理退款订单,更新退款订单中的实际退款时间refundOkDate。

报文示例

  • 请求报文
{"mrchId": "310319982990001",# 平台退款流水号"mrchOrdrNo": "R062B40417105220017504",# 浦发银行退款流水号"tranOrdrNo": "5901041710511111585791059835",# 浦发银行交易日期"tranDate": "20240417"
}
  • 响应报文

重要字段:{
“statusCode”: “0000”,
# 浦发银行退款流水号
“frmrMrchOrdrNo”: “5901041710511111585791059835”,
# 实际退款时间
“tranTimep”: “20240417105111”,
“tranAmt”: “0.01”,
“ordrSt”: “00”
}

{"statusCode": "0000","transNo": "04972404176851201434413175","usrFlgId": "","isSbscrbFlg": "","usrChildFlg": "","isFlag": "","transAmt": "","busnPckt": "","clueDtl": "","totalAmt": "","ordrAmt": "","wthdrwnUsAmtCnl": "","retGdsAmt": "","rfdAmt": "","vcherNum": "","fundSource": "","inAcctName": "","rfndRlst": "","byrOfAlipayAcctNO": "","actRcvAmt": "","byrPayAmt": "","usPntsPayAmt": "","toUsEstbInvAmt": "","clientID": "","inrChlCnlNo": "","mrchStrNm": "","userId": "","addItInNal": "","infoDsc": "","fldData": "","bussRetCd": "","returnInfo": "","trdMerMechNo": "","weChatSubMechNo": "","errCode1": "","errInfo": "","terminalNo": "","tranType": "","ordrSt": "00","pyBnkInfo": "","cmdtyInfo": "","tranAmt": "0.01","ccy": "","thdPltfrmTm": "","thdPtySeq": "","tranOrdrNo": "","tranDate": "20240417","clrgDate": "","tranTimep": "20240417105111","mrchTm": "","bussLstNo": "","frmrMrchDate": "","frmrMrchOrdrNo": "5901041710511111585791059835","orgClrgDt": "","tranCode": "OORF","mrchId": "310319982990001","openBrNo": "","instId": "","mrchDvlpmBnkNo": "","mrchDvlpmBnkBrId": "","strNo": "","cshrNo": "","mrchlInfmAdr": "","channelNo": "","hvWthdrwnAmt": "0.00","rfndblAmt": "0.01","hvThdChrgAmt": "","reserveAmt": "","chrgAmt": "","charges": "","prjPrdTp": "","ordrPcsSt": "","trdRtCd": "00","feeRtId": "","cmdtyDsc": "","crdType": "","bussTrm": "","thdPtyObjNo": "","remark1": "","remark2": "11","dcnRfdDtl": "","crtTm": "","cashRfndAmt": "","pblcAcctId": "","bussRetInfo": "","trdStInfo": "","bussStatusDsc": "","weRfndStatus": "","aLTrnCrc": "","pymtMd": "","dscntAmnt": "","mdsctAmnt": "","byUserType": "","acceptEndTime": "","pftSt": "","errCode2": "","byrRfndAmnt": "","dscntRfndAmnt": "","mdsctRfndAmnt": "","trdChnl": "","rsrvFld1": "","rsrvFld2": "","rsrvFld3": "","rsrvFld4": "","rsrvFld5": "","rsrvFld6": "","rsrvFld7": "","remark3": "","tranVrfyInfo": []
}

退款账单

在这里插入图片描述
点击“查看退款详情”,可以看到浦发银行的支付流水号:
在这里插入图片描述
对于微信来说, 它的商户就是浦发银行,上面4200开头的交易单号是微信的支付流水号,下面1901开头的商户单号是浦发银行的支付流水号。

这里不会展示我们平台的支付流水号。(这是一个涉及三方的交互流程)

我们和浦发银行对账, 然后浦发银行和微信对账;前者的对账依据是1901开头的支付流水号,后者的对账依据是4200开头的支付流水号。

四、总结

当请求退款的时候,当返回报文是"errCode":“CBAS003”,“errInfo”:“无效交易”,可能浦发银行支付流水号存在,或者已全部退款(没有可退金额)。

所以,程序在解析响应报文的时候,先判断"statusCode"是否等于"0000",进一步判断errCode是否为空,报错提示信息包括errCode和errInfo。

奇怪的是,查询退款结果接口,却没有errCode,取而代之的是errCode1和errCode2,但是errInfo只有一个。

针对这个接口,我们改为判断errInfo是否为空。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/1168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向对象设计模式之概念

设计模式系列的观点结合了《HeadFirst设计模式》(中文版)以及《设计模式:可复用面向对象软件的基础》两本书的知识,以及Sunny(刘伟)的博客 《HeadFirst设计模式》(中文版): 百度网盘链接:https://pan.baidu.com/s/1osvnUGZZREm8Jb…

「GO基础」变量

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

python-自动化篇-终极工具-用GUI自动控制键盘和鼠标-pyautogui-键盘

文章目录 键盘键盘——记忆宫殿入门——通过键盘发送一个字符串——typewrite()常规——键名——typewrite()常规——按下键盘——keyDown()常规——释放键盘——keyUp()升级——热键组合——hotkey() 键盘 pyautogui也有一些函数向计算机发送虚拟按键,让你能够填充…

【介绍下WebStorm开发插件】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

深入了解PBKDF2:密码学中的关键推导函数

title: 深入了解PBKDF2:密码学中的关键推导函数 date: 2024/4/20 20:37:35 updated: 2024/4/20 20:37:35 tags: 密码学对称加密哈希函数KDFPBKDF2安全密钥派生 第一章:密码学基础 对称加密和哈希函数 对称加密:对称加密是一种加密技术&…

[阅读笔记15][Orca]Progressive Learning from Complex Explanation Traces of GPT-4

接下来是微软的Orca这篇论文,23年6月挂到了arxiv上。 目前利用大模型输出来训练小模型的研究都是在模仿,它们倾向于学习大模型的风格而不是它们的推理过程,这导致这些小模型的质量不高。Orca是一个有13B参数的小模型,它可以学习到…

Java中的四种引用类型

6.Java中的引用类型 1.强引用 一个对象A被局部变量、静态变量引用了就产生了强引用。因为局部变量、静态变量都是被GC Root对象关联上的,所以被引用的对象A,就在GC Root的引用链上了。只要这一层关系存在,对象A就不会被垃圾回收器回收。所以只…

计算机视觉——OpenCV Python位运算与图像掩码

概述 位运算与图像掩码的结合允许对图像的特定区域进行精确的操作。通过使用位运算(如AND、OR、XOR和NOT),可以基于掩码的选择性地修改图像数据。位运算与图像掩码结合使用的一些关键点和应用场景: 选择性修改: 通过位…

内网云盘如何内网穿透实现公网访问

云盘是一种专业的互联网存储工具,是互联网云技术的产物,它通过互联网为企业和个人提供信息的存储、读取、下载等服务,具有安全稳定、海量存储的特点。随着企业信息化发展,云盘系统需求不断扩大,相关系统软件被广泛应用…

通用大模型研究重点之五:llama family

LLAMA Family decoder-only类型 LLaMA(Large Language Model AI)在4月18日公布旗下最大模型LLAMA3,参数高达4000亿。目前meta已经开源了80亿和700亿版本模型,主要升级是多模态、长文本方面工作。 模型特点:采用标准的…

IoC 思想简单而深邃

一、序言 本文跟大家聊聊 IoC 这一简单而深邃的思想。 二、依赖倒置原则 软件工程理论中共有六大设计原则: 单一职责原则:不存在多于一个的因素导致类的状态发生变更,即一个类只负责一项单一的职责。里氏替换原则:基类出现的地…

VSCode搭建内核源码阅读开发环境

0. 参考链接 使用VSCode进行linux内核代码阅读和开发_vscode阅读linux内核-CSDN博客 1. 搭建Linux内核源码阅读环境 现状,Linux内核源码比较庞大文件非常多,其中又包含的众多的宏定义开关配置选项,这使得阅读内核源代码称为一件头疼的事。 …

常见的七种排序

目录 一、插入排序 1、直接插入排序 2、希尔排序(缩小增量排序) 二、选择排序 3、直接选择排序 4、堆排序 三、交换排序 5、冒泡排序 6、快速排序 四、归并排序 7、归并排序 五、总结 一、插入排序 1、直接插入排序 思路: i 用来…

文本溢出体验进阶:CSS 技巧实现单行/多行隐藏展示以及实际场景应用,确保内容可读性和布局整洁性

CSS文本溢出隐藏是一种常见的场景,它广泛应用于各种网页设计中,旨在确保内容的可读性和布局的整洁性,特别是在空间有限或需要适应不同屏幕尺寸的情况下。 一、文本溢出隐藏并显示省略号 1、单行文本溢出隐藏并显示省略号 对于单行文本&…

paho-mqtt 库揭秘

文章目录 **paho-mqtt 库揭秘**第一部分:背景介绍第二部分:paho-mqtt 是什么?第三部分:如何安装这个库?第四部分:库函数使用方法第五部分:场景应用第六部分:常见Bug及解决方案第七部…

Swift-25-普通函数、闭包函数与Lamda表达式编程

函数 语法定义 先来看下swift中函数的定义,函数用关键字func来指定,语法相对复杂一点,主要有下列4种基本情况,还有比较复杂的,会在后续详细讲解。 无参函数定义 有参函数定义 一个简单的函数和函数调用示例如下&…

分类预测 | Matlab实现SCSO-SVM沙猫群优化算法优化支持向量机多特征分类预测

分类预测 | Matlab实现SCSO-SVM沙猫群优化算法优化支持向量机多特征分类预测 目录 分类预测 | Matlab实现SCSO-SVM沙猫群优化算法优化支持向量机多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现SCSO-SVM沙猫群优化算法优化支持向量机多特征分类…

A1322 电烙铁发热芯热电偶温度与电压数据

就是这种四根线比较细的发热芯: 两根红色线是发热丝,另外两根是热电偶线,透明线是正极,不能搞错了。 非常粗略的测了一下,根本没有考虑误差。拿万用表直接测量热电偶的输出电压;用可调电源手动调节电压&am…

suse15 系统分区信息损坏修复案例一则

关键词 suse linux、系统分区fdisk、分区类型testdisk、grub2、bios There are many things that can not be broken! 如果觉得本文对你有帮助,欢迎点赞、收藏、评论! 一、问题现象 业务反馈一台suse服务器,因错误执行了fdisk分区…

Linux 服务器硬件及RAID配置实战

服务器详解 服务器分类 可以分为:塔式服务器、机架服务器、刀片服务器、机柜服务器等。 其中以机架式居多 服务器架构 服务器品牌: 戴尔、AMD、英特尔、惠普、华为、华3(H3C)、联想、浪潮、长城 服务器规格: 规格…