Delphi Stripe クライアントを生成

Stripe は公開インターネット上で最も完全な OpenAPI 仕様の 1 つを公開しています — 決済、請求、身元、ターミナル、Connect をカバーする 500 を超えるエンドポイント。これを sgcOpenAPI に供給すると、仕様をミラーする強く型付けされた Delphi ユニットが得られ、リクエストおよびレスポンスクラスはすでに設定済み、認証は結線済み、ページネーションは処理済みです。

Stripe + sgcOpenAPI

Stripe は公式 OpenAPI 3 仕様を出荷・保守しています。sgcOpenAPI のパーサーとコードジェネレーターは、これを Delphi 7 から RAD Studio 13 でコンパイルする Pascal に直接変換します。

ソース仕様

github.com/stripe/openapi

認証

ベアラーシークレットキー + 冪等性キー

生成ユニット

sgcOpenAPI_Stripe

プラットフォーム

Windows、macOS、Linux、iOS、Android

仕様をパーサーに供給

Stripe の公開リポジトリから最新の spec3.json をダウンロードし、TsgcOpenAPIParser で読み込みます。パーサーは $ref ポインター、合成キーワード、共有エラーモデルを解決し、コードジェネレーターが完全に解参照された API モデルを見られるようにします。

uses
  sgcOpenAPI_Parser, sgcOpenAPI_Generator;

var
  vParser: TsgcOpenAPIParser;
  vGen: TsgcOpenAPIGenerator;
begin
  vParser := TsgcOpenAPIParser.Create(nil);
  try
    vParser.LoadFromFile('C:\specs\stripe\spec3.json');
    Memo1.Lines.Add(Format('Loaded Stripe spec: %d paths, %d schemas',
      [vParser.Paths.Count, vParser.Schemas.Count]));

    vGen := TsgcOpenAPIGenerator.Create(nil);
    try
      vGen.Parser := vParser;
      vGen.OutputUnit := 'sgcOpenAPI_Stripe';
      vGen.OutputFolder := 'C:\Generated\Stripe';
      vGen.Generate;
    finally
      vGen.Free;
    end;
  finally
    vParser.Free;
  end;
end;

ジェネレーターは、仕様内のタグごとに 1 つの強く型付けされたクラス — TsgcStripe_ChargesTsgcStripe_CustomersTsgcStripe_SubscriptionsTsgcStripe_PaymentIntents など — を持つ sgcOpenAPI_Stripe.pas という 1 つの Pascal ユニットと、共有 HTTP クライアントと認証状態を所有するトップレベルの TsgcStripe ファサードを書き出します。

Charge を作成

ファサードでベアラートークンを 1 度設定し、その後、型付きサブオブジェクトのメソッドを呼び出します。リクエストボディは流暢なプロパティで設定され、レスポンスは強く型付けされたオブジェクトとして返ってきます。

uses sgcOpenAPI_Stripe;

var
  vStripe: TsgcStripe;
  vCharge: TsgcStripeCharge;
begin
  vStripe := TsgcStripe.Create(nil);
  try
    vStripe.ApiKey := 'sk_test_4eC39HqLyjWDarjtT1zdp7dc';

    vCharge := vStripe.Charges.Create(
      Amount   := 2000,                  // cents
      Currency := 'usd',
      Source   := 'tok_visa',             // test token
      Description := 'Order 1234');
    try
      Memo1.Lines.Add('Charge id: ' + vCharge.Id);
      Memo1.Lines.Add('Status:    ' + vCharge.Status);
      Memo1.Lines.Add('Paid:      ' + BoolToStr(vCharge.Paid, True));
    finally
      vCharge.Free;
    end;
  finally
    vStripe.Free;
  end;
end;

顧客とサブスクリプション

ページネーションは生成されたカーソルオブジェクトが処理します。冪等性キーは、すべての変更メソッドのオプショナルな IdempotencyKey パラメーター経由で渡されます。

// Create a customer + attach a subscription
var
  vCustomer: TsgcStripeCustomer;
  vSub: TsgcStripeSubscription;
  vItems: TsgcStripeSubscriptionItemList;
begin
  vCustomer := vStripe.Customers.Create(
    Email := 'jane@example.com',
    PaymentMethod := 'pm_card_visa');

  vItems := TsgcStripeSubscriptionItemList.Create;
  vItems.Add(Price := 'price_1JxYzZAbCdEfGhIj');

  vSub := vStripe.Subscriptions.Create(
    Customer := vCustomer.Id,
    Items := vItems,
    IdempotencyKey := TGUID.NewGuid.ToString);

  // Page through invoices for this customer
  for vInvoice in vStripe.Invoices.List(Customer := vCustomer.Id) do
    Memo1.Lines.Add(Format('%s — %d %s',
      [vInvoice.Id, vInvoice.AmountDue, vInvoice.Currency]));
end;

生成ユニットが提供するもの

ユニットは公式仕様から生成されるため、文書化されたすべてのエンドポイントとフィールドが、手動バインディング作業なしで利用可能です。

決済と返金

ChargesPaymentIntentsPaymentMethodsRefundsDisputesSourcesTokens — 完全な古典的 Charges API に加え、Strong Customer Authentication を備えたモダンな PaymentIntents フロー。

請求とサブスクリプション

CustomersInvoicesInvoiceItemsSubscriptionsSubscriptionItemsPricesProductsCouponsPromotionCodesTaxRates

Connect と Payouts

AccountsAccountLinksTransfersPayoutsBalanceTransactions — Delphi バックオフィスから Stripe Connect プラットフォームを運用するために必要なすべて。

Identity と Terminal

Identity VerificationSession オブジェクトと Terminal Reader/Location オブジェクトがすべて存在し、Stripe が KYC 結果に使用する多態的な last_verification_report スキーマも含まれます。

Webhook イベント

判別された data.object ペイロードを持つ完全な Event スキーマが含まれます。元のリクエストの送信に使用するのと同じ型で、受信した webhook ボディをパースしてください。

ファイルとレポート

FilesFileLinksReporting — 仕様がそれらのエンドポイントを multipart/form-data でマークしているため、マルチパートアップロードヘルパーが自動的に出力されます。

注意すべき 2 点

仕様バージョンのドリフト

Stripe は毎月新しい API バージョンを出荷します。仕様ファイルをアカウントが使用するバージョンに固定し(すべてのリクエストで Stripe-Version を設定)、アップグレード時に Delphi ユニットを再生成してください。ジェネレーターは決定論的です — 同じ仕様、同じ出力。

多態レスポンス

いくつかの Stripe スキーマ(payment_method_detailssourcebalance_transaction.source)は判別子付きの oneOf を使用します。生成ユニットは基底クラスと、バリアントごとに 1 つの子孫を出力します — Type プロパティに基づいてダウンキャストしてください。

ブログから

OpenAPI Delphi パーサー

背後のパーサーが、難解な合成キーワードを含む実世界の OpenAPI 3.x 仕様をどう扱うか。

投稿を読む →

OpenAPI パーサー: スキーマのバンドル

マルチファイル仕様と外部 $ref ポインターの扱い — Stripe サブ仕様が分割されている場合に有用。

投稿を読む →

sgcOpenAPI 2026.6

sgcOpenAPI の最新リリースノート — 新しいジェネレーターオプションとパーサーの改善。

投稿を読む →

今日 Stripe クライアントを生成

sgcOpenAPI には、パーサー、コードジェネレーター、OpenAPI サーバー、Google、Amazon、Microsoft、Azure SDK バンドルが同梱されています — 1 製品、3 ティア。