/** * * 查询订单情况 * @param string $out_trade_no 商户订单号 * @param int $succ_code 查询订单结果 * @return 0 状态不确定,1表示订单成功,2表示交易失败,3表示继续等待 */ public function query($out_trade_no, &$succ_code) { $input = new OrderQuery(); $input->setOutTradeNo($out_trade_no); $result = $this->api->orderQuery($input); $succ_code = 0; if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') { switch ($result['trade_state']) { case 'SUCCESS': // 支付成功 // 订单成功 $succ_code = 1; break; case 'REFUND': // 转入退款 // 转入退款 case 'CLOSED': // 已关闭 // 已关闭 case 'REVOKED': // 已撤销(刷卡支付) // 已撤销(刷卡支付) case 'PAYERROR': // 支付失败(其他原因,如银行返回失败) // 支付失败 $succ_code = 2; break; case 'USERPAYING': // 用户支付中 // 用户支付中 case 'NOTPAY': // 未支付 // 继续等待 $succ_code = 3; return false; } return $result; } // 执行到这里,就是网络或系统错误 return false; }
/** * * 查询订单,OrderQuery中out_trade_no、transaction_id至少填一个 * appid、mchid、spbill_create_ip、nonce_str不需要填入 * @param OrderQuery $input * @param int $time_out * @throws WxPayException * @return 成功时返回,其他抛异常 */ public function orderQuery($input, $time_out = 6) { $url = 'https://api.mch.weixin.qq.com/pay/orderquery'; //检测必填参数 if (!$input->isOutTradeNoSet() && !$input->isTransactionIdSet()) { throw new WxPayException('订单查询接口中,out_trade_no、transaction_id至少填一个!'); } $input->setAppid(Wxpay::getConfig('appid')); //公众账号ID $input->setMchId(Wxpay::getConfig('mchid')); //商户号 $input->setSubMchId(Wxpay::getConfig('sub_mch_id')); //子商户号 $input->setNonceStr($this->getNonceStr()); //随机字符串 $input->setSign(); //签名 $xml = $input->toXml(); $start_time_stamp = $this->getMillisecond(); //请求开始时间 $response = $this->postXmlCurl($xml, $url, false, $time_out); $result = Results::Init($response); $this->reportCostTime($url, $start_time_stamp, $result); //上报请求花费时间 return $result; }