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

确保已下订单

在处理支付结果回调之后,建议再进行一次订单查询,以确保万无一失,除此之外,设置一个订单恢复系统也是可以的,例如下面的例子。

if(isset($tradeId) && $tradeId != "")
{
    $input = new WxPayOrderQuery();
    $input->SetOut_trade_no($tradeId); // 设置好要查询的订单
    $order = WxPayApi::orderQuery($input)); // 进行查询
    if($order['err_code_des'] =="order not exist"){
        // 订单不存在
    }else{
        $money = $order['total_fee']; //所付款数,单位分 
        if($order['trade_state'] =="SUCCESS"){
            //支付成功
            //数据库操作
            //两者对比
            //若数据库中没记录,就恢复订单
        }else if($order['trade_state'] =="REFUND"){
            //已退款
        }else if($order['trade_state'] =="NOTPAY"){
            //用户还没支付
        }else if($order['trade_state'] =="CLOSED"){
            //订单关闭
        }else if($order['trade_state'] =="REVOKED"){
            //已撤销(刷卡支付)
        }else if($order['trade_state'] =="USERPAYING"){
            //用户支付中
        }else if($order['trade_state'] =="PAYERROR"){
            //支付失败(其他原因,例如银行返回失败)
        }
    }
}