BusDK Update

Stripe ja billing catalog pysyvät operaattorin pinnassa

bus operator billing hallitsee provider-neutralia billing catalogia, ja bus operator stripe hoitaa Stripe-kohtaiset diagnostiikka- ja catalog sync -tehtävät.

bus-integration-stripe jää maksupalvelun protokollakerrokseksi: se luo checkout- ja portal-sessionit, varmistaa webhookit, mapittaa subscription-päivitykset ja lähettää meter-eventit.

28.4.2026bus-operator-billingbus-operator-stripebus-integration-stripe

Tiiviisti

TL;DR

  • bus operator billing catalog template tulostaa provider-neutralin catalog-pohjan tuotteille, planeille, hinnoille ja mittareille.
  • catalog get ja catalog put käyttävät Billing API:n internal-audience endpointtejä.
  • bus operator stripe test tarkistaa Stripe test-mode -tunnukset tulostamatta API-avainta tai saldoja.
  • bus operator stripe catalog sync luo Stripe Products ja Prices -objektit local catalog JSONista idempotency key -avaimilla.
  • bus-integration-stripe verifioi webhookin raw bodyllä ja lähettää Busille provider-neutralin bus.billing.subscription.update -eventin.

Operatorin billing-komento ei ole loppukäyttäjän setup-virta. Se käyttää internal-audience Bearer-tokenia ja lukee tai kirjoittaa provider-neutralin catalogin Billing API:n sisäiseen pintaan:

$ bus operator billing catalog template
{
  "products": [
    {
      "id": "llm",
      "name": "LLM API",
      "description": "OpenAI-compatible model API access"
    }
  ],
  "meters": [
    {
      "id": "llm_tokens",
      "event_name": "llm.tokens",
      "unit": "token"
    }
  ],
  "plans": [
    {
      "id": "llm_basic",
      "product_id": "llm",
      "features": [
        "llm:proxy"
      ]
    }
  ],
  "provider_mappings": []
}

Sama operator-pinta voi julkaista catalogin palvelulle ja lukea sen takaisin catalog put --file- ja catalog get -komennoilla. Molemmat käyttävät internal-audience tokenia ja samaa /api/internal/billing/catalog -pintaa.

Stripe-komennot ovat erillisessä operator-perheessä, jotta provider-neutral billing ei ala puhua Stripe-objekteja käyttäjälle. bus operator stripe test tarkistaa test-mode-tunnukset harmless balance read -kutsulla ja tulostaa vain turvallista metadataa, kuten livemode-arvon. bus operator stripe catalog sync lukee Stripe-kohtaisen catalog JSONin ja luo Products- sekä Prices-objektit idempotency key -avaimilla, jotka perustuvat lookup key -arvoihin.

Runtime-puolella bus-integration-stripe kuuntelee provider-tapahtumia:

bus.stripe.checkout_session.create.request  -> bus.stripe.checkout_session.create.response
bus.stripe.portal_session.create.request    -> bus.stripe.portal_session.create.response
bus.stripe.webhook.verify.request           -> bus.stripe.webhook.verify.response
bus.stripe.meter_event.record.request       -> bus.stripe.meter_event.record.response

Self-test vahvistaa, että webhook-polku voidaan ajaa deterministisesti ilman Stripe-verkkokutsua:

$ bus-integration-stripe --self-test
bus-integration-stripe self-test OK

Tuotannossa webhook-varmistus käyttää raw request bodyä, Stripe-Signature-headeria ja webhook secret -arvoa. Kun tuettu webhook, kuten checkout.session.completed tai customer.subscription.updated, sisältää Bus-metadatan, Stripe-integraatio julkaisee provider-neutralin bus.billing.subscription.update -eventin. Billing-worker päättää sen perusteella, onko llm:proxy tai muu paid feature käytössä.

Meter-event-polku käyttää samaa rajaa. Billing-worker pyytää Stripe-integraatiolta bus.stripe.meter_event.record.request -eventillä mittarin, määrän ja idempotency keyn. Stripe-integraatio käyttää samaa avainta providerin requestissa, jotta retry ei tee kahta laskutettavaa meter-eventtiä.

Operator-komennot on kuvattu bus-operator-billing- ja bus-operator-stripe-dokumentaatiossa. Stripe-workerin event-sopimus löytyy bus-integration-stripe-dokumentaatiosta, ja provider-neutral billing-päätökset ovat bus-integration-billingin vastuulla.