确保已下订单
在处理支付结果回调之后,建议再进行一次订单查询,以确保万无一失,除此之外,设置一个订单恢复系统也是可以的,例如下面的例子。
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"){
//支付失败(其他原因,例如银行返回失败)
}
}
}