买的东西不喜欢了,想要还给商家,申请后商家自动退换购买商品时的买家支付的费用。
微信的退款操作,通过封装与前面支付宝退款除了配置文件,基本一样。
退款代码如下: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
43use Payment\RefundContext;
use Payment\Common\PayException;
use Payment\Config;
//  生成退款单号 便于测试
function createPayid()
{
    return date('Ymdhis', time()).substr(floor(microtime()*1000),0,1).rand(0,9);
}
$config = [
    'app_id'    => 'wxa244db59a34996fc',  // 公众账号ID
    'mch_id'    => '1331302101',// 商户id
    'md5_key'   => 'adslkfjiKQJLAIQLJ393201482333333',// md5 秘钥
    'notify_url'    => 'http://test.helei.com/pay-notify.html',
    'time_expire'	=> '14',
    // 涉及资金流动时 退款  转款,需要提供该文件
    'cert_path' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'wx' . DIRECTORY_SEPARATOR . 'apiclient_cert.pem',
    'key_path'  => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'wx' . DIRECTORY_SEPARATOR . 'apiclient_key.pem',
];
// 退款数据
$reundData = [
    'refund_no' => createPayid(),
    'refund_data'   => [
        ['transaction_id' => '4007572001201607098672633287', 'amount'   => '5', 'refund_fee' => '5', 'reason' => '微信测试金额退款'],
    ],
];
$refund = new RefundContext();
try {
    // 微信退款
    $type = Config::WEIXIN;
    $refund->initRefund(Config::WEIXIN, $wxconfig);
    $ret = $refund->refund($reundData);
} catch (PayException $e) {
    echo $e->errorMessage();exit;
}
var_dump($ret);
当前sdk支付宝可一次退款多笔数据。微信仅能每次退款1笔(如果想要实现一次退订多笔订单,可在客户端通过循环来处理。)
接下来解释下相关的配置信息
微信的配置文件解释参考 微信的三种支付方式接入:APP支付、公众号支付、扫码支付 中的微信配置信息。
请求参数
| 参数 | 参数名 | 参数说明 | 是否必须 | 
|---|---|---|---|
| transaction_id | 微信交易号 | 微信系统中的交易流水号,可用于查询订单状态 | 是 | 
| amount | 总金额 | 微信交易对应的交易总金额 | 是 | 
| refund_fee | 退款金额 | 本次申请的退款金额,退款金额不能大于总金额 | 是 | 
| reason | 退款理由 | 退款的理由,可在用户端查看到 | 是 | 
响应数据
| 参数 | 参数名 | 参数说明 | 是否必须 | 
|---|---|---|---|
| is_success | 成功标识 | 请求是否成功,T:成功,F:失败 | 是 | 
| error | 错误提示 | 只有is_success=F时才返回 | 否 | 
| response | 响应数据 | 查询成功后返回的数据,一个数组,is_success=T时返回 | 否 | 
response 数据描述
| 参数 | 参数名 | 参数说明 | 是否必须 | 
|---|---|---|---|
| transaction_id | 微信订单号 | 微信订单号,下单成功后,微信返回 | 是 | 
| order_no | 商户订单号 | 商户系统内部的订单号 | 是 | 
| refund_no | 商户退款单号 | 商户退款单号 | 是 | 
| refund_id | 微信退款单号 | 微信退款单号 | 是 | 
| refund_fee | 申请退款金额 | 退款总金额,单位为元(已被我处理),可以做部分退款 | 否 | 
| amount | 订单金额 | 订单总金额,单位为元,最多两位小数 | 否 | 

