首页 > 解决方案 > Stripe 在 PHP 中创建多个阶段

问题描述

我正在尝试使用 Stripe 为一个非常具体的用例创建多个阶段。使用 Stripe Billings API 运行以下代码实际上不会创建多个阶段。它只创建一个阶段(最后一个阶段)。

$schedule = \Stripe\SubscriptionSchedule::create([
  'customer' => 'cus_HMDwmb8iAV0X7k',
  'start_date' => 'now',
  'end_behavior' => 'cancel',
    'phases' => [
      [
        'end_date' => 1592910720,
        'proration_behavior' => 'none',
        'plans' => [
          [
            'price_data' => [
              'unit_amount' => 5000,
              'currency' => 'usd',
              'product' => 'prod_HMrCxIwor5bbjO',
              'recurring' => [
                  'interval' => 'year',
              ],
            ],
          ],
        ],
      ],
    ],


    'phases' => [
      [
        'end_date' => 1594850400,
        'proration_behavior' => 'none',
        'plans' => [
          [
            'price_data' => [
              'unit_amount' => 6000,
              'currency' => 'usd',
              'product' => 'prod_HMrCxIwor5bbjO',
              'recurring' => [
                  'interval' => 'year',
              ],
            ],
          ],
        ],
      ],
    ],


]);

使用 Curl 的类似请求可以正常工作:

curl https://api.stripe.com/v1/subscription_schedules \
  -u sk_test_xxx: \
  -d customer=cus_HMDwmb8iAV0X7k \
  -d start_date=now \
  -d end_behavior=cancel \
  -d phases[0][plans][0][price_data][product]=prod_HMrCxIwor5bbjO \
  -d phases[0][plans][0][price_data][currency]=usd \
  -d phases[0][plans][0][price_data][unit_amount]=1000 \
  -d phases[0][plans][0][price_data][recurring][interval]=year \
  -d phases[0][end_date]=1592043010 \
  -d phases[0][proration_behavior]=none \
  -d phases[1][plans][0][price_data][product]=prod_HMrCxIwor5bbjO \
  -d phases[1][plans][0][price_data][currency]=usd \
  -d phases[1][plans][0][price_data][unit_amount]=15000 \
  -d phases[1][plans][0][price_data][recurring][interval]=year \
  -d phases[1][end_date]=1592910720 \
  -d phases[1][proration_behavior]=none \
  -d phases[2][plans][0][price_data][product]=prod_HMrCxIwor5bbjO \
  -d phases[2][plans][0][price_data][currency]=usd \
  -d phases[2][plans][0][price_data][unit_amount]=20000 \
  -d phases[2][plans][0][price_data][recurring][interval]=year \
  -d phases[2][end_date]=1594850400 \
  -d phases[2][proration_behavior]=none \
  -d phases[3][plans][0][price_data][product]=prod_HMrCxIwor5bbjO \
  -d phases[3][plans][0][price_data][currency]=usd \
  -d phases[3][plans][0][price_data][unit_amount]=35000 \
  -d phases[3][plans][0][price_data][recurring][interval]=year \
  -d phases[3][end_date]=1595851200 \
  -d phases[3][proration_behavior]=none \
  -d phases[4][plans][0][price_data][product]=prod_HMrCxIwor5bbjO \
  -d phases[4][plans][0][price_data][currency]=usd \
  -d phases[4][plans][0][price_data][unit_amount]=21000 \
  -d phases[4][plans][0][price_data][recurring][interval]=day \
  -d phases[4][end_date]=1597021320 \
  -d phases[4][proration_behavior]=none

我看到的唯一区别是在 Curl 请求中我明确传递了阶段号。

任何帮助表示赞赏。

标签: phpstripe-payments

解决方案


在您的 php 调用中,您指定了phases两次参数。因此,仅使用第二个phases定义来创建订阅计划。此处的修复是将所有阶段移动到单个数组和参数下,如下所示:

$schedule = \Stripe\SubscriptionSchedule::create([
  'customer' => $customer->id,
  'start_date' => 'now',
  'end_behavior' => 'cancel',
    'phases' => [
      [
        'end_date' => 1592910720,
        'proration_behavior' => 'none',
        'plans' => [
          [
            'price_data' => [
              'unit_amount' => 5000,
              'currency' => 'usd',
              'product' => $product->id,
              'recurring' => [
                  'interval' => 'year',
              ],
            ],
          ],
        ],
      ],
      [
        'end_date' => 1594850400,
        'proration_behavior' => 'none',
        'plans' => [
          [
            'price_data' => [
              'unit_amount' => 6000,
              'currency' => 'usd',
              'product' => $product->id,
              'recurring' => [
                  'interval' => 'year',
              ],
            ],
          ],
        ],
      ],
    ],
]);

我看到的唯一区别是在 Curl 请求中我明确传递了阶段号。

更多的是您在阶段数组中传递阶段索引。您必须在 cURL 中明确说明这一点,但在 php 中,您只需将每个元素添加到数组中并隐含索引即可。


推荐阅读