mirror of
http://124.126.16.154:8888/singularity/hdk-pay.git
synced 2026-01-15 02:15:07 +08:00
2.6 KiB
2.6 KiB
修复计划
问题分析
在 /Users/weili/Projects/HDK/Pay/src/Infrastructure/Repository/InvoiceRepo.php 第131-137行,创建 InvoiceProduct 实例时缺少 prices 参数,导致构造函数调用失败。
错误原因
InvoiceProduct类构造函数需要6个参数:caseId,uid,name,sku,description,prices- 当前代码只传递了5个参数,缺少
prices参数 prices参数是PointPrice[]类型的数组,不能为空
修复步骤
-
添加必要的导入
- 在
InvoiceRepo.php中添加Money和Currency类的导入 - 添加
PointPrice类的导入
- 在
-
处理API响应中的prices数据
- 从API响应中提取
prices数据(路径:$result['product']['prices']) - 遍历
prices数据,为每个价格创建PointPrice实例 - 使用
array_map函数简化处理过程
- 从API响应中提取
-
完善InvoiceProduct实例创建
- 将处理好的
prices数组传递给InvoiceProduct构造函数
- 将处理好的
预期结果
- 修复后,
InvoiceRepo::getInvoiceInfo()方法能够成功创建InvoiceProduct实例 - 不再出现构造函数参数缺失的错误
- 代码能够正常运行,返回完整的
InvoiceInfo对象
修复代码示例
// 1. 在InvoiceRepo.php顶部添加必要的导入
use Money\Currency;
use Money\Money;
use Singularity\HDK\Pay\Domain\Invoice\Aggregate\Invoice\ValueObject\PointPrice;
// 2. 在getInvoiceInfo()方法中完善InvoiceProduct实例创建
product: new InvoiceProduct(
caseId: $result['case_id'],
uid: $result['uid'],
name: $result['product']['name'],
sku: $result['product']['sku'],
description: $result['product']['description'],
prices: array_map(
callback: fn(array $price) => new PointPrice(
price: new Money(
amount: bcmul((string)$price['amount'], '100', 2),
currency: new Currency($price['currency']),
),
currencySymbol: $price['symbol'],
),
array: $result['product']['prices'],
),
),
检查结果
- 已检查所有使用
InvoiceProduct的地方,只有InvoiceRepo.php中存在参数缺失问题 InvoiceProductRepo.php中的实现是正确的,可以作为参考- 修复后,所有
InvoiceProduct实例创建都会符合构造函数要求
测试建议
- 修复后,运行相关测试用例验证修复效果
- 可以使用
./run-in-docker.sh APP_STATUS=false vendor/bin/pest --coroutine --prepend=tests/bootstrap.php运行测试 - 检查是否还有其他类似的构造函数参数问题