getRefundPaymentMethods返回类型异常及需返回双值的技术问题
问题解决方案
1. 修复返回值类型错误
报错的核心原因是case PxConfig::GATEWAY分支的返回语句逻辑错误:
return $refundMethods[] = $originalPaymentMethod;
这行代码先执行数组追加操作,然后返回被追加的字符串值(而非数组),违反了函数声明的array返回类型约束。
修改为:
case PxConfig::GATEWAY: $refundMethods[] = $originalPaymentMethod; return $refundMethods;
2. 实现同时返回两个值的需求
PHP函数无法直接返回多个独立值,可通过返回关联数组包裹两个结果:
修改后的完整函数
private function getRefundPaymentMethods(array $invoices, bool $hasUpgrade): array { $refundMethods = [self::CREDITS]; $originalPaymentMethod = ''; // 初始化变量,避免未定义 if ($hasUpgrade) { return [ 'refund_methods' => $refundMethods, 'original_payment_method' => $originalPaymentMethod ]; } $transaction = $this->wsTransRepository->getPaymentTransactionByInvoice($invoices[0]['invoiceId']); $originalPaymentMethod = $transaction->gateway; $dateTransaction = strtotime($transaction->date); $now = time(); $timeDiff = $now - $dateTransaction; $diffDays = round($timeDiff / (60 * 60 * 24)); switch ($originalPaymentMethod) { case strstr($originalPaymentMethod, self::BRP_CREDIT) && $diffDays <= 330: $refundMethods[] = self::BRP_CREDIT_1X; break; case self::DIL && $diffDays <= 90: case self::PLP: case PlpConfig::GATEWAY: if ($diffDays <= 180) { $refundMethods[] = $originalPaymentMethod; } break; case PxConfig::GATEWAY: $refundMethods[] = $originalPaymentMethod; break; } // 统一返回包含两个结果的关联数组 return [ 'refund_methods' => $refundMethods, 'original_payment_method' => $originalPaymentMethod ]; }
调用示例
$result = $this->getRefundPaymentMethods($invoices, $hasUpgrade); $refundMethods = $result['refund_methods']; // 获取退款方式数组 $originalPaymentMethod = $result['original_payment_method']; // 获取原支付方式
注意事项
str_split是用于拆分字符串为单个字符数组的函数,完全不适用当前场景,请勿使用。- 确保所有分支返回结构一致的关联数组,避免调用时出现键不存在的错误。
内容的提问来源于stack exchange,提问作者user15403926
相关产品推荐
相关产品推荐

