重写回调函数自定义处理
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;
}
}
处理订单支付结果的方式有几种?哪种更可靠呢?
两种,在回调链接中处理结果更可靠。