支付宝退款
支付和退款都需要,这里的支付宝公钥(注意:不是应用公钥,支付宝公钥在应用公钥基础上生成的),和应用的私钥;
里面参数有几个用到支付回调里面的参数, 支付流水号,支付者信息,支付登录者信息;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | public function AlipayLaunchRefund($data){ vendor( 'Alipay.Sdk.AopClient' ); vendor( 'Alipay.Sdk.SignData' ); vendor( 'Alipay.Sdk.request.AlipayTradeRefundRequest' ); $aop = new AopClient(); $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do' ; $configs = D( 'Configs' )->getKeys([ 'alipay_app_id' , 'alipay_public_key' , 'alipay_private_key' ]); $aop->appId = $configs[ 'alipay_app_id' ]; $privateKey = file_get_contents($configs[ 'alipay_private_key' ]); $publicKey = file_get_contents($configs[ 'alipay_public_key' ]); $aop->rsaPrivateKey = $privateKey; $aop->alipayrsaPublicKey = $publicKey; $aop->apiVersion = '1.0' ; $aop->signType = 'RSA2' ; $aop->postCharset = 'UTF-8' ; $aop->format = 'json' ; $request = new AlipayTradeRefundRequest(); $refundInfo = [ 'trade_no' => $data[ 'trade_no' ], 'out_trade_no' => $data[ 'out_trade_no' ], 'fund_change' => $data[ 'fund_change' ], 'refund_fee' => $data[ 'price' ] / 100, 'refund_amount' => $data[ 'price' ] / 100, 'refund_currency' => 'CNY' , 'gmt_refund_pay' => date( 'Y-m-d H:i:s' ,time()), 'store_name' => '***' , 'buyer_logon_id' => $data[ 'buyer_logon_id' ], 'buyer_user_id' => $data[ 'buyer_user_id' ] ]; $bizcontent = json_encode($refundInfo, true ); setlog($refundInfo,[],__METHOD__. '__2222' ); $request->setBizContent($bizcontent); $result = $aop->execute($request); setlog($result,[],__METHOD__. '__3333' ); $responseNode = str_replace( "." , "_" , $request->getApiMethodName()) . "_response" ; $resultCode = $result->$responseNode->code; if (!empty($resultCode) && $resultCode == 10000){ $return_data = [ 'num' => 1, 'desc' => '退款成功' , 'data' => $result->$responseNode->trade_no ]; } else { $return_data = [ 'num' => -1, 'desc' => $result->$responseNode->sub_msg, ]; } return $return_data; } /*** * 支付成功: * [alipay_trade_refund_response] => stdClass Object ( [code] => 10000 [msg] => Success [buyer_logon_id] => men***@163.com [buyer_user_id] => 2088302399936655 [fund_change] => Y [gmt_refund_pay] => 2019-01-28 15:57:58 [out_trade_no] => AXSD19028110031 [refund_fee] => 0.01 [send_back_fee] => 0.00 [trade_no] => 2019012822001436651021876213 ) [sign] => cd/YzFBzIrkW5m460EGbK4p6VjESCTtuD82I/aUj5YxtIGoUp75ZmwhPehHdPrSsLHvtwz4EVytA07EXftpjz7cV0pPL5gQQtM4WeVTEM1EttWK3lMzvKO9uZYJDrYrj8M5qV3zDk926A8fN8BQMKflu7SaBY7eQ/oGMMKbDDYYw9kRAFAhyFEiOBlP868LxNNA4qGJgOBU385uKO1nOqz9Fg9RlMl352ix8fT0XjXccW5VIaLaxZG3o60kFY4Ki7NhklJ4m+abnxXRfztfoBtvH+nsUuSmUBLvtkHIjaC3PZkarCNDJPoIZG06QThjO6KAzAz8j9sSunC3DiGjd8w== ) * 支付失败: ( [alipay_trade_refund_response] => stdClass Object ( [code] => 40004 [msg] => Business Failed [sub_code] => ACQ.CURRENCY_NOT_SUPPORT [sub_msg] => 商户签约结算产品不支持交易币种 [refund_fee] => 0.00 [send_back_fee] => 0.00 ) [sign] => AEgIeov88pApGGIYx+FS3/FEJ8CXAD7JjsELdo1ile9sGOuDYJqlTO0BF0hFRJU4NA+xcIGPOatINeDbMMdi4n+VcjUWOdctJc8vYZSldi3UFI6hXt5gyMQS5smDvy5Dywa8lDijBmXpV3l2nJqJWKmr5jYIb3lMkFH4ZQZFnNu6hdPb0VdnIq71pyjoYsLKWFai7gWYiBPuGuV9iPb/0dlNuL3BjoTjd/FKFp/1HFPZ3Wpn2CQ26iqDo5nXlPDQw6YzLy24SuIR7yau6P8ZHvHqXMK9G27gBqJG0Lexa2eo7iJCl05/oxisD1TuFunk4rR41UtXeUouT6Gqg9fjew== ) */ |
相信坚持的力量,日复一日的习惯.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)