Я настраиваю Stripe для платежей в своем проекте, и у меня возникли некоторые проблемы с управлением клиентами.
Я пытаюсь создать нового клиента и сохранить идентификатор клиента Stripe. в моей базе данных, когда пользователь создает сеанс оформления заказа. Проблема в том, что после того, как пользователь совершает платеж, создается еще один клиент.
@app.post('/create-checkout-session')
async def create_checkout_session(request: Request):
data = await request.json()
price_id = data['price_id']
user_id = data['user_id']
base_url = data['base_url']
stripe_customer_id = data.get('stripe_customer_id')
try:
if stripe_customer_id is not None:
stripe_customer = stripe.Customer.retrieve(stripe_customer_id)
if stripe_customer:
print('stripe_customer', stripe_customer)
return
else:
print('request', request)
stripe_customer = stripe.Customer.create(metadata={"user_id": user_id})
customer_id = stripe_customer.id
await update_user_with_stripe_customer_id(user_id, customer_id)
checkout_session = stripe.checkout.Session.create(
customer=stripe_customer_id,
line_items=[
{
'price': price_id,
'quantity': 1,
},
],
mode='subscription',
success_url=base_url + '/payment-success',
cancel_url=base_url + '?canceled=true',
client_reference_id=user_id,
)
logger.info(f"Checkout session created successfully: {checkout_session.id}")
return JSONResponse(content={"url": checkout_session.url}, status_code=200)
except stripe.error.StripeError as e:
logger.error(f"Stripe error: {str(e)}")
raise HTTPException(status_code=400, detail=str(e))
except Exception as e:
logger.error(f"Error creating checkout session: {str(e)}")
raise HTTPException(status_code=500, detail=str(e))
async def update_user_with_stripe_customer_id(user_id: str, stripe_customer_id: str):
db = firestore.client()
user_ref = db.collection('customers').where(filter=FieldFilter("user_id", "==", user_id))
user_docs = user_ref.get()
if user_docs:
user_doc = user_docs[0]
user_doc.reference.update({
'stripe_customer_id': stripe_customer_id
})
print(f"Updated user {user_id} with Stripe customer ID {stripe_customer_id}")
else:
logger.error(f"User {user_id} not found in database")
raise HTTPException(status_code=404, detail="User not found")
После завершения сеанса оформления заказа и успешной оплаты я хочу обновить свою базу данных, чтобы предоставить пользователю выделенные кредиты. Однако я получаю сообщение об ошибке 404: пользователь не найден.
Я пробовал разные реализации для создания клиента. В конечном итоге мне нужно обновить свою базу данных, указав идентификатор клиента, однако моя проблема в том, что, поскольку создается несколько пользователей, существует несколько идентификаторов клиентов.
Я настраиваю Stripe для платежей в своем проекте, и у меня возникли некоторые проблемы с управлением клиентами. Я пытаюсь создать нового клиента и сохранить идентификатор клиента Stripe. в моей базе данных, когда пользователь создает сеанс оформления заказа. Проблема в том, что после того, как пользователь совершает платеж, создается еще один клиент. [code]@app.post('/create-checkout-session') async def create_checkout_session(request: Request):
if user_docs: user_doc = user_docs[0] user_doc.reference.update({ 'stripe_customer_id': stripe_customer_id }) print(f"Updated user {user_id} with Stripe customer ID {stripe_customer_id}") else: logger.error(f"User {user_id} not found in database") raise HTTPException(status_code=404, detail="User not found") [/code] После завершения сеанса оформления заказа и успешной оплаты я хочу обновить свою базу данных, чтобы предоставить пользователю выделенные кредиты. Однако я получаю сообщение об ошибке 404: пользователь не найден. [code]@app.post('/webhook') async def webhook_received(request: Request): print("Webhook received!") payload = await request.body() sig_header = request.headers.get('stripe-signature') logger.info(f"Stripe signature: {sig_header}")
if credits: db = firestore.client() user_ref = db.collection('customers').where(filter=FieldFilter("stripe_customer_id", "==", stripe_customer_id)) user_docs = user_ref.get()
if user_docs: user_doc = user_docs[0] user_doc.reference.update({ 'credits': credits, 'current_subscription_tier': tier, 'stripe_customer_id': stripe_customer_id }) updated_user_doc = user_doc.reference.get() updated_user_data = updated_user_doc.to_dict() return JSONResponse(content={"updated_user": updated_user_data}, status_code=200) else: print(f"User document not found for user_id: {stripe_customer_id}") raise HTTPException(status_code=404, detail="User not found") else: print(f"credits: {credits} not found") [/code] Я пробовал разные реализации для создания клиента. В конечном итоге мне нужно обновить свою базу данных, указав идентификатор клиента, однако моя проблема в том, что, поскольку создается несколько пользователей, существует несколько идентификаторов клиентов.
Я использую редактор полей оформления заказа Woocommerce от Theme High и хочу иметь пользовательский выбор, который будет заполняться опциями на основе товаров, находящихся в корзине оформления заказа. Например, если у меня в корзине есть яблоко и...
У меня есть магазин WooCommerce, в котором используется блок оформления заказа. Я хочу с помощью Google Analytics отслеживать, какие поля оформления заказа WooCommerce пусты или заполнены неправильно. Проверка должна происходить после того, как...
Мой стек: Laravel и Stripephp
Сценарий: имеется открытый счет, который уже создан для подписки. Идентификатор счета-фактуры Stripe (in_1PVBjnSE4D7cjIupbEfXsQ4w).
Я хочу добиться следующего
шага 1 – создать URL-адрес для оплаты клиентом созданного...
Я работаю над разработкой и тестированием интеграции Stripe, написанной на PHP, и она прекрасно работает. Я могу создавать сеансы, перенаправляться на форму оформления заказа, и когда платежи завершаются, он отправляет событие в мой скрипт...