我构建的工具可能需要每个用户进行多个订阅,订阅可以是相同的服务但具有不同的配置。 我为每个用户订阅创建单独的订阅项目,因为我希望每个项目在结账时的描述中都有配置详细信息。 问题是我希望能够识别每个单独的订阅,以便我知道将来要编辑/取消哪一个。 我尝试过在商品、产品和价格属性上使用元数据(其中 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,但它们似乎从未延续到行项目上的条纹。 在结帐时创建订阅时是否可以识别哪个订阅?
谢谢
结帐会话创建调用似乎不直接支持订阅项目元数据。
您可能可以做的是,首先将元数据(如
{'price_id_1' => 'some_value'}
)存储在 subscription_data.metadata
字段上,然后在结账会话付款后(当您收到 checkout.session.completed
webhook 事件时),调用更新订阅 API 并设置 此处订阅项目级别的元数据,使用订阅映射上的元数据以及每个项目的价格 ID。
挑战在于如何在订阅对象中的
some_value
上表达您的配置详细信息。 json 编码的字符串可以用作纯字符串值。