我在使用微信退款查单接口时,一执行到: $resp = $instance->v3->refund->domestic->refunds->outRefundNo($out_refund_no) ->getAsync() ->wait();
上面这句就没反应,也不报错。查了一些资料,说是超时,我把超时设定为5秒10秒30秒测试也一样,还是什么反应都没有。
在这句之前,微信支付客户端初始化是成功的,微信支付实例构建也是成功的。从数据库查询出来未支付成功的退款单号$out_refund_no
后,执行就失败。请问哪位大仙知道原因

https://wechatpay.im/openapi/v3/pay/transactions/out-trade-no/%7Bout_trade_no%7D
问题的关键是,卡住后不提示任何报错信息,不知道从何处下手查错。请指教。
$queryParams = [];// 如果是服务商模式,取消下面这行的注释并设置正确的子商户号// $queryParams = ['query' => ['sub_mchid' => '您的子商户号']];// 设置超时时间为30秒$resp = $instance->v3->refund->domestic->refunds->outRefundNo($out_refund_no)->get($queryParams);<?php // refund_query.php define('IN_TG', true); require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__.'/includes/common.inc.php'; date_default_timezone_set('Asia/Shanghai'); use WeChatPay\Builder; use WeChatPay\Util\PemUtil; use WeChatPay\Formatter; use WeChatPay\Crypto\AesGcm; use GuzzleHttp\Exception\RequestException; $logFile = __DIR__ . '/app.log';//创建日志文件 // 记录日志的函数 function writeLog($message, $level = 'INFO') { global $logFile; $timestamp = date('Y-m-d H:i:s'); $logMessage = "[$timestamp] [$level] $message" . PHP_EOL; file_put_contents($logFile, $logMessage, FILE_APPEND | LOCK_EX); }; // 设置脚本执行时间无限制 set_time_limit(0);//查错 writeLog("应用程序启动");//查错 // 配置参数(与回调程序保持一致) $config = [ 'mchid' => '1712204237', 'secret' => 'e6c87239f6b27f57a53bfea7017769a1', 'merchant_cert_path' => 'file:///www/wwwroot/chtuan/wechat/cert/apiclient_cert.pem', 'merchant_key_path' => 'file:///www/wwwroot/chtuan/wechat/cert/apiclient_key.pem', 'platform_cert_path' => 'file:///www/wwwroot/chtuan/wechat/cert/wechatpay_52614F2D3487ED2ED89C39738FC214E8771AE633.pem', ]; try { // 1. 获取需要查询的退款订单(RF_status != 2 的订单) writeLog("开始查询需要处理的退款订单"); //查错 $query = _query("SELECT RF_orderCode, RF_paySubOrder FROM xxdj_refund WHERE RF_status != 2"); if (!$query) {//查错 writeLog("数据库查询失败: " . mysql_error(), "ERROR"); exit; } $refund_orders = []; while ($row = _fetch_array($query)) { $refund_orders[] = $row; } writeLog("找到 " . count($refund_orders) . " 个需要处理的退款订单");//查错 // 初始化微信支付客户端 writeLog("开始初始化微信支付客户端");//查错 writeLog("检查证书文件路径: " . $config['merchant_key_path']); $key_path = str_replace('file://', '', $config['merchant_key_path']); if (!file_exists($key_path)) { writeLog("私钥文件不存在: " . $key_path, "ERROR"); exit; } writeLog("私钥文件存在"); writeLog("检查证书文件路径: " . $config['merchant_cert_path']); $cert_path = str_replace('file://', '', $config['merchant_cert_path']); if (!file_exists($cert_path)) { writeLog("证书文件不存在: " . $cert_path, "ERROR"); exit; } writeLog("商户证书文件存在"); writeLog("检查平台证书文件路径: " . $config['platform_cert_path']); $platform_cert_path = str_replace('file://', '', $config['platform_cert_path']); if (!file_exists($platform_cert_path)) { writeLog("平台证书文件不存在: " . $platform_cert_path, "ERROR"); exit; } writeLog("平台证书文件存在"); // 尝试加载私钥 writeLog("尝试加载私钥"); try{ $merchantPrivateKey = PemUtil::loadPrivateKey($config['merchant_key_path']); if (!$merchantPrivateKey) {//查错 writeLog("加载商户私钥失败", "ERROR"); exit; } writeLog("加载商户私钥成功"); } catch (Exception $e) { writeLog("加载私钥异常: " . $e->getMessage(), "ERROR"); exit; } // 尝试加载商户证书 writeLog("尝试加载商户证书"); try { $merchantCertificate = PemUtil::loadCertificate($config['merchant_cert_path']); if (!$merchantCertificate) {//查错 writeLog("加载商户证书失败", "ERROR"); exit; } writeLog("加载商户证书成功"); // 获取商户证书序列号 $merchantCertInfo = openssl_x509_parse($merchantCertificate); $merchantSerialNo = $merchantCertInfo['serialNumberHex'] ?? ''; writeLog("商户证书序列号: " . $merchantSerialNo); if (empty($merchantSerialNo)) {//查错 writeLog("获取商户证书序列号失败", "ERROR"); exit; } } catch (Exception $e) { writeLog("加载商户证书异常: " . $e->getMessage(), "ERROR"); exit; } // 尝试加载平台证书 writeLog("尝试加载平台证书"); try { $platformCertificate = PemUtil::loadCertificate($config['platform_cert_path']); if (!$platformCertificate) { writeLog("加载平台证书失败", "ERROR"); exit; } writeLog("平台证书加载成功"); // 获取平台证书序列号 $platformCertInfo = openssl_x509_parse($platformCertificate); $platformSerialNo = $platformCertInfo['serialNumberHex'] ?? ''; writeLog("平台证书序列号: " . $platformSerialNo); if (empty($platformSerialNo)) { writeLog("获取平台证书序列号失败", "ERROR"); exit; } } catch (Exception $e) { writeLog("加载平台证书异常: " . $e->getMessage(), "ERROR"); exit; } // 构建证书数组,以序列号为键 $certs = [ $platformSerialNo => $platformCertificate, ]; writeLog("构建微信支付实例"); try { $instance = Builder::factory([ 'mchid' => $config['mchid'], 'serial' => $merchantSerialNo, 'privateKey' => $merchantPrivateKey, 'certs' => $certs, ]); writeLog("微信支付实例构建成功"); } catch (Exception $e) { writeLog("构建微信支付实例异常: " . $e->getMessage(), "ERROR"); writeLog("异常追踪: " . $e->getTraceAsString(), "ERROR"); exit; } writeLog("微信支付客户端初始化成功");//查错 // 2. 遍历每个订单,查询微信端状态 foreach ($refund_orders as $order) { $out_refund_no = $order['RF_orderCode']; writeLog("处理退款单号: " . $out_refund_no);//查错 try { // 调用微信支付查询退款接口 writeLog("调用微信退款查询接口: " . $out_refund_no);//查 // 记录调用开始时间 $startTime = microtime(true); // 先尝试一个简单的API调用,验证连接是否正常 try{ // 使用SDK调用退款查询接口 writeLog("使用SDK调用退款查询API"); // 设置超时时间为30秒 $resp = $instance->v3->refund->domestic->refunds->outRefundNo($out_refund_no) ->getAsync() ->wait(); // 记录调用结束时间 $endTime = microtime(true); $duration = round($endTime - $startTime, 3); writeLog("微信退款查询接口调用完成,耗时: " . $duration . "秒"); // 检查响应状态 writeLog("响应状态码: " . $resp->getStatusCode()); $result = json_decode($resp->getBody(), true); writeLog("微信退款查询返回: " . json_encode($result, JSON_UNESCAPED_UNICODE)); } catch (Exception $e) { // 记录调用结束时间(即使失败) $endTime = microtime(true); $duration = round($endTime - $startTime, 3); writeLog("SDK调用失败,耗时: " . $duration . "秒,错误信息: " . $e->getMessage(), "ERROR"); } // 检查是否有返回结果 if (!isset($result)) { writeLog("未获取到有效的查询结果", "ERROR"); continue; } } catch (Exception $e) { writeLog("处理退款单异常: " . $e->getMessage() . ", 订单号: " . $out_refund_no, "ERROR"); continue; // 继续处理下一个订单 } } writeLog("所有退款订单处理完成"); } catch (Exception $e) { writeLog("程序执行异常: " . $e->getMessage(), "ERROR"); } ?>