fix: stripe portal dead-end with callback return flow

This commit is contained in:
2026-05-08 13:39:56 +05:45
committed by hodlbod
parent 0151762362
commit 164fff8be2
5 changed files with 23 additions and 8 deletions
+8 -2
View File
@@ -3,7 +3,7 @@ use std::sync::Arc;
use anyhow::{Result, anyhow};
use axum::{
Json, Router,
extract::{Path, State},
extract::{Path, Query as QueryParams, State},
http::{HeaderMap, StatusCode},
response::{IntoResponse, Response},
routing::{get, post},
@@ -1101,10 +1101,16 @@ async fn get_invoice_bolt11(
}
}
#[derive(serde::Deserialize)]
struct StripeSessionParams {
return_url: Option<String>,
}
async fn create_stripe_session(
State(state): State<AppState>,
headers: HeaderMap,
Path(pubkey): Path<String>,
QueryParams(params): QueryParams<StripeSessionParams>,
) -> std::result::Result<Response, ApiError> {
let auth = state.api.extract_auth_pubkey(&headers)?;
state.api.require_admin_or_tenant(&auth, &pubkey)?;
@@ -1113,7 +1119,7 @@ async fn create_stripe_session(
match state
.api
.billing
.stripe_create_portal_session(&tenant.stripe_customer_id)
.stripe_create_portal_session(&tenant.stripe_customer_id, params.return_url.as_deref())
.await
{
Ok(url) => Ok(ok(StatusCode::OK, serde_json::json!({ "url": url }))),
+10 -2
View File
@@ -966,12 +966,20 @@ impl Billing {
Ok(())
}
pub async fn stripe_create_portal_session(&self, customer_id: &str) -> Result<String> {
pub async fn stripe_create_portal_session(
&self,
customer_id: &str,
return_url: Option<&str>,
) -> Result<String> {
let mut params = vec![("customer", customer_id.to_string())];
if let Some(url) = return_url {
params.push(("return_url", url.to_string()));
}
let resp = self
.http
.post(format!("{STRIPE_API}/billing_portal/sessions"))
.bearer_auth(&self.stripe_secret_key)
.form(&[("customer", customer_id)])
.form(&params)
.send()
.await?;