GoCardless Pro PHP客户端Payouts端点日期筛选失效求助
问题分析与解决方案
核心问题点
- 无效日期导致参数异常:你代码中使用了
2023-06-31,6月仅有30天,这个无效日期会让DateTime类自动修正为7月1日,直接打乱了筛选范围。 - 参数格式不符合GoCardless PHP客户端要求:尝试的两种参数写法都没遵循客户端的参数转换规则,导致API无法正确识别日期筛选条件。
修正后的代码
// 修正无效日期,6月最后一天为30日 $startDate = (new DateTime('2023-03-31 22:00:00'))->format('Y-m-d\TH:i:s.u\Z'); $endDate = (new DateTime('2023-06-30 22:00:00'))->format('Y-m-d\TH:i:s.u\Z'); $params = [ 'created_at' => [ 'between' => [$startDate, $endDate] ], 'limit' => 500, 'status' => 'paid' ]; $payouts = $client->payouts()->list($params)->records;
关键修正说明
- 修复无效日期:将
2023-06-31改为2023-06-30,确保DateTime生成正确的目标日期。 - 使用嵌套数组参数:GoCardless Pro PHP客户端会自动将嵌套数组转换为API要求的URL参数格式(即
created_at=between&created_at_gte=xxx&created_at_lte=xxx),和你在管理后台看到的有效参数格式一致。 - 保持日期格式正确性:继续使用
Y-m-d\TH:i:s.u\Z格式生成符合ISO 8601标准的带时区标识的日期字符串,确保API能正确解析。
备选参数写法(若嵌套数组不生效)
如果上述嵌套数组写法有问题,也可以直接使用和后台一致的扁平参数名(注意不要加多余下划线):
$params = [ 'created_at' => 'between', 'created_at[gte]' => '2023-03-31T22:00:00.000Z', 'created_at[lte]' => '2023-06-30T22:00:00.000Z', 'limit' => 500, 'status' => 'paid' ];
内容的提问来源于stack exchange,提问作者user3190147
相关产品推荐
相关产品推荐

