支付宝退款

 

 

 

 

 

 

支付和退款都需要,这里的支付宝公钥(注意:不是应用公钥,支付宝公钥在应用公钥基础上生成的),和应用的私钥;

里面参数有几个用到支付回调里面的参数, 支付流水号,支付者信息,支付登录者信息;

 

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==
)
 */

  

 

posted @   盘思动  阅读(1004)  评论(0编辑  收藏  举报
编辑推荐:
· 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)
点击右上角即可分享
微信分享提示