PHP Stripe 订阅唯一用户标识符

问题描述 投票:0回答:1

我构建的工具可能需要每个用户进行多个订阅,订阅可以是相同的服务但具有不同的配置。 我为每个用户订阅创建单独的订阅项目,因为我希望每个项目在结账时的描述中都有配置详细信息。 问题是我希望能够识别每个单独的订阅,以便我知道将来要编辑/取消哪一个。 我尝试过在商品、产品和价格属性上使用元数据(其中 api 仅在产品下接受它),并且 API 不接受订单项中任何位置的lookup_key。 元数据虽然被 API 接受,但实际上从未显示在条带或付款确认 Webhook 中(元数据仅显示为空的行项目)

$lineItems;
foreach ($cartItems as $job){
    SubscriptionJobs::createJobForPayment($job,$userId,$cartId,$transactionId);
    $jobId = $job->item_id;

    $item = [
        'price_data' => [
            'currency'      =>'usd',
            'unit_amount'   => $unitAmount,
            'product_data'  => [
                'description'   => $description, 
                'name'          => $subName,
                'metadata'    => ['job_id'=>$jobId],
                
            ],
            'recurring' => [
                'interval' => Carts::getPaymentFrequency($cartId),
            ],
        ],
        'quantity' => '1',
    ];
    $lineItems[] = $item;
};

$checkoutData = [
    'line_items'          => [$lineItems],
    'client_reference_id' => $cartId,
    'subscription_data'   => ['metadata' => [
        'cart_id'       => $cartId,
        'user_id'       => $userId,
        'transaction_id'=> $transactionId]],
    'mode'                => 'subscription',
    'success_url'         => $DOMAIN . '/success',
    'cancel_url'          => $DOMAIN . '/cancel',
];
if($userData->stripe_id != ''){
    $checkoutData['customer'] = $userData->stripe_id;
}else{
    $checkoutData['customer_email'] = $userEmail;
}

$checkout_session = \Stripe\Checkout\Session::create($checkoutData);
dd($checkout_session);

return redirect($checkout_session->url);

我已经尝试在我能想到的任何地方使用元数据和lookup_key,但它们似乎从未延续到行项目上的条纹。 在结帐时创建订阅时是否可以识别哪个订阅?

谢谢

php stripe-payments
1个回答
0
投票

结帐会话创建调用似乎不直接支持订阅项目元数据。

您可能可以做的是,首先将元数据(如

{'price_id_1' => 'some_value'}
)存储在
subscription_data.metadata
字段上,然后在结账会话付款后(当您收到
checkout.session.completed
webhook 事件时),调用更新订阅 API 并设置 此处订阅项目级别的元数据,使用订阅映射上的元数据以及每个项目的价格 ID。

挑战在于如何在订阅对象中的

some_value
上表达您的配置详细信息。 json 编码的字符串可以用作纯字符串值。

© www.soinside.com 2019 - 2024. All rights reserved.