我正在尝试创建一个 Stripe 订阅时间表,每个时间表限制为 10 个。我使用chunk
将数组拆分为不同的部分。有一个名为createSchedule
的函数来创建计划。但是,当它完成时,尽管它创建了两个订阅,但它不包括我的所有数组项,只包括第一个。
注意:为简单起见,我截断了数组。在实际代码中,数组中有更多的>20 个项目。
function createSchedule ($customer, $phases) {
$schedule = StripeSubscriptionSchedule::create([
'customer' => $customer,
'expand' => ['subscription'],
'start_date' => 'now',
'end_behavior' => 'cancel',
'phases' => $phases,
]);
}
$dataset = array(
array(
"product" => $product->id,
"unit_amount" => "2020",
"end_date" => date_timestamp_get(date_create("2020-07-12")) // Payment 1 Date
),
array(
"product" => $product->id,
"unit_amount" => "2000",
"end_date" => date_timestamp_get(date_create("2020-07-15")) //Payment 2 Date
),
array(
"product" => $product->id,
"unit_amount" => "3400",
"end_date" => date_timestamp_get(date_create("2020-07-16")) //Payment 3 Date
),
array(
"product" => $product->id,
"unit_amount" => "3700",
"end_date" => date_timestamp_get(date_create("2020-07-18")) //Payment 4 Date
),
);
$schedule_batch = array_chunk($dataset, 9);
$numberofbatches = count($schedule_batch);
$phases = [];
foreach ($schedule_batch as $index => $data) {
$phases[] = [
'end_date' => $data[$index]["end_date"],
'transfer_data' => [
'amount_percent' => $fee_percentage,
'destination' => $account],
'proration_behavior' => 'none',
'plans' => [
[
'price_data' => [
'unit_amount' => $data[$index]["unit_amount"],
'currency' => 'usd',
'product' => $data[$index]["product"],
'recurring' => [
'interval' => 'month',
],
],
],
],
];
}
foreach ($schedule_batch as $index => $data) {
createSchedule($customer->id, $phases);
}
foreach 语句需要另一个级别来访问数组元素。此外,$phases = []
的数组初始化需要在两个 foreach 语句之间进行。
foreach ($schedule_batch as $index => $data) {
$phases = [];
foreach ($data as $index2 => $data2)
$phases[] = [
'end_date' => $data2["end_date"],
'transfer_data' => [
'amount_percent' => $fee_percentage,
'destination' => $account],
'proration_behavior' => 'none',
'plans' => [
[
'price_data' => [
'unit_amount' => $data2["unit_amount"],
'currency' => 'usd',
'product' => $data2["product"],
'recurring' => [
'interval' => 'month',
],
],
],
],
];
}