1、文件:crmeb/services/wechat/Payment.php
直接复制方法,替换原来的:queryOrder方法
public static function queryOrder(string $outTradeNo, int $storeId = 0)
{
$instance = self::instance()->setStoreId($storeId);
if ($instance->isV3PAy) {
$response = $instance->payClient()->queryOrderByOutTradeNo($outTradeNo);
self::logger('查询订单支付状态', compact('outTradeNo', 'storeId'), $response);
return [
'paid' => (($response['trade_state'] ?? '') === 'SUCCESS') ? 1 : 0,
'out_trade_no' => $outTradeNo,
'payInfo' => $response
];
}
$response = $instance->order()->queryByOutTradeNumber($outTradeNo);
$response = $response->toArray();
self::logger('查询订单支付状态', compact('outTradeNo', 'storeId'), $response);
if ($response['return_code'] === 'SUCCESS') {
if ($response['result_code'] === 'SUCCESS' && $response['trade_state'] === 'SUCCESS') {
return [
'paid' => 1,
'out_trade_no' => $outTradeNo,
'payInfo' => $response
];
} else {
return [
'paid' => 0,
'out_trade_no' => $outTradeNo,
'payInfo' => $response
];
}
} else {
throw new PayException($response['return_msg']);
}
}2、文件:crmeb/services/wechat/v3pay/PayClient.php
增加如下两行代码:
//订单查询
const API_QUERY_OUT_TRADE_NO_URL = 'v3/pay/transactions/out-trade-no/{out_trade_no}';
//订单查询-服务商模式
const API_QUERY_OUT_TRADE_NO_PARTNER_URL = 'v3/pay/partner/transactions/out-trade-no/{out_trade_no}';

在本文件中,在增加如下方法:
/**
* 通过商户订单号查询订单
* @param string $outTradeNo
* @return mixed
* @throws InvalidArgumentException
*/
public function queryOrderByOutTradeNo(string $outTradeNo)
{
if ($this->serviceConfig->isServicePay) {
$subMchid = $this->subMchid ?? $this->serviceConfig->subMchid;
if (empty($subMchid)) {
throw new PayException('服务商模式下查询订单子商户号(sub_mchid)不能为空');
}
$url = $this->getApiUrl(self::API_QUERY_OUT_TRADE_NO_PARTNER_URL, ['out_trade_no'], [rawurlencode($outTradeNo)]);
$url .= '?' . http_build_query([
'sp_mchid' => $this->serviceConfig->mchId,
'sub_mchid' => $subMchid,
]);
} else {
$url = $this->getApiUrl(self::API_QUERY_OUT_TRADE_NO_URL, ['out_trade_no'], [rawurlencode($outTradeNo)]);
$url .= '?' . http_build_query([
'mchid' => $this->config->mchId,
]);
}
$res = $this->request($url, 'GET', []);
if (!$res) {
throw new PayException('微信支付:查询订单失败');
}
if (isset($res['code'], $res['message'])) {
throw new PayException($res['message']);
}
return $res;
}3、文件:app/controller/cashier/Common.php
按下图修改,下图是修改后代码截图:

4、文件:app/jobs/user/MicroPayOrderJob.php

5、重启swoole,然后在收银台重新扫码支付测试

