php - 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 请求中我明确传递了阶段号。
任何帮助表示赞赏。
解决方案
在您的 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 中,您只需将每个元素添加到数组中并隐含索引即可。
推荐阅读
- regex - 如何根据匹配移动到 Excel 工作表的不同单元格?
- graphql - GraphQL 搜索 OR 运算符
- json - 将 json 文件创建目标从 Dropbox 更改为 Google Drive
- c++ - 如何扩大“空闲内存”
- spring - 如何使用 java config 创建内部 bean?
- asp.net-core - ASP.NET Core ILoggerFactory 是否为每个注册的 LoggerProvider 初始化一个实例?
- php - 当表列具有具有相同键和不同值的对象数组laravel php时,如何使用wherejsoncontains
- java - 如何将页面对象转换为 DTO?
- python - Python socket.io 客户端事件
- azure - Azure Web App 文件下载 - 特殊字符问题