PHP 支付宝退款操作+注意事项 (2019-06-06)

2024-06-07 17:18

本文主要是介绍PHP 支付宝退款操作+注意事项 (2019-06-06),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

♨ 背景

  • 这两天在做 APP下的支付宝支付功能,涉及到其 退款操作 功能,所以在应用申请的等待时间里就已经做了代码的编写 ,在此记录一下几个注意的事项,希望能帮到各位道友

多少提一下:毕竟我的前提操作是 App支付快速接入,虽然理论上不会影响

  • 开发环境
	> ThinkPHP 框架:	ThinkPHP5.1.2> PHP 版本:			php-5.6.32(>= 及以上)> 服务器 :			Nginx> 线上系统:			CentOS7.1
  • 支付宝交易退款开发文档:alipay.trade.refund(统一收单交易退款接口)
    注意阅读人家官方开头的 应用场景介绍

  • App支付服务端 DEMO & SDK
    根据我的语言要求,下载的当然是 PHP版资源

☄ 代码实现

  1. 首先,自然是顺利把 DEMO & SDK 的源码包整合到自己的框架中,以我的框架为例如下图,同时要注意对使用到的类设置 namespace 空间,以保证顺利访问
  2. 进行核心代码的编写,可对应文档中的请求示例,如下为我自行整理的代码:
    /*** 统一收单交易退款接口* @param string $out_trade_no 订单支付时传入的商户订单号* @param string $refund_fee 需要退款的金额* @return array*/public function payRefundAli($out_trade_no = "", $refund_fee = "0.00"){$aop = new AopClient ();$aop->gatewayUrl = $this->gatewayUrl;$aop->appId = $this->appID;$aop->rsaPrivateKey = $this->rsaPrivateKey;$aop->alipayrsaPublicKey = $this->alipayrsaPublicKey;$aop->apiVersion = '1.0';$aop->signType = 'RSA2';$aop->postCharset = 'utf-8';$aop->format = 'json';$request = new AlipayTradeRefundRequest ();//TODO 方便多次退款的设置$out_request_no = $out_trade_no.rand(1000,9999);$request->setBizContent("{" .//订单支付时传入的商户订单号,不能和 trade_no同时为空。"\"out_trade_no\":\"$out_trade_no\"," .//支付宝交易号,和商户订单号不能同时为空//"\"trade_no\":\"2019060622001445431042039169\"," .//需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数 c"\"refund_amount\":$refund_fee," .//标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传"\"out_request_no\":\"$out_request_no\"" ."  }");$result = $aop->execute($request);//var_dump($result);$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";$resultCode = $result->$responseNode->code;if (!empty($resultCode) && $resultCode == 10000) {$status = 1;$message = "退款成功";} else {$status = 0;$message = $result->alipay_trade_refund_response->sub_msg;}//echo $message;return showMsg($status,$message); //这是我自己的封装方法,可忽略...}
  1. 根据自己的具体业务进行调用或修改即可,测试可行!!!

☄ 注意事项

  1. 当然是最基本的支付宝应用配置信息,比如 appID、rsaPrivateKey、alipayrsaPublicKey
  2. 尤其注意 请求参数的集合 biz_content 的参数补充,切记最后一个参数后面 不要有 逗号!!!
  • 我就是粗心大意,找了一天查不出原因,一直报错 ( 可算长记性了 ) :

40004: ACQ.INVALID_PARAMETER "参数无效"


3. 对于同一订单的多次退款操作,需要注意添加 out_request_no 参数,不然会提示:

ACQ.REFUND_AMT_NOT_EQUAL_TOTAL “撤销或退款金额与订单金额不一致”

  • 正确配置后,多次退款记录如下:

☞ 附录

    1. 因为觉得退款操作简单,所以先进行整理编辑下;
      对于支付逻辑,等端午节过后再做整理 —— APP(UniAPP) 支付宝支付操作指导 + 遇到的坑(PHP实现)
    1. 建议:进行支付宝退款时,要记录官方服务器反馈的信息,方便后期排查验证
      如下为退款申请,反馈所得的信息如下:
{"code": "10000","msg": "Success","buyer_logon_id": "zha***@sina.com","buyer_user_id": "2088702838245430","fund_change": "Y","gmt_refund_pay": "2023-09-08 10:28:02","out_trade_no": "2023090810253542281","refund_detail_item_list": [{"amount": "0.01","fund_channel": "PCREDIT"}],"refund_fee": "0.01","send_back_fee": "0.01","trade_no": "2023090822001445431424023419"
}

这篇关于PHP 支付宝退款操作+注意事项 (2019-06-06)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039797

相关文章

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce

MySQL表空间结构详解表空间到段页操作

《MySQL表空间结构详解表空间到段页操作》在MySQL架构和存储引擎专题中介绍了使用不同存储引擎创建表时生成的表空间数据文件,在本章节主要介绍使用InnoDB存储引擎创建表时生成的表空间数据文件,对... 目录️‍一、什么是表空间结构1.1 表空间与表空间文件的关系是什么?️‍二、用户数据在表空间中是怎么

Python对PDF书签进行添加,修改提取和删除操作

《Python对PDF书签进行添加,修改提取和删除操作》PDF书签是PDF文件中的导航工具,通常包含一个标题和一个跳转位置,本教程将详细介绍如何使用Python对PDF文件中的书签进行操作... 目录简介使用工具python 向 PDF 添加书签添加书签添加嵌套书签Python 修改 PDF 书签Pytho