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

重写回调函数自定义处理

notify的回调方法在lib文件夹下的WxPay.Notify.php文件中,在NotifyCallBack函数里面,它调用了NotifyProcess,注意,此时就相当于调用了notify.php中PayNotifyCallBack类里面的NotifyProcess函数。

/**
 * notify的回调方法,该方法中需要赋值需要输出的参数
 * @param array $data
 * @return true回调出来完成不需要继续回调,false回调处理未完成需要继续回调
 */
    final public function NotifyCallBack($data) // $msg传进来
    {
        $msg = "OK";
        "//NotifyProcess就是我们要重写的函数"
        $result = $this->NotifyProcess($data, $msg); 

        if($result == true){
            $this->SetReturn_code("SUCCESS");
            $this->SetReturn_msg("OK");
        } else {
            $this->SetReturn_code("FAIL");
            $this->SetReturn_msg($msg);
        }
        return $result;
    }

在notify.php中重写,NotifyProcess函数。

class PayNotifyCallBack extends WxPayNotify
{
    //查询订单
    public function Queryorder($transaction_id)
    {
        $input = new WxPayOrderQuery();
        $input->SetTransaction_id($transaction_id);
        $result = WxPayApi::orderQuery($input);
        Log::DEBUG("query:" . json_encode($result));
        if(array_key_exists("return_code", $result)
            && array_key_exists("result_code", $result)
            && $result["return_code"] == "SUCCESS"
            && $result["result_code"] == "SUCCESS")
        {
            return true;
        }
        return false;
    }

    //重写回调处理函数
    public function NotifyProcess($data,&$msg)
    {
        //"$data" 是NotifyCallBack函数传进来的含有支付信息的参数
        $notfiyOutput = array();
        // 下面这句判断支付参数中是否含有微信订单号transaction_id
        if(!array_key_exists("transaction_id", $data)){ 
            $msg = "输入参数不正确";
            return false;
        }
        //查询订单,判断订单真实性,二重判断
        if(!$this->Queryorder($data["transaction_id"])){
            $msg = "订单查询失败";
            return false;
        }
        // "这里返回真,证明支付成功了"
        // "我们也可以直接在这里做支付成功后的操作"
        return true;
    }
}

处理订单支付结果的方式有几种?哪种更可靠呢?
两种,在回调链接中处理结果更可靠。