基于PHP的微信支付教程 互动版

申请退款

对应文件管理中example文件夹下的refund.php文件

1,头文件引入

必须引入的头文件,以SDK的路径为例子

require_once "../lib/WxPay.Api.php";

可选的头文件引入,该头文件只是微信支付用于记录操作日志

require_once 'log.php';

2,退款参数

除了要输入要退款的订单号之外,退款还需要商户号退款的款数商户订单号为该次退款设置一个退款单号等,在这里要注意退款的款数要化为单位分,例如要退款2元,那么设置时要设置为200。

2,发起退款

这里我们以REQUEST的方式获取传过来的参数为例子,这种方式对发送端是get还是post没要求,无论是get的方式还是post方式,都能接收到,在安全方面不够post形式好。

if(isset($_REQUEST["out_trade_no"]) && $_REQUEST["out_trade_no"] != ""){
    $out_trade_no = $_REQUEST["out_trade_no"]; // 要退款的订单的商户订单号
    $total_fee = $_REQUEST["total_fee"];       // 该订单的一共支付总额
    $refund_fee = $_REQUEST["refund_fee"];     // 要退款的钱数

    $input = new WxPayRefund();
    /** SetOut_trade_no 设置该订单的商户订单号,凭借这个唯一确定 */
    $input->SetOut_trade_no($out_trade_no);
    /** SetTotal_fee 设置订单的当时支付的总额 */
    $input->SetTotal_fee($total_fee);
    /** SetRefund_fee 设置要退款多少钱 */
    $input->SetRefund_fee($refund_fee);
    /** SetOut_refund_no 设置此次商户退款的单号,它不是商户订单号 */
    $input->SetOut_refund_no(WxPayConfig::MCHID.date("YmdHis"));
    /** SetOp_user_id 设置商户号 */
    $input->SetOp_user_id(WxPayConfig::MCHID);

    /** 发起退款 */
    $order = WxPayApi::refund($input);
    /** 在返回的数组中,我们能够获取键名return_code */
    if($order["return_code"]=="SUCCESS"){
        // 退款申请成功
    }else if($order["return_code"]=="FAIL"){
        // 退款申请失败
    }else{
        // 未知状态
    }
    var_dump($order);
}

更多查询订单返回值,参考官方文档

3,退款效果

一旦申请退款成功,那么该订单号对应的用户便会在微信客户端收到退款的凭据,同时在商家的商户平台也会有该退款记录生成